Алгоритм Восстановление нормалей
В этом посте я хочу поделиться небольшой, но полезной техникой, которую можно использовать в шейдерах движка Godot Engine. Речь пойдёт о восстановлении полной нормали в 3D по только двум её компонентам — X и Y. Это особенно полезно, когда мы передаём нормали через текстуру (например, в каналах RG), и нам нужно восстановить недостающую Z-компоненту.
Принцип работы
Если у нас есть нормаль, представленная как vec2(x, y)
, мы можем рассчитать её третью компоненту z
, опираясь на свойство, что длина единичного вектора равна 1:
x2 +y2 + z2 = 1→ z = sqrt(1 − x2 − y2)
Это позволяет нам восстанавливать вектор нормали, не храня лишние данные — отличный способ экономить ресурсы и ускорять рендеринг, особенно в визуальных эффектах и анимациях.
Где можно использовать?
- В процедурных нормалях
- При работе с flow maps, decal normals
- В оптимизации текстур нормалей
- Для рендера эффектов на геометрии, где важна производительность
Плюсы подхода
- ✅ Экономия места в текстуре (только 2 канала)
- ✅ Минимум вычислений
- ✅ Подходит для процедурных и динамических нормалей
- ✅ Совместимо с Godot Visual Shader (через кастомные узлы)
Вы можете получить GLSL код или VisualShader алгоритм на этой странице: XY Нормальная реконструкция – Z — Шейдеры Godot
Если вам нужен готовый визуальный алгоритм, то вы можете скачать из Google Disc
Ниже предоставленное изображение визуального алгоритма

Спасибо что вы снами.