Академический Документы
Профессиональный Документы
Культура Документы
Normal Map. Практическое руководство
Normal Map. Практическое руководство
5 мая 2018
Введение
Данное руководство создано для тех, кто стремится понять тему Normal
Mapping. Оно написано как для новых людей в индустрии, так и для более
опытных, которые хотят освежить знания по теме. Здесь я постараюсь
рассмотреть каждую возможную проблему и предоставить простой и
доступный ответ. Надеюсь, что это руководство даст вам все необходимое о
Normal Mapping и о том, как его применять. Проблемы с Normal Mapping не
должны стоять на пути вашего творчества!
Отдельное спасибо EarthQuake с Polycount за вдхоновение на создание этого гайда.
Условия использования
Пожалуйста, уважайте работу автора и не копируйте текст руководства никуда,
кроме Polycount, без моего разрешения (Superfranky). Если вы увидели ошибку
или хотите что-то добавить, то, пожалуйста, напишите мне на Polycount или
отправьте письмо на networkcat2@hotmail.com.
Примечание
Перевод подготовлен специально для школы компьютерной графики XYZ.
Некоторые главы, после согласования с автором, были расширены или
обновлены для большей актуальности. Следовательно, некоторые части текста
могут отсутствовать в оригинальном руководстве. По вопросам перевода
пишите на nocstrig@yandex.ru. (Леонид Садеков)
Источники
Помимо оригинального руководства были использованы дополнительные
источники информации:
A Practical Guide on Normal Mapping For Games:
http://polycount.com/discussion/146667/a-practical-guide-on-normal-mapping-for-
games
You're making me hard. Making sense of hard edges, uvs, normal maps and vertex
counts:
http://polycount.com/discussion/107196/youre-making-me-hard-making-sense-of-
hard-edges-uvs-normal-maps-and-vertex-counts
Техническая информация
В данной главе я постараюсь предоставить всю техническую информацию
связанную c Normal Mapping , наиболее простым языком, без отвлечения на
сторонние темы, которые напрямую не относятся к созданию игровых моделей.
Достоинства:
•Легче генерировать карту кривизны
•Слегка улучшенная производительность
Недостатки:
•Нельзя повторно использовать. Разные формы требует разных карт.
•Тайлить или отзеркалить можно только с поддержкой шейдера.
•Трудно добавлять отдельно запеченные детали из-за сильной вариативности
цвета.
•Плохо сжимается.
• Unreal Engine 4
• Substance Painter
• Marmoset Toolbag
• Unity
Если вы запекаете, используя Maya, то помните, что она имеет общий алгоритм
расчета пространства касательных с Marmoset Toolbag.
Создание HP модели
Чтобы запечь идеальную карту нормалей - необходимо знать, как правильно
создавать HP модель, с учетом всех нюансов запекания карт нормалей.
Толщина фасок
Если вы хотите перенести фаски с HP модели на карту нормалей, то необходимо
их делать мягче. Если фаски будут слишком острые, то они станут
трудноразличимы на модели с примененной картой нормалей, а, значит,
станут хуже читаться на расстоянии.
Детали со скосом
Из-за принципа работы проекции HP геометрии на LP запечка не может
захватить слабозаметные детали. Поэтому, если вы хотите передать
вдавливания или выступы через карту нормалей, то им необходимо добавить
дополнительные фаски/скосы, чтобы стать заметными на плоской поверхности
при виде спереди.
Пересечение геометрии
Стоит всегда думать о том, как будет выглядеть финальная модель при работе
над HP. Иногда наилучший вариант - это создавать непрерывную LP, если
объединяемые объекты не будут анимироваться или использоваться раздельно,
как, например, ремень на штанах. Для данного примера наилучшим решением
было бы держать штаны и ремень максимально близко друг к другу на этапе HP,
чтобы позже, при создании LP, сделать их цельным объектом. Если HP и LP
плохо согласуются друг с другом, то это вызовет ошибки на карте нормалей в
местах наличия пустых пространств.
Marmoset Toolbag.
Substance Painter
Процесс подготовки объектов ничем не отличается от вышеописанного. Чтобы
SP учитывал созданные бейк-группы при запекании, необходимо для поля
Match выбрать By Mesh name.
Для того чтобы сделать тоже самое вручную, нужно перейти в режим
редактирования уровней (Level Adjustments) на синем канале и уменьшить
количество белого с 255 до 128, после чего установить режим смешивания Hard
Light для накладываемой карты нормалей.
Создание LP модели
Градиенты
Прежде чем переходить к запеканию, вам необходимо понять, что означают
градиенты на картах нормалей. Области карты нормалей залитые синим
цветом (R/G/B: 128/128/255) означают, что нормали в ней сонаправлены с
интерполированными нормалями вершин объекта для этого пикселя. Когда
карте нормалей необходимо компенсировать экстремальные углы на
геометрии, тогда начинают возникать градиенты. Чем меньше карте нормалей
приходится компенсировать нормали объекта, тем лучше. Однако это не
означает, что градиенты - это зло.
Выглядит хорошо, да? Без градиентов, все запеклось идеально. Но что это
значит и как этого достичь? Или более интересный вопрос: мне стоит
беспокоиться?
Жесткие грани и UV
Итак, скажем, вы не хотите видеть градиенты, а хотите ровную и красивую
запечку карты нормалей. Значит, вам необходимо узнать, что такое жесткие
грани/группы сглаживания на LP объекте. Каждый раз, когда вы используете
жесткую грань на LP, это ослабляет градиент на выбранной грани.
Рассмотрим это на примере простого куба. Сейчас объект имеет две группы
сглаживания: одну для одной поверхности и другую для всех остальных. Вы
можете увидеть, что поверхности с общей группой сглаживания имеют
искажённое затенение. Если вы столкнулись с подобным, то это значит, что и
на карте нормалей будут присутствовать подобные градиенты после запекания.
Посмотрим, как это работает.
Однако очень просто стать жертвой такого простого подхода. Порой, вам нет
необходимости разделять группы сглаживания на UV. К примеру, если вы
отзеркалили UV остров, или круглый объект развернут в несколько UV кусков -
нет нужды оставлять отдельные группы сглаживания.
Отражение UV
Если вам необходимо отразить половину LP объекта, то вот хороший способ
сделать это:
2. Сделать развертку.
3. Применить симметрию обратно.
Триангуляция
Поскольку разные приложения для запекания и игровые движки
триангулируют модель при импорте по-своему, то чрезвычайно важно
триангулировать модель перед запеканием самостоятельно, чтобы избежать
различий в затенении между приложениями.
3DsMax
Maya
Сшивая UV острова, вы должны также думать о том, видна ли будет эта часть
объекта или нет, можете ли вы позволить себе наличие градиентов в этой
части.
Averaged Normals:
Так почему это важно? Если я удалю добавленные грани и применю карту
нормалей внутри движка, то вот что мы получим – идеальный результат. Нет
никаких различий в положении нормалей у двух объектов, хотя один из них
имеет меньшее количество полигонов. Круто.
Но теперь проведем другой тест. В этот раз я сошью UV острова и назначу одну
группу сглаживания ко всему объекту только для того, чтобы показать сильные
градиенты на карте нормалей.
Дело в том, что градиенты двух моделей стали слишком разными, и для модели
без поддерживающих граней карта нормалей не может их правильно
компенсировать.
Так что же делать, если у меня есть градиенты, но я не хочу назначать жесткие
грани, разделять UV и прочее? Вот несколько способов:
Способ 1 (SkewMesh)
Один из простейших способов избавиться от искаженных деталей на объектах,
где другие методы могут быть трудноисполнимыми, называется Skewmesh,
который работает следующим образом:
1. Создайте кейдж.
Готово!
Способ 2
1 — Подготовьте два объекта: один без поддерживающих граней (ваша
финальная модель) и другой - для запекания - с поддерживающими гранями.
Xnormal
3 — Для запекания карты Object Space необходимо снять галку с Tangent Space в
настройках.
4 — Выберите вашу модель (с поддерживающими гранями) и запеките ее.
Так выглядит карта Object Space, странного желтого цвета. Но это не важно. Что важно, так это то,
что сейчас мы будем конвертировать ее в карту Tangent Space.
Загрузите вашу финальную модель в слот с LP. Карту Object Space добавьте в
поле “Input normal map” и выберете формат, в котором вы хотите сохранить
карту нормалей.
Вот наш результат при наличии всех градиентов. Так где разница, спросите вы?
Заметьте, что нет никакой разницы в нормалях между двумя объектами. Вот,
что случилось:
Marmoset
Для того чтобы запечь детали без искажений в Marmoset Toolbag, необходимо в
настройках Baker снять галочку с Smooth Normals.
Способ 4
Мне правда нужны все эти острова? Давайте сложим их друг на друга!
Запекание
Сбросить трансформацию
Прежде чем запекать карты, убедитесь, что трансформация вашей LP модели
сброшена. Это чрезвычайно важно! Часто в процессе моделирования модель
вращается и масштабируется, и эти манипуляции могут создать путанные
локальные координаты для модели, что часто оборачивается ошибками при
запекание карт нормалей.
3DsMax
Maya
Отступ граней
Если карта нормалей не имеет достаточный отступ, то это создаст швы на
границах UV островов.
Направление нормалей
Перед запеканием убедитесь, что ваша HP и LP модель имеет корректное
направление нормалей, то есть, нет инвертированных нормалей. Внутри
3DsMax вы можете проверить это, выбрав Face Direction на выделенном
объекте. После этого инвертированные поверхности подсветятся зеленым. Если
инвертированные поверхности останутся незамеченными, то это выльется в
ошибки проецирования, поэтому будьте внимательны.
3DsMax
Maya
Xnormal
Вы можете создать кейдж для своего объекта прямо внутри Xnormal. Для этого
необходимо перейти в 3D Viewer.
Отметьте поле Edit Mesh и начните редактировать кейдж. Сохраните результат
по окончанию.
Marmoset Toolbag
Устранение ошибок
Даже с таким подробным руководством у вас на руках можно столкнуться с
множеством разных проблем, когда речь заходит о запекании карт нормалей.
Дальше я покажу вам, как предотвращать и решать большую часть из них.
Будьте подготовлены
7. Траингулируйте модель.
Мои запечки желтого цвета, а должны быть синего. Что я должен делать?
Рисование вручную
Стоит ли исправлять карту нормалей руками?
https://www.allegorithmic.com/products/substance-painter
http://quixel.se