Ocean Waves Normals
Использование world position (из вершинного шейдера) является популярным способом создания волн океана в UE3/UE4. Однако есть недостаток, который заключается в том, что деформированая геометрия не имеет правильного затенения/shading -а. Для его устранения приходится вручную внутри материала вычислять новые нормали объекта.
Для этого необходимо вычислить производные той же функции, которая используется для формирования морских волн. Производные по X и Y эквивалентны красному и зеленому каналу карт нормалей. Учитывая 2 этих компонента, можно вычислить недостающий 3-й компонент.
Я хорошо знаю что есть много способов реализации движения океана, но я решил показать лишь один подход с 2 подтипами, направленные волны и круговые.
В реалистичном материале океана, как правило сочетают несколько волн разного размера, скорости, направления/положения. Это обозначает что вам необходимо будет дублировать некоторые ноды показанные в этой статье. Лично я бы не стал расчитывать материал на более 3-4 волн, чтобы сохранить общую сложность материала.
Настройки материала ниже, будут работать только если параметр «Tangent Space Normal» деактивирован в свойствах материала. Это связано с тем, что все вычисления будут сделаны в мировом пространстве, что означает что мы получим мировые карты нормалей (World space normal/Object space normal). Однако если вы хотите использовать именно Tangent space карты нормалей, вам необходимо будет сделать преобразование результата из World space пространства в Tangent space.
Направленные волны:
В приведенном ниже примере вы можете увидеть, что интенсивность нормалей, автоматически рассчитывается, путем сравнения длинны и высоты волны.
Круговые волны