Почему игры используют карты нормалей?
Чтобы хорошо выглядеть, ассеты игр ААА-класса, такие как персонажи, оружие и элементы окружения в значительной степени полагаются на карты нормалей. Но что такое карты нормалей и почему они так широко распространены?
Балансировка между качеством и производительностью
Игры должны работать в режиме реального времени со скоростью 60+ кадров в секунду. Это означает, что высокополигональные модели, обычно используемые для 3D-печати или анимации, не будут хорошо работать в игре, так как они будут значительно замедлять производительность игры.
Для обеспечения плавной работы игры необходимы модели с низким уровнем полигонов.
Но в то же время геймеры ожидают красивые визуальные эффекты с высоким уровнем детализации. Разработчики игр должны иметь возможность использовать большое количество моделей в одной сцене, не говоря уже о различных эффектах освещения и физике.
Итак, как же найти компромисс между высокой производительностью игры и реалистичными визуальными эффектами?
Карты нормалей – лучший компромисс, который обеспечивает высокое качество модели и высокую производительность игры. Секрет в том, что они позволяют нам получить большее количество деталей при использовании меньшего количество полигонов.
Имитация геометрии с помощью текстур
Как это работает? Карты нормалей (Normal maps) и карты смещения (Displacement maps) представляют собой особые виды текстур, которые влияют на то, как ведет себя свет при попадании на поверхность. Они создают иллюзию глубины, сообщая лучу света отскакивать от имитационных особенностей поверхности, даже если на самом деле их там нет.
Это позволяет нам достичь высокого уровня детализации, не обременяя игровой движок сложной геометрией. Звучит слишком хорошо, чтобы быть правдой? Имейте в виду, что есть некоторые ограничения для данной техники.
Карты нормалей VS карты высот
В то время как карты нормалей и карты высот дают нашим низкополигональным моделям вид более детализированных, они используются для совершенно разных целей.
Наиболее очевидное различие заключается в том, что карты высот создаются лишь в оттенках серого, потому что они отображают только разницу высот. Черный (0) – «вниз», белый (1) – «вверх», а 0.5 означает отсутствие изменения высоты.
Существует несколько различных типов карт высот, с которыми вы, возможно, уже знакомы.
Bump maps – это способ старой школы для добавления деталей к низкополигональным объектам. Они используются так же, как и обычные карты, за исключением того, что они содержат только информацию о высоте, а не информацию об угле.
Displacement maps иногда используются для изменения местоположения фактических вершин объекта. Такое перемещение не добавляет никаких дополнительных деталей. Вместо этого оно используется для создания более сложных объектов. Часто подобным способом генерируется рельеф мира с использованием карт смещения.
Еще карты смещения используются для отображения параллакса (так называемое виртуальное отображение смещения), что является более сложной техникой, в которой игровой движок пытается смещать координаты текстуры относительно камеры. Это довольно ресурсозатратно, но может давать хорошие результаты.
Normal Maps
не содержат информации о высоте. Вместо этого они содержат информацию о углах. Они цветные, потому что значения RGB сообщают рендеру, в каком направлении идет наклон, и насколько он крут.
Наиболее важным преимуществом этого является то, что мы можем использовать информацию об угле для того, чтобы искусственно сгибать края соседних граней друг к другу, тем самым имитируя эффект фаски. Это невозможно сделать только с информацией о высоте, потому что рендер не может знать, в каком направлении должны быть согнуты края.
Смягчение острых краев звучит достаточно просто, но это дает удивительно большой скачок визуального качества. Все потому, что в реальной жизни ничто не имеет абсолютно острых краев (кроме, разве что, графена). С другой стороны, в компьютерной графике все имеет бесконечно острый край, поскольку каждая грань имеет нулевую толщину.
Помимо того, что свет на углах выглядит более естественным, этот блеск помогает передать форму объекта, особенно если смотреть на него с расстояния. Так как многие игровые объекты отображаются на экране довольно мелкими, художники часто преувеличивают углы объектов, чтобы помочь игроку увидеть все четко или подчеркнуть важные объекты.
3 типа карт нормалей
Существует три типа карт нормалей, которые дают идентичный результат, но вычисляются немного по-разному.
Tangent space (касательное пространство)
Как следует из названия, карты нормалей касательного пространства основаны на касательном направлении каждой грани. Эти карты всегда состоят из комбинации трех цветов.
- Синий показывает наклон в направлении нормали
- Красный показывает наклон влево и вправо в направлении касательной
- Зеленый показывает наклон вверх и вниз в направлении касательной. OpenGL карты нормалей отображают зеленым цветом наклон вверх, в то время как DirectX наклон вниз.
Object space (объектное пространство)
Карты нормалей пространства объектов основаны на всем объекте, а не на его индивидуальных гранях. Такие карты немного быстрее вычисляются графическими картами, но у них есть некоторые недостатки.
Поскольку правая сторона будет другого цвета, нежели левая, никакие UV-карты не могут быть отзеркалены, а это означает, что большое количество текстурного пространства будет потрачено впустую на симметричных моделях. Это также означает, что если объект скручивается, то мы увидим инвертированное затенение.
World space (мировое пространство)
Карты нормалей в пространстве мира являются наименее гибкими. Поскольку они основаны на глобальных координатах, объект вообще не может вращаться, чтобы сохранить корректность затенения. Этот тип карт нормалей используется только для больших, статических и асимметричных объектов, таких как окружение игрового мира, или временно используется в таких программах, как Substance Painter, в качестве средства вычисления различных погодных эффектов и не только.
Заключение
Наиболее распространенным типом карт нормалей являются карты касательного пространства, поскольку они наиболее гибки. Но полезно понимать и другие типы, чтобы вы могли использовать их, если это будет необходимо.