Создание карты нормалей (normal map), карты смещения (displacement map), карты затенения/освещения (ambient occlusion map), самоовещенной карты нормалей и карты отражений/блеска (specular map) из текстуры или карты высот (heightmap) для игровых движков на примере Unity3D. Часть 4. Теория карт нормалей.

Часть 4. Теория карт нормалей

Данная часть статьи посвящена теории карт нормалей, необходимости инвертирования каналов изображения/осей, принципам создания карты нормалей из карты высот, а также запеканию карт нормалей с высокополигональных моделей на низкополигональные модели в Blender (3D).

В предыдущей части статьи был представлен Обзор Normalmap Online

Вы можете поддержать автора проекта, пожертвовав ему сумму (сколько посчитаете нужным и возможным) на развитие сайта.

Получая пожертвования автор сайта уделяет меньше времени на сон и больше — на написание уроков и статей :). Спасибо! 

Теория карт нормалей

Помните, выше я сказал, что в программе Normalmap online предусмотрена возможность инвертирования каналов? Для того чтобы понять, зачем может понадобиться инвертировать один из каналов карты нормалей, давайте обратимся к теории карт нормалей.

Карта нормалей представляет собой изображение, каждый цветовой канал которого используется для хранения информации о XYZ координатах нормалей. Напомню, что в Bump-карте используется всего один канал (grayscale).

На рисунке показаны карты нормалей для усеченной пирамиды и сплюснутой полусферы, а также эта же карта нормалей отдельно в каждом канале: R, G и B. normalmap-channels
На рисунке показаны карты нормалей для усеченной пирамиды и сплюснутой полусферы, а также эта же карта нормалей отдельно в каждом канале: R, G и B.

Красный канал хранит направление нормалей по оси X, Зеленый – по оси Y, а Синий – по оси Z, по сути, описывая смещение точки высокополигональной 3D модели относительно низковолигональной модели (в тот случае, если карта нормалей была создана с использованием методики запекания карты нормалей с high poly модели на Low poly модель, а не была создана из карты высот).

На рисунке показана 3D модель полусферы (слева), с которой была запечена карта нормалей. Справа показана эта же 3D модель полусферы, материалу которой в качестве текстуры Albedo назначена карта нормалей. Чуть вдалеке показана модель плоскости с примененной на ней картой нормалей (конечно, в качестве карты нормалей с неотъемлемой кнопкой “Fix Now” при назначении карты нормалей, непомеченной в качестве карты нормалей, в слот Normal Map в меню настройки параметров материала). normalmap-in-unity3d
На рисунке показана 3D модель полусферы (слева), с которой была запечена карта нормалей. Справа показана эта же 3D модель полусферы, материалу которой в качестве текстуры Albedo назначена карта нормалей. Чуть вдалеке показана модель плоскости с примененной на ней картой нормалей (конечно, в качестве карты нормалей с неотъемлемой кнопкой “Fix Now” при назначении карты нормалей, непомеченной в качестве карты нормалей, в слот Normal Map в меню настройки параметров материала).

Цвет RGB (128,128,128,255), он же (240, 100,50) в HSV и #8080ff в HTML цветах, описывает нормали, направленные строго перпендикулярно поверхности/полигону, если нормали вершин полигона также перпендикулярны его поверхности. На рисунке выше фон вокруг запеченных фигур имеет именно этот цвет.

На рисунке** показана 3D модель усеченной пирамиды и процесс запекания карты нормалей на плоскость в Blender. normal-map-baked-truncated-pyramid
На рисунке** показана 3D модель усеченной пирамиды и процесс запекания карты нормалей на плоскость в Blender.

Обратите внимание на расположение зеленых и красных областей на карте нормалей этих рисунках.

На рисунке показана 3D модель сплющенной полусферы и процесс запекания карты нормалей на плоскость в Blender. normal-map-baked-hemisphere
На рисунке показана 3D модель сплющенной полусферы и процесс запекания карты нормалей на плоскость в Blender.

Процесс запекания карты нормалей в Blender’е ничем не отличается от запекания карты высот, за исключением необходимости выбрать режим запекания “Tangent” в режиме запекания Baking Mode. Более подробно про запекание карт нормалей рассказано в статье Быстрый старт из MakeHuman в Unity3D. Создание low poly и high poly моделей персонажа. Запекание карты нормалей в Blender.

Итак, разобравшись в том, что такое карты нормалей, давайте вернемся к онлайн приложению NormalMap-Online и посмотрим, как же он запекает карты нормали.

Для демонстрации я запек в Blender’е карту высот для усеченной пирамиды и загрузил ее в приложение.

На рисунке показана созданная в NormalMap Online карта нормалей с настройками по умолчанию. truncated-pyramid-normalmap-online-default-new
На рисунке показана созданная в NormalMap Online карта нормалей с настройками по умолчанию.

Как видно на рисунке, карту нормалей данное онлайн приложение создает совсем не так, как Maya, Softimage XSI, ZBrush, Blender (Рисунок** выше), или как Unity3D создает нормали из текстур и карт нормалей (продемонстрировано на Рисунке* выше, где я просил вас обратить внимание на расположение зеленых и красных областей на карте нормалей), или как показано на странице Руководства пользователя Unity3D, Normal map (Bump mapping), посвященной работе с картами нормалей. Получается, что NormalMap Online создает карты нормалей с инвертированным Красным каналом. Чтобы это исправить достаточно поставить галочку напротив буквы “R” для опции инвертирования Invert каналов карты нормалей.

На рисунке показана созданная в NormalMap Online карта нормалей с инвертированным Красным каналом. truncated-pyramid-normalmap-online-inverted-red-channel-new
На рисунке показана созданная в NormalMap Online карта нормалей с инвертированным Красным каналом.

Если вы загрузите текстуру, размер которой не кратен степени двойки (т.е. отличный от2×2, 4×4, 8×8, 16×16, 32×32, 64×64, 128×128, 256×256, 512×512, 1024×1024, 2048×2048, 4096×4096, 8192×8192 пикселей), то приложение сообщит вам о том, что размер изображения не кратна степени 2, показав соответствующее предупреждение “Not power of 2” под окном отображения загруженной текстуры/карты высот.

На рисунке показана загруженная текстура размером отличным от степени двойки, о чем нас и предупреждает NormalMap Online. normal-map-online-not-power-of-two
На рисунке показана загруженная текстура размером отличным от степени двойки, о чем нас и предупреждает NormalMap Online

Кстати, Normalmap Online поддерживает Drag’n’Drop текстур (как GIMP или Photoshop), т.е. вы можете перетащить свое изображения в окно карты высот (HeightMap), чтобы использовать ее для создания карт.

А вот в 3D-Coat от Pilgway и 3ds Max от Autodesk создает карты нормалей с инвертированным Зеленым каналом, чтобы это исправить, достаточно в настройках создания карты нормалей в Projection Options выбрать чекбокс “Up” вместо “Down” для ориентации (Orientation) во вкладке “Normal Map Space”.

В 3D-Coat инвертированный зеленый канал лечится настройками параметров экспорта.

В Mudbox при запекании карты нормалей можно выбрать способ запекания, соответствующий используемому в Unity3D, Blender и т.д. либо соответствующий способу запекания “нормалмапы”в 3dsMax.

Ужасы : ), к которым может привести “неивертирование” Красного или Зеленого каналов перед импортом в Unity3D, мы здесь показывать не будем, но вы можете посмотреть их, если наберете в поисковике, например, от Google Inc. Поисковую фразу вида “Unity3d inverted green channel of normal map”.

 

В следующей части статьи будет представлен Обзор приложений для создания различных карт (карт нормалей, карт отражений, карт высот, карт смещения, ssbump и т.д.), включая NVIDIA Texture Tools для Adobe Photoshop, SSBump Generator, xNormal, плагин normalmap для GIMP, Smartnormal (онлайн), CrazyBump и Обзор Awesome Bump.

 

Автор: Максим Голдобин

goldmaxval@gmail.com

1 Comment

  1. Midge says: Ответить

    The voice of raolantiity! Good to hear from you.

Добавить комментарий