Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
o.Normal += lerp(fixed3(0.5,0.5,1), n2, clamp(splat_control.b + 0.3,0,1));
// A general tangent estimation
fixed3 T1 = float3(1, 0, 1);
fixed3 Bi = cross(T1, v.normal);
fixed3 newTangent = normalize(cross(v.normal, Bi));
В общем, получается, что нормали произвольной длины и в неконтролируемо-повёрнутом пространстве. Разве что для шума годятся, не более…
o.Normal = lerp(fixed3(0.5,0.5,1), n1, clamp(splat_control.r + 0.3,0,1));
Нормаль — это единичный вектор перпендикулярный к поверхности. И так как нам нужно ее плавно уменьшать, мы не можем просто умножать ее на какой-то коэффициент. Для решения этой задачи я интерполирую текущую нормаль в т.н. «нулевую нормаль», при которой на текстуре не будет никакого рельефа.
Насколько я знаю далее оно в недрах ShaderLab нормализуется.
Функция расчета тангенса взята из другого шейдера ландшафта и прекрасно работает
Договориться с дизайнером о чем? Мех в данном случае строит юнити.
Зачем писать про шум если вы не знакомы с юнити и тем более не видели шейдер в работе?
Значит нужно понять, куда у меха Unity направлена U координата.
Расчет тангенсов взят из другого проверенного шейдера с офф. форума, которым я долго пользовался до этого (ссылка на него в начале поста).
По идее U всегда направлена по X.
Не вижу я там официального форума, а виже блог некого «sixtimesnothing».
Вот его пост на офф. форуме
Примеров реализации расчета тангенсов в коде очень много, но в шейдере ни одного.
fixed3 T1 = float3(1, 0, 0);
if (dot(T1,v.normal) > 0.99) {
T1 = float3(0,1,0); //workaround
}
fixed3 Bi = cross(T1, v.normal);
...
Unity3D 3.х Terrain Bump Specular Shader