На форуме периодически возникают вопросы по поводу использования нормалок, потому решил напcиать небольшой ликбез на эту тему.
Простыми словами нормаль - это направление куда "смотрит" вертекс. Выражается в координатах XYZ для каждого вертекса. С помощью нормалей формируютя группы сглаживания или хард/софт эджи, которые, в свою очередь, задают характер "поверхности" полигонов.
Редактирование нормалей позволяет расширить возможности моделирования. К примеру плоскую поверхность можно сделать визуально фигурной либо наоборот.
Абсолютно идентичные по геометрии плоскости, но имеющие разные нормали на вертексах.
Так же можно сделать обьемную форму визуально плоской, выровняв нормали в одном направлении
Однако данный прием ограничен количеством вертексов, и для создания детализированной поверхности потребуется не меньше вертексов, чем на полноценной хайке.
Это проблему решает карта нормалей, которая содержит в каждом пикселе координаты нормали, закодированные в RGB каналах в виде координат XYZ. Такая карта огранчиена уже количеством пикселей, а это более милиона при разрешении 1024х1024, что во много раз превышает количество вертексов и позволяет добавить более подробные детали на поверхность.
Таким образом Normal Map коллосально расширяет возможности детально прорабатывать относительно "легкие" модельки. Однако возникает вопрос, как эту нормалку получить.
Самый верный и правильный способ, это "запекание" с более детальной модели. Процесс запекания кодирует нормали с хайполи модели в координаты RGB, учитывая так же нормали самой лоуполи, так называемая "компенсация".
О бейке нормалей есть полно информации и это достаточно обьемная тема тянет на отдельную статью, потому ограничусь основными моментами.
Для корректного запекания нужна хорошая UV мапа. Основное правило простое, все харды (или грани между группами сглаживания) обязательно должны иметь разрез на UV, иначе будет виден шов. Можно запечь на модель с одной группой сглаживания и забить на швы в нужных местах, но тогда нормалка будет с жуткими градиентами (та самая компенсация нормалей лоуполи) что в дальнейшем обязательно вылезет боком. Чем меньше градиенты на нормалке, тем с ней легче работать. При подготовле лоуполи нужно настроить группы сглаживания, сделать разреры ЮВ по нужным граням, и уже потом продолжать резать по необходимости.
Готовую нормалку нельзя корректировать как обычную текстуру, любые манипуляции с яркостью, насыщенностью, контрастом и прочее нарушат те самые RGB координаты, и нормалка будет отображаться некорректно. Подрисовывание возможно, но требуется опыт.
При загрузке нормалки нужно обязательно учитывать гамма коррекцию (sRGB) Для нормалки она не используется.
Normal Map имеет два формата: OpenGL и DirectX, которые различаются направлением зеленого канала. Потому обязательно учитывайте какой формат используется вашим рендер движком. Во всех современных движках есть параметр, флипающий зеленый канал без использования сторонних редакторов.
На этом все. Вопросы приветствуются, при необходимости могу дополнить статью или написать новую.
Творческих успехов всем!