Как сделать карту нормалей онлайн

Добавил пользователь Алексей Ф.
Обновлено: 19.09.2024

Немного о структуре и стилистике статьи, дабы все было в дальнейшем более понятно
Многие игровые текстуры (в Сталкере - все) находятся в формате RGB. Если кто не знает, есть понятие "каналы". Их вкладка в ФШ находится справа, "Слоев". В RGB это:

При их "смешивании", получаем нормальную окраску изображения. В общем, указания по каналам в данной статье будут даваться в виде, как блок выше. Иногда в RGB каналов больше (можете сами попробовать добавлять в фотошопе). В игре используется канал Альфа 1 (его еще просто "Альфой" кличут). У него есть, разумеется, свои особые функции. Итого, вот так будут выглядеть указания по каналам:

Содержание

Теория

Для начала попытаюсь объяснить структуру основных карт и разобрать основные понятия статьи. Всё ниже написанное не обязательно верно на все 100%.

Height Map (карта высот)

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

Normal Map (карта нормалей)

Карту нормалей можно получить следующими способами:
- сгенерировать с высокополигональной модели в 3д-редакторе, в роде 3ds Max, zBrush.
- сгенерировать с ранее созданной карты высот с помощью одного из плагинов для Photoshop (плагин NVIDIA, плагин PixPlant, плагин xNormal)
- сгенерировать с ранее созданной карты высот в спец-прогах (xNormal, PixPlant, CrazyBump)
Если разбирать по каналам схематически, то выглядит так:

При включенном RGB на каналах, смотрится как текстура в синих, фиолетовых, сиреневых, даже иногда розовых цветах. Нормал мапу очень и очень рекомендуется создавать для бампа (тем более, если она с хай-поли модели), а не использовать сокращенный вариант с картой высот (об этом узнаете в разделе СДК ниже). Нормал мапа, собственно, и предает текстуре различных объемных черт. В дальнейшем, после сборки в СДК, карта станет частью bump.

Карта bump представляет собой обычную карту нормалей в формате A(BGR) (типично для формата сжатия DXT5_nm). Разработчики использовали такой порядок по очень простой причине - DXT компрессия гораздо меньше "портит" текстуру, так как альфа-канал не подвергается компресии и остается практически в исходном виде. Поясню: еще раз гляньте на каналы карты нормалей. А теперь представьте, что на пустое изображения с каналами RGBA поставили все ту же карту нормалей, только перевернутую по каналам. То есть наполнение R с карты нормалей перешло на канал Альфа (А) карты bump, G перешло в B, B перешло в G. Что касается канала R в бампе, туда поставили Specular Map (карту бликов). О ней можете подробней почитать в мини-словаре терминов.
Также хочу напомнить, что в своем полном виде карта bump создается из карты нормалей + текстурой с спекуляром на Альфе в СДК. Такая-вот текстурная солянка. Думаю, вы знаете, что она в игре делает, но если вы столкнулись с данными терминами первый раз, то все довольно просто: карта делает текстуру объекта более красивой, объемной, с выпуклостями и впадинами, добавляет или запрещает отражение текстурой света от солнца, лампы, фонарика и т. д. Вот, например, новенькому листу металла было бы неплохо придать возможность отражать блики, а кирпичной текстуре задать впадины между кирпичиками. А вот дереву, допустим, никаких отражений света не надо, хотя высоты (впадины и выпуклости) добавить таки можно. Еще замечу, что бампы не нужны для текстур партиклов, текстур интерфейса и еще ряда специфических изображений. К основной текстуре привязывается через файл текстура.thm. Но по поводу этого не беспокойтесь, ведь файлы thm появляется при создании бампа/подключении бампа к текстуре в СДК.



2iY2S.jpg

Урок хорош при условии ,что имеется аналог необходимого узора в геометрии. Если из исходников только фотография, то советую использовать генераторы карт нормалей. Я сталкивался с тремя их представителями
1 - плагин от компании NVidia для фотошопа. Плюсы - бесплатно. Минусы - кривая реализация и недостаток настроек. С ней ,короче, связывайся только если совесть мучает пиратским софтом пользоваться, а на лицензию еще не заработал.

2 - CrazyBump - великолепная машинка для генерации карт нормалей. Прекрасно работает с любыми файлами ,есть куча ползунков ,нормальное окно с превью. Наверное лучшая прога для создания NormalBump. Из минусов хочу отметить то ,что ее так никто еще и не сломал, т.е. подобие кряков есть ,но работают они не всегда и после продолжительных танцев с бубном. Триалка работает 30 дней. Хотя я уже не интересовался ей около года. Если найдется рабочая версия ,то буду благодарен тому ,кто выложит)))

3 - PixPlant. Прога для генерации карт нормалей ,дисплейса, карт отражений и создания бесшовных текстур. Карты нормалей делает не намного хуже ,чем CrazyBump (кто-то даже считает ,что лучше, главное то ,что настроек для текстуры достаточно и результат очень неплохой). Так же имеется большое окно с превью, несколько ползунков с настройками. К тому же кряк к ней найти довольно просто. На торрентах точно пара релизов с этой прогой есть. Если не найдешь ,то пиши в личку я по почте скину в понедельник или вторник.

Также очень хороший программный пакет или как правильней сказать, набор инструментов для создания и работы с картами нормалей "xNormal", в наборе идет как сама программа так и встраиваемые модули для фотошопа макса и майу.
Ну а так, что б сильно не замарачиваться и не вникать в суть карт нормалей, то наверно самая простая прога, как уже было сказано - это CrazyBump.

Так в чем же нынче делают нормалмапы для спрайтов?

но самой программы нигде нет

Свободная ниша? Вообще никаких альтернатив не нашли?

MrShoor
А Фотошоп / Filter / 3D / Generate Normal Map не?

Запустить видео по клику - Как делать игры

Iron Man
> А Фотошоп / Filter / 3D / Generate Normal Map не?
Язык не поворачивается назвать это инструментом для создания карт нормалей.

Yuriy0
> Bitmap2material
А вот это уже интересно выглядит. А как он ведет себя на рисованых спрайтах? Просто позиционируется этот инструмент для текстур все таки.

MrShoor
> А как он ведет себя на рисованых спрайтах?
А конкретнее можете сказать, что за спрайт, а лучше показать

Запечь не вариант?

spider_1(2) | NormalMaps для 2д спрайтов

Yuriy0
> А конкретнее можете сказать, что за спрайт, а лучше показать

Suslik
> или как как по карте высот сгенерить normal map
По карте высот сгенерить карту нормалей вообще не проблема.

> если первое, то либо рисуется руками в фотошопе, либо даётся в нагрузку при
> запекании из 3d
3д нет. Спрайты сразу рисуются в фотошопе. Карту нормалей рисовать в фотошопе вариант не очень, ибо инструмент для этого совершенно не предназначен. Например нарисовать круглое брюшко паука выше сложно, ибо небольшой перепад в карте высот может сильно крутнуть нормали.

Roooooocky
> Запечь не вариант?
Неоткуда запекать. Это рисунок.

MrShoor Блики зло)
Нарисовал карту высот в фш

С нее получилась такая нормалка в битмапматериале

Yuriy0
> Блики зло)
Это понятно. При наличии нормалмапы их с диффузки надо будет убирать.

> Нарисовал карту высот в фш
Сколько времени заняло примерно?

Изображение

> С нее получилась такая нормалка в битмапматериале
Пасиб, гляну в динамике и обязательно сюда гифку залью как оно стало выглядеть. Но прямо вот сейчас глядя на нормалмапу вижу проблемы, например в том, что красного справа мало.
Вот пример сферы:

Обрати внимание как правая граница в красное уходит, и заметь, что на пауке этого нет.

MrShoor
> Сколько времени заняло примерно?
Выделение>заливка>несколько мазков мягкой кистью. мин5
MrShoor
> Но прямо вот сейчас глядя на нормалмапу вижу проблемы, например в том, что
> красного справа мало.

С ползунками в битмапе еще покрутить нужно. Если геометрию создавать в 3д то результат будет лучше конечно

wat | NormalMaps для 2д спрайтов

Наш мозг просто не может ЧБ изображение адекватно воспринимать как карту высот. Поэтому даже если расположить 2 картинки рядом:

Разница слабо заметна, а на выходе форма сильно различается.
Ну и вторая проблема - это кисти фотошопа вообще никак не подходят под рисование карт высот. Воть.

А вообще нормали для рисунков - это такое же извращение, как всякие там веганы :)))

normal-maps-1


Чтобы хорошо выглядеть, ассеты игр ААА-класса, такие как персонажи, оружие и элементы окружения в значительной степени полагаются на карты нормалей. Но что такое карты нормалей и почему они так широко распространены?

Балансировка между качеством и производительностью

Игры должны работать в режиме реального времени со скоростью 60+ кадров в секунду. Это означает, что высокополигональные модели, обычно используемые для 3D-печати или анимации, не будут хорошо работать в игре, так как они будут значительно замедлять производительность игры.

Для обеспечения плавной работы игры необходимы модели с низким уровнем полигонов.

Но в то же время геймеры ожидают красивые визуальные эффекты с высоким уровнем детализации. Разработчики игр должны иметь возможность использовать большое количество моделей в одной сцене, не говоря уже о различных эффектах освещения и физике.

Итак, как же найти компромисс между высокой производительностью игры и реалистичными визуальными эффектами?

Карты нормалей — лучший компромисс, который обеспечивает высокое качество модели и высокую производительность игры. Секрет в том, что они позволяют нам получить большее количество деталей при использовании меньшего количество полигонов.

Имитация геометрии с помощью текстур

normal-maps-2

Как это работает? Карты нормалей (Normal maps) и карты смещения (Displacement maps) представляют собой особые виды текстур, которые влияют на то, как ведет себя свет при попадании на поверхность. Они создают иллюзию глубины, сообщая лучу света отскакивать от имитационных особенностей поверхности, даже если на самом деле их там нет.

Это позволяет нам достичь высокого уровня детализации, не обременяя игровой движок сложной геометрией. Звучит слишком хорошо, чтобы быть правдой? Имейте в виду, что есть некоторые ограничения для данной техники.

Карты нормалей VS карты высот

В то время как карты нормалей и карты высот дают нашим низкополигональным моделям вид более детализированных, они используются для совершенно разных целей.

Существует несколько различных типов карт высот, с которыми вы, возможно, уже знакомы.

normal-maps-3

Bump maps — это способ старой школы для добавления деталей к низкополигональным объектам. Они используются так же, как и обычные карты, за исключением того, что они содержат только информацию о высоте, а не информацию об угле.

Displacement maps иногда используются для изменения местоположения фактических вершин объекта. Такое перемещение не добавляет никаких дополнительных деталей. Вместо этого оно используется для создания более сложных объектов. Часто подобным способом генерируется рельеф мира с использованием карт смещения.

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

Normal Maps не содержат информации о высоте. Вместо этого они содержат информацию о углах. Они цветные, потому что значения RGB сообщают рендеру, в каком направлении идет наклон, и насколько он крут.

Наиболее важным преимуществом этого является то, что мы можем использовать информацию об угле для того, чтобы искусственно сгибать края соседних граней друг к другу, тем самым имитируя эффект фаски. Это невозможно сделать только с информацией о высоте, потому что рендер не может знать, в каком направлении должны быть согнуты края.

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

normal-maps-6

Вы вряд ли заметите фактическую толщину края в игре, но вы можете заметить тот факт, что, по крайней мере, некоторое количество света должно находится на этих областях.

Помимо того, что свет на углах выглядит более естественным, этот блеск помогает передать форму объекта, особенно если смотреть на него с расстояния. Так как многие игровые объекты отображаются на экране довольно мелкими, художники часто преувеличивают углы объектов, чтобы помочь игроку увидеть все четко или подчеркнуть важные объекты.

3 типа карт нормалей

normal-maps-7

Существует три типа карт нормалей, которые дают идентичный результат, но вычисляются немного по-разному.

Tangent space (касательное пространство)
Как следует из названия, карты нормалей касательного пространства основаны на касательном направлении каждой грани. Эти карты всегда состоят из комбинации трех цветов.

  • Синий показывает наклон в направлении нормали
  • Красный показывает наклон влево и вправо в направлении касательной
  • Зеленый показывает наклон вверх и вниз в направлении касательной. OpenGL карты нормалей отображают зеленым цветом наклон вверх, в то время как DirectX наклон вниз.

Object space (объектное пространство)
Карты нормалей пространства объектов основаны на всем объекте, а не на его индивидуальных гранях. Такие карты немного быстрее вычисляются графическими картами, но у них есть некоторые недостатки.

Поскольку правая сторона будет другого цвета, нежели левая, никакие UV-карты не могут быть отзеркалены, а это означает, что большое количество текстурного пространства будет потрачено впустую на симметричных моделях. Это также означает, что если объект скручивается, то мы увидим инвертированное затенение.

World space (мировое пространство)
Карты нормалей в пространстве мира являются наименее гибкими. Поскольку они основаны на глобальных координатах, объект вообще не может вращаться, чтобы сохранить корректность затенения. Этот тип карт нормалей используется только для больших, статических и асимметричных объектов, таких как окружение игрового мира, или временно используется в таких программах, как Substance Painter, в качестве средства вычисления различных погодных эффектов и не только.

Заключение

Читайте также: