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

Данная статья посвящена вопросам улучшения внешнего вида 3D модели, в частности, посредством использования карт высот, карт нормалей, карт отражения, карт затенения, карт смещения, а также их создания нативными средствами Unity3D и сторонними приложениями, утилитами программами, включая Normalmap Online, NVIDIA Texture Tools for Adobe Photoshop (NVIDIA Normal Map Filter), SSBump Generator, xNormal, GIMP normalmap plugin и SmartNormal, CrazyBump и Awesome Bump. Теория карт нормалей и карт высот. Как подготовить текстуру, превратив ее в карту высот, для создания различных карт.

 

Часть 1. Данная часть статьи посвящена созданию карт нормалей из диффузной текстуры (Albedo) или карты высот нативными средствами Unity3D без использования сторонних приложений, сервисов и плагинов.

Оглавление

  1. Создание карты нормалей в Unity3D
  2. Теория карт высот
  3. Обзор Normalmap Online
  4. Теория карт нормалей
  5. Обзор приложений для создания различных карт (карт нормалей, карт отражений, карт высот, карт смещения, ssbump и т.д.)
    • Обзор NVIDIA Texture Tools для Adobe Photoshop
    • Обзор SSBump Generator
    • Обзор xNormal
    • Обзор плагина normalmap для GIMP
    • Обзор Smartnormal (онлайн)
    • Обзор CrazyBump
    • Обзор Awesome Bump
  6. Создание карты высот из текстуры и рисование карты высот для текстуры

 

Многие начинающие игроделы задумываются, догадываются или уже знают, как заставить выглядеть свои 3D модели (игровые объекты) на AAA уровне, не повышая при этом количество используемых полигонов, а, по сути, треугольников (трисов). Одним из таких способов является использование качественных текстур для визуализации 3D моделей и дополнительных карт: нормалей, смещения, затенения, высот, отражения. Откуда их взять, если у разработчика есть лишь текстура, без всех остальных карт?

Часть таких карт можно создать в Unity3D, предоставленными нативными средствами либо реализуемыми посредством скриптов, размещаемых в папке Editor Unity3D.

Карта нормалей нативными средствами Unity3D

Говоря о нативных средствах предоставляемых Unity3D, стоит сказать о возможности в Unity3D преобразовать обычную текстуру в карту нормалей через Установки/Настройки Импорта в окне Инспектора Unity 3D.

Для данной статьи я взял одну из имеющихся у меня в коллекции текстур, сфотографированной пасмурным зимним днем, обработал ее в GIMP’е, чтобы из нее получилась бесшовная текстура размером 1024 на 1024 пикселя.

На рисунке показана бесшовная текстура тротуарной плитки. tileable-texture-512
На рисунке показана бесшовная текстура тротуарной плитки.

 

Выберите импортированную текстуру Левой Кнопкой Мыши в окне ассетов, нажмите сочетание клавиш Ctrl+D, чтобы создать копию выбранного объекта, в данном случае – карты текстур, которую мы и превратив в карту нормалей. Выберите Левой Кнопкой Мыши созданную копию текстуры и посмотрите в меню Инспектора, в котором выберите в выпадающем списке типа текстуры (Texture Type). Теперь вместо “Alpha from GrayScale” появился CheckBox “Create fromGrayscale”. Выберите его, чтобы создать карту нормалей через промежуточное преобразование изображения в монохромное, из которого и будет создана карта нормалей. Промежуточный процесс преобразования в монохромное изображение, которое не показано пользователю, схоже с преображением изображения в карту высот.

Вы также можете выбрать параметр “Smooth” режима фильтрации “Filtering”, который позволяет убрать шум на создаваемой карте нормалей, тем самым сгладив ее.

Параметр “Bumpiness” определяет резкость результирующей карты нормалей. Данный параметр связан с коэффициентом воздействия (“выпуклости”) карты нормалей в меню настройки параметров материалов, о котором будет сказано чуть ниже.

Осталось лишь применить настройки для новой карты нормалей, нажав кнопку “Apply”.

На рисунке показаны настройки преобразования текстуры в карту нормалей (подойдет и для преобразования в карту нормалей и карты высот, и даже карты нормалей :)). normal-map-from-texture
На рисунке показаны настройки преобразования текстуры в карту нормалей (подойдет и для преобразования в карту нормалей и карты высот, и даже карты нормалей :)).

Одним из настраиваемых параметров карты нормалей является параметр “выпуклости” карты нормалей (справа от стола для изображения карты нормалей).

 На рисунке показан процесс назначения созданного изображения карты нормалей в соответствующий слот в меню настройки параметров материала. Также выделен коэффициент воздействия карты нормалей. normal-map-from-texture-assign
На рисунке показан процесс назначения созданного изображения карты нормалей в соответствующий слот в меню настройки параметров материала. Также выделен коэффициент воздействия карты нормалей.

Слева на рисунке показана созданная плоскость с назначенной ей только диффузной текстурой без карты нормалей.  Справа — материалу объекта назначена диффузная карта и созданная из этой же текстуры карта нормалей.

Кстати, если вы захотите сохранить на диске созданную описанным образом карту нормалей путем перетаскивания его из окна ассета проекта Unity3D в папку проводника Windows, то у вас ничего не получится, поскольку в Проводнике вы увидите всю ту же свою карту высот. В папке проекта она также хранится в виде карты высот. Для чего это сделано? Полагаю, одной из причин является возможность всегда вернуться к оригинальной текстуре.

Рисунок демонстрирует факт того, что Unity3D не изменяет текстуру в настройках импорта, а лишь применяет к ней свои фильтры. normal-map-unity3d-explorer
Рисунок демонстрирует факт того, что Unity3D не изменяет текстуру в настройках импорта, а лишь применяет к ней свои фильтры.

Говоря о скриптах: вы можете попробовать решения, предлагаемые здесь: bumpmap (grayscale) to normalmap (rgb). Они позволяют в игре или Редакторе Unity3D превратить диффузную текстуру или карту высот в карту нормалей.

Если вы хотите получить более гибкие настройки для создания карты нормалей из текстуры и карты высот, а также иметь возможность создать карту смещения (displacement map), карту затенения (ambient occlusion map) и карту отражений (specular map), то вам стоит обратить внимание на онлайн инструмент Normalmap Online, который позволяет изменять параметры создаваемых карт, а также выбирать метод создания карты нормалей:  с использованием дифференциального оператора Собеля (Sobel) или оператора Щарра (Scharr). Последний, в честь которого и назван оператор/фильтр, улучшил полную вращательную симметрию, которую не учитывал Собель. Более подробно про них вы можете узнать в посвященной этому статье ”Оператор Собеля” в Википедии.

Карта высот – это, конечно, хорошо, но что делать, если ее нет? Создать ее из имеющегося изображения, либо использовать это изображения. Какие нюансы стоит учитывать при использовании изображения вместо карты высот, можно узнать, если знать, что такое, эта самая карта высот, и для чего она нужна. Карта высот представляет собой растровое монохромное изображение, в котором хранятся значения высоты в виде светлых и темных областей, где, чем светлей точка, тем выше она находится относительно нулевого уровня:

— для бамп маппинга (bump mapping), по сути, представляющего собой рельефное текстурирование, карта высот используется при вычислении падения и отражения света (например, используется в модели освещения/отражения Фонга) для визуализации теней с целью сделать 3D модель более реалистичной за счет имитации выпуклостей, впадин, царапин на поверхности модели без изменения геометрии меша этого самого 3D объекта. Кстати, карта нормалей является одним из наиболее распространенных видов bump mapping’а;

— для displacement mapping’а, в основе которого лежат карты смещения, при использовании которых меш модифицируется согласно светлым и темным областям текстуры/изображения путем изменения позиции вершин 3D модели (в частности, плоскости).

Одним из самых потрясающих применений карты высот для дисплейсмент маппинга я видел здесь: Sculpting with UVs and displacements.

На рисунке показан пример использования карты смещений. displacement
На рисунке показан пример использования карты смещений.

Однако наибольшее распространение карта высот получила для создания 3D моделей ландшафтов и океанов путем преобразования карты высот в 3D меш за счет выстраивания вершин 3D ландшафта в зависимости от цвета соответствующих областей на карте высот по одной из осей. В Unity3D такой осью является ось Y, в Blender — ось Z.

На рисунке показан пример генерирования/генерации ландшафта из карты высот с применением карты нормалей в Unity3D. heightmap-to-landscape
На рисунке показан пример генерирования/генерации ландшафта, в данном случае — поверхности океана, из карты высот с применением карты нормалей в Unity3D.

На изображенном рисунке показан ландшафт (террейне, от англ. Terrain – ландшафт, рельеф местности), представляющий собой меш, сгенерированный из карты высот, созданной еще в одном он-лайн генераторе, но на этот раз – генераторе текстур Texture Generator Online, который, кстати, создан тем же разработчиком, что и Normalmap Online.

Эти удивительные выпуклости, напоминающие океанские волны, были созданы всего лишь из одной карты высот, и созданных на ее основе карты нормалей и диффузной карты, причем диффузная карта была создана в GIMP’е путем создания еще одного слоя (зеленого) поверх карты высот, после чего его прозрачность была снижена до 50%.

На рисунке* показан материал, к которому применена  карта высот и созданные из нее текстура и карта нормалей. texture-generator-online-ocean
На рисунке* показан материал, к которому применена  карта высот и созданные из нее текстура и карта нормалей.

Обратите внимание на зеленоватые и красноваты области на карте нормалей, мы к ним еще вернемся, когда будем говорить о теории карт нормалей.

Texture Generator Online позволяет генерировать различные текстуры, включая текстуры облаков, кирпичей, плитки, шахматной доски, дерева, шума Перлина, ландшафта и ткани.

На рисунке показано онлайн приложение для генерирования текстур. В данном конкретном случае была сгенерирована карта/текстура ландшафта. texture-generator-online
На рисунке показано онлайн приложение для генерирования текстур Texture Generator Online. В данном конкретном случае была сгенерирована карта/текстура ландшафта.

 

В следующей части статьи будет рассказано про Теорию карт высот

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

goldmaxval@gmail.com

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