Такие игровые объекты, как персонажи, оружие и окружающая среда, часто используют normal mapping, чтобы казаться более реалистичными. Но что такое normal mapping и почему его использование так широко распространено?
Балансируя качество и представление
Игры должны работать в режиме реального времени со скоростью 60+ кадров в секунду. Это означает, что высокополигональные модели, обычно используемые для 3D-печати или анимации, не будут хорошо работать в игре, поскольку они будут огромным ударом по отзывчивости игры.
Низкополигональные модели необходимы для обеспечения плавной работы игры.
Но в то же время, геймеров ожидают красивые визуальные эффекты с высоким уровнем детализации. Разработчики игр должны иметь возможность использовать много моделей в одной сцене, чтобы достичь этого, не говоря уже о дорогостоящем освещении, физике и эффектах.
Итак, как мы можем найти компромисс между плавной производительностью и реалистичными визуальными эффектами?
Карты нормалей (normal mapping) - это лучший компромисс между качеством модели и производительностью игры. Секрет заключается в том, что они позволяют нам получить более очевидные детали, используя меньше геометрии.
Faking Geometry With Textures
Как это работает? Карты нормалей (normal mapping) и смещений(displacement)-это специальные типы текстур изображений, которые влияют на то, как свет вычисляется по поверхности. Они создают иллюзию глубины, приказывая свету отражаться от моделируемых объектов поверхности, даже если эти объекты на самом деле не существуют.
Это позволяет нам достичь высокого уровня детализации, не обременяя игровой движок сложной геометрией. Звучит слишком хорошо, чтобы быть правдой? Имейте в виду, что у этой техники есть некоторые ограничения.
Карты нормалей и карты высоты
Хотя как нормальные, так и высотные карты придают нашим низкополигональным моделям видимость большей детализации, они используются для явно различных целей.
Наиболее очевидным отличием является то, что карты высот являются только оттенками серого, потому что они только отображают различия в высоте. Черный - это "вниз", белый - "вверх", а 0,5 серого означает отсутствие изменения высоты.
Существует несколько различных типов карт высот, с которыми вы, возможно, уже знакомы.
Bump maps - это старый школьный способ добавления деталей к низкополигональным объектам. Они используются так же, как и обычные карты, за исключением того, что они содержат только информацию о высоте, а не информацию об угле.
Карты смещений (displacement map) иногда используются для изменения местоположения фактических вершин в сетке. Такого рода смещение не добавляет никаких дополнительных деталей. Вместо этого он используется для создания в противном случае сложных объектов. Примером такого типа смещения является то, как рельеф часто генерируется из текстуры.
Другое использование карты смещения - параллаксное отображение (parallax mapping, также называемое виртуальным отображением смещения), которое представляет собой более продвинутый метод, в котором игровой движок пытается смещать координаты текстуры относительно камеры. Это довольно дорого для вычислительных ресурсов, но это может привести к потрясающим результатам.
Карты нормалей (normal map), с другой стороны, не содержат никакой информации о высоте вообще. Вместо этого они содержат информацию об угле. Они красочны, потому что значение RGB сообщает визуализатору, в каком направлении склон обращен и насколько крут этот склон.
Наиболее важным преимуществом этого является то, что мы можем использовать информацию об угле, чтобы искусственно согнуть края соседних граней друг к другу для получения эффекта скоса. Это не может быть сделано только с информацией о высоте, потому что у визуализатора не будет способа узнать, в каком направлении края грани должны быть согнуты.
Смягчение острых краев звучит просто, но это дает удивительно большой скачок в визуальном качестве, потому что в реальной жизни ничто не имеет полностью острых краев (за исключением, возможно, графена ). С другой стороны, в CG все имеет бесконечно острый край, так как каждая линия имеет нулевую толщину.
Вы вряд ли заметите фактическую толщину края в игре, но вы можете заметить тот факт, что по крайней мере часть света должна отражаться от этих краев.
Помимо того, что свет просто кажется более естественным, свет с краевым блеском очень помогает показать форму объекта, особенно если он виден издалека. Поскольку многие игровые объекты отображаются на экране довольно мелкими, игровые художники часто преувеличивают свои скосы, чтобы помочь игроку ясно видеть все или помочь подчеркнуть важность объектов.
3 Типа карт нормалей
Есть три типа карт нормалей, которые достигают одного и того же эффекта, но вычисляются немного по-разному.
Касательное пространство
Как следует из названия, нормали касательного пространства основаны на касательном направлении каждой грани. Эти карты всегда состоят из комбинации трех цветов.
- Синий показывает, что имеет наклон в нормальном направлении
- Красный показывает, что имеет наклон в левом и правом касательном направлении
- Зеленый показывает, что имеет наклон вверх или вниз в направлении касательной. Карты OpenGL normal имеют зеленый наклон вверх, в то время как карты DirectX имеют зеленый наклон вниз.
Пространство объектов
Карты нормалей пространства объектов основаны на объекте в целом, а не на каждой грани в отдельности. Это немного проще для графической карты, но у него есть некоторые недостатки.
Поскольку правая сторона в отличие от левой будет иметь другой цвет стороны, то ни один ультрафиолетовый луч не сможет быть зеркально отражен. Из этого следует, что большая часть пространства текстуры будет потрачена впустую на симметричные модели. Это также означает, что если объект поворачивается вокруг, затенение будет отображаться перевернутым.
Мировое пространство
Карты нормалей мирового пространства являются наименее гибкими из всех. Поскольку они основаны на глобальных координатах, объект не может вращаться, чтобы сохранить правильное затенение. Этот тип карты нормалей используется только для больших, статичных и асимметричных объектов, таких как окружающая среда, или временно используется в программах, таких как Substance Painter, в качестве средства для расчета эффектов выветривания.
Подведение итогов
Наиболее распространенный тип карты нормалей, с которой вы столкнетесь и будете работать - касательное пространство, поскольку оно является наиболее гибким, но полезно понимать и другие типы, чтобы вы могли использовать их в случае необходимости. Для углубленного просмотра карт нормалей и способов их моделирования и выпекания, можете обратиться к уроку "Введение в нормальное картографическое моделирование".