SPH-4. Текстурирование. Проверка запекаемых карт. Часть 1: проверка нормала

В изучении 3D-графики большую роль играет работа над ошибками. Хоть в продакшене это чаще всего невозможно, но в обучении все новички должны стремиться доводить свои работы до идеала. Проще сказать, чем сделать, ведь один вопрос решать известные проблемы, а совсем другое — фиксить то, о существовании чего и не догадываешься.


Действительно, вот ты затекстурил очередной пропс, смотришь на него и вроде в общем всё хорошо, но что-то с ним не так. Цвета неправильные? Roughness однообразный? Может быть это всё из-за плохого света? Точно, плохой свет...или всё же нужно перезапеч карту AO покачественней?
Через подобного рода «поиск улучшений» проходят все артисты в начале своего пути. Даже когда начинаешь разбираться во всем получше — всё равно возникают подобные ситуации.


В этом цикле статей мы разберем основные проблемы, которые встречаются у новичков в процессе запекания карт, текстурирования, презентации своих работ и тд.. Мы поговорим об разнообразии и истории на Roughness и Albedo, о главных ошибках при использовании Height канала и ещё о многом другом.
Обсуждать всё это мы будем на примере заранее созданной модели шлема американских пилотов времен Вьетнамской войны - SPH-4


Конкретные требования к качеству запекаемых карт нельзя определить однозначно. На одних проектах допускается normal map со слабо заметными артефактами, на других же — требуют просматривать каждую карту в максимальном приближении.

Все зависит от значимости ассета. Если в играх от первого лица есть возможность рассмотреть все детали, то в проектах от третьего — бессмысленно тратить время на полировку каждого элемента. Учитывать нужно и степень освещенности сцены, разрешение текстур, шейдеры и тп. Незачем шлифовать объект до безупречности, если он прячется в дальнем темном углу.
В этой статье мы пройдемся по типичным артефактам на normal map и пофиксим их.
Итак, ты создал классную модель, развернул её и даже успел забэйкать карты, но что-то с ними не так:

bad_normal_a.png

bad_normal_b.png

bad_normal_c.png

bad_normal_channel_a.png

bad_normal_channel_c.png

bad_normal_channel_b.png

..да и остальные карты смотрятся так себе.

bad_AO_b.png

AO_overlap.png

bad_AO_c.png

bad_Curvature_a.png

bad_Curvature_b.png

Однозначно нужно чинить. В большинстве случаев начинать стоит с нормала, ведь на нем проявляется большая часть проблем. Разберешься с ним — и работа пойдет намного легче.

Normal map
Отметим проблемные места на шлеме.

normal_issue_a.png

normal_issue_b.png

normal_issue_c.png

Практически все артефакты при запекании нормала решаются по шаблону.


Разберем пять основных ошибок, которые видно на шлеме.

Пересечение кейджа. Если простыми словами: при бейке нормала программа создает область вокруг объекта, из которой проецируются световые лучи, помогающие запечь карту. Когда объекты находятся слишком близко друг к другу или в настройках запекания выставлены высокие значения Cage Distance, элементы могут перепекаться друг на друга, что и видно на скриншоте.

cage_distance.png

Решение: назначить объектам разные имена, если ты запекаешь по неймингу, или разнести их в сцене дальше друг от друга. Как вариант, можно покрутить настройки Cage Distance.

Швы, вызванные неправильной расстановкой smoothing group или инвертированным зеленым каналом. Если с первым всё просто — Hard Edge - UV шов, то за вторым придется следить отдельно.

Существует два основных алгоритма работы Normal map — OpenGL и DirectX. Отличаются они направленностью света в зеленом канале. В OpenGL свет идет снизу вверх (Y+), а в DirectX — наоборот (Y-). Если ты запекаешь нормал в Marmoset и используешь DirectX в своем сабстанс проекте — нужно обязательно инвертировать зеленый канал. Алгоритм DirectX/OpenGL выбирается при создании проекта. Но его можно сменить и в процессе работы в Edit —> Project Configurations.
Причина таких жестких швов на нормале — разная ориентация шеллов на UV. Старайся следить, чтобы островки имели общую направленность. Во-первых, это поможет избежать подобных проблем на нормале. Во-вторых, в будущем будет проще использовать гранжи с явной направленностью при текстурировании.
Несоответствие high poly и low poly версий модели — частая ошибка новичков. Из-за этого на нормале смещаются запеченные элементы. Старайся сопоставлять и подгонять друг к другу хайполи и лоуполи перед запеканием.
Тут видно, что карта нормалей вовсе не пропеклась. Скорее всего, была допущена ошибка в нейминге. Если ты запекаешь карты по именам, названия должны быть корректными и совпадать на low и high poly моделях. И не забывай назначать правильные суффиксы в именах мешей.


bake_by_mash_name.png

Каким бы сложным не казался процесс запекания карты нормалей, 90% возникающих проблем решаются по одному алгоритму.

norm_normal_a.png

norm_normal_b.png

norm_normal_c.png

Большая часть артефактов на нормале решена, теперь можно приступать к запеканию остальных карт и исправлять оставшиеся проблемы.
В следующем материале мы тщательно проверим AO, Curvature, Position, World Space Normal карты, пофиксим лишние запеченные тени, черные пиксельные линии на стыках UV шеллов и другие мелкие недостатки. Stay tuned.

https://www.artstation.com/artwork/OoGwGv

Хочешь получить бесплатный урок курса "3D PRO. Game Environment Pipelines"? Оставляй заявку на курс: https://render.ru/ru/course/19296

721 0 850 1
1
2020-08-02
"шов на UV—Hard Edge".
А разве не наоборот? Hard edge - обязательно разрез на UV. Soft edge - без разницы.
RENDER.RU