RU    EN
Статьи и туториалы   |  Скачать  |  Ссылки

Генерация карт нормалей в 3dMax

В данном документе рассматривается генерация карт нормалей для сглаживания объекта и добавления таких деталей как фаски на эджах используя 3dMax

Вступление

  1. Что такое карта нормалей

Для краткости объяснения можно понимать карту нормалей как набор карт освещения: горизонтальной, вертикальной и глубины. Это легко увидеть если просмотреть каналы любой карты нормалей по отдельности: красный выглядит как освещения слева или справа, зеленый – как сверху/снизу, синий – карта углублений.

  1. Как используются карты нормалей в next gen проектах, что требуется от художника по текстурам

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

Для создания карты нормалей я обычно использую следующие инструменты: Nvidia Photoshop Plugin, 3d Max, Zbrush. Использование каждого из них зависит от ситуации:
- Nvidia Photoshop Plugin обычно используется для деталей
- 3d Max – для сглаживания, добавления бевелов на эджи – это именно то что рассматривается в данном документе
- Zbrush – сглаживание, рисование очень плавных деталей которые не получаются плавными при генерации с помощью Nvidia Photoshop Plugin. Это могут быть складки, выпуклости на кожаной мебели и прочее. Особенностью zbrush является то что он воспринимает хай поли модель и лоуполи как одно целое и в связи с этим нет глюков при рендере нормал мапы. Здесь я не описываю способы работы с Zbrush, допишу здесь или позже или отдельно

Краткая последовательность работы

Для того чтобы сгенерировать карту нормалей с хай поли модели нам нужны как минимум хай поли модель и лоу поли модель. Имейте ввиду что НЕЛЬЗЯ сдвигать хай поли модель относительно лоу поли, они должны находиться в одном и том же месте. Если непонятно – почитайте в инете теорию. Второй нюанс – для каждого полигона карта нормалей отличается, поэтому если на ув 2 полигона разложены на одно и тоже место (т.к. во многих проектах этот момент корректируется движком) – нужно удалить все лишнее и оставить только один.
Итого, для того чтобы получить карту нормалей для лоу поли объекта с хай поли объекта нужно сделать следующее:

  1. Сдублировать лоу поли модель
  2. Можно скрыть лоу поли модель чтобы не мешала
  3. На дубликате (назовем его highpoly) сделать бевелы на эджах и , если нужно, meshsmooth
  4. Выделим снова лоу поли модель, удалим все дублирующиеся на ув полигоны

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

  1. Генерируем карту нормалей

Подготовка модели и ув

Для того чтобы отрендерить карту нормалей в максе нам всегда нужно 2 модели: основная, лоу-поли и хай поли.

  1. Подготовка хай-поли модели:
  2. Хай-поли модель (для сглаживания или добавления фасок, я не рассматриваю здесь ситуацию когда хай поли значительно отличается от лоу-поли) обычно генерируется с лоу-поли версии. Вообще-то для ее создания Вам необходимо сдублировать лоу-поли модель, добавить бевелы на эджи где Вы считаете нужным и применить MeshSmooth. При этом не беспокойтесь об ув на хайполи модели, его можно повреждать сколько угодно, в процессе рендера оно все равно не используется.

    Пример: есть цилиндр, мы хотим сгладить переход между стенкой и крышечкой

    overlapping uvs

    Сначала нам нужно сдублировать лоу-поли модель для того чтобы из дубликата получить хай поли. Для этого нужно Ctrl+c и Ctrl+v на лоу-поли модели, появится окошко с опциями клонирования, я советую переназвать дубликат с чего то вроде ….01 на …._hp чтобы было ясно понятно по названию где у нас хай поли модель. См. рисунок:

    highpoly model

    После того как у нас есть хай поли модель, скрываем все остальное и работаем только с ней.

    В данном случае нам нужно сначала сделать фаску на гранях стенки/дна. Выбираем их и в режиме Editable Poly (edges) идем в меню Edit Edges->Chamfer, нажимаем на кубик справа от этой кнопки и задаем желаемую величину бевела.

    Заметьте: если ваша модель слишком мала для этого и при наименьшем значении Chamfer бевел все равно получается слишком большим сделайте Rescale World Units.

    rescale world units

    rescale world units 100%

    После этого проблем с Chamfer не бывает.

    Примечание: если после этого какие либо модели выглядят во вьюпорте крошечными или их вообще не видно выберите их все и превратите в Editable Poly – они сразу же отмасштабируются как надо.

    Если объект требует общего сглаживания (то есть если он плавной формы) нужно применить MeshSmooth. При этом если Вы не хотите чтобы сглаживались какие либо части объекта применяйте сглаживание по Smoothing Groups как показано ниже:

    meshsmooth smoothing groups

    При этой опции полигоны сглаживаются только в пределах своей группы сглаживания.

    В данном случае подготовка хай поли модели закончена.

  3. Подготовка лоу-поли модели
  4. Так как ув на стены перекрывает друг друга (это может соответствовать требованиям проекта) я удаляю все части которые перекрываются. Вобщем я оставляю только те части на которые я собираюсь отрендерить карту нормалей.

    overlapping polys

  5. Генерация карты нормалей.
  6. При рендере в максе нужно чтобы хай-поли модель находилась «внутри» лоу-поли, причем полностью. Для того чтобы достичь такого эффекта применяются модификаторы Shell или Push.

    push modifier

    После этого генерируем карту нормалей и получаем результат:

    normal map

Детальное описание генерации карт нормалей

Здесь на примере кубика мы рассмотрим детально генерацию карты нормалей с помощью 3dMax.

Шаги по подготовке модели описаны выше(добавляем фаски, сглаживаем, убираем лишние полигоны, итд).

Важный момент: здесь необходимы разрывы на ув иначе будут косяки на углах. Можете проверить опытным путем. Это связано с тем что для разных полигонах на одной и той же грани цвета на карте нормалей РАЗНЫЕ – поэтому, если они разложены на ув цельно неизбежно возникает смешивание разных цветов на грани и на модели появляется косяк.

Т.к. сдублировать кубик и сделать на хай поли версии фаски на гранях является элементарной задачей я опускаю эти шаги.

Для начала мы возьмем лоу поли модель БЕЗ разрывов на ув.

 

default uvs

Для того чтобы снять с хай поли объекта карту нормалей нужно выбрать лоу поли объект, нажать «0» (ноль). В опциях выбираем следующее:

render to texture

add normal maps

normal maps options

Результат:

rendered normal map 1

Красные области появились потому что лоу поли модель накладывается на хай поли. Для того чтобы отрендерить это правильно с помощью встроенных инструментов 3dMax нужно применить к лоу поли объекту модификатор PUSH чтобы полигоны лоу поли объекта немного отодвинулись от хай поли версии и не пересекались.

См. ниже правильную карту нормалей после применения модификатора Push.

correct normal map

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

 projection cage

 

Если отрендерить карту нормалей на объект с такой сеткой будут косяки:

normal map bugs

Для того чтобы сетка стала точно такой же как и объект (в случае если она не такая) нужно в меню модификатора Projection выбрать Cage->Reset:

reset cage

После этого каждая точка сетки будет соотвествовать точке объекта.

Итого, у нас есть "правильная" карта нормалей:

карта нормалей

Однако если мы назначим эту карту нормалей на лоу поли кубик и отрендерим его мы увидим следующий артефакт: темная полоска посреди сглаженной грани:

глюк при рендере

Это возникает потому что ув цельное и не может попасть точно между 2-мя соседними цветами на карте нормалей:

Как видно при близком приближении верхний синий пиксель немного залазит туда где его быть не должно:

проекция карты нормалей

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

правильное ув

Получили вот такую карту нормалей:

правильная карта нормалей

Назначим ее на лоу поли объект и отрендерим:

глюк на углу

Теперь посреди сглаженного ребра нет черной полоски.

Конечно, не всегда возможно разрывать ребра на ув, однако в большинстве случаев в таких местах идет естественный разрыв.

Примечание: артефакт в виде темных треугольников очень легко отредактировать в фотошопе:

исправленный угол

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