В данном документе рассматривается генерация карт нормалей для сглаживания объекта и добавления таких деталей как фаски на эджах используя 3dMax
Для краткости объяснения можно понимать карту нормалей как набор карт освещения: горизонтальной, вертикальной и глубины. Это легко увидеть если просмотреть каналы любой карты нормалей по отдельности: красный выглядит как освещения слева или справа, зеленый – как сверху/снизу, синий – карта углублений.
Карты нормалей в основном используются в 2 целях: для сглаживания низкополигонального объекта и добавления на него таких деталей как бевелы на эджах, а также для того чтобы добавить любые детали поверхности – начиная от крупных, таких как складки на одежде или болтики на механизме и заканчивая очень мелкой фактурой поверхности, такой как фактура ткани или фактура металла.
Для создания карты нормалей я обычно использую следующие инструменты: Nvidia Photoshop Plugin, 3d Max, Zbrush. Использование каждого из них зависит от ситуации:
- Nvidia Photoshop Plugin обычно используется для деталей
- 3d Max – для сглаживания, добавления бевелов на эджи – это именно то что рассматривается в данном документе
- Zbrush – сглаживание, рисование очень плавных деталей которые не получаются плавными при генерации с помощью Nvidia Photoshop Plugin. Это могут быть складки, выпуклости на кожаной мебели и прочее. Особенностью zbrush является то что он воспринимает хай поли модель и лоуполи как одно целое и в связи с этим нет глюков при рендере нормал мапы. Здесь я не описываю способы работы с Zbrush, допишу здесь или позже или отдельно
Для того чтобы сгенерировать карту нормалей с хай поли модели нам нужны как минимум хай поли модель и лоу поли модель. Имейте ввиду что НЕЛЬЗЯ сдвигать хай поли модель относительно лоу поли, они должны находиться в одном и том же месте. Если непонятно – почитайте в инете теорию. Второй нюанс – для каждого полигона карта нормалей отличается, поэтому если на ув 2 полигона разложены на одно и тоже место (т.к. во многих проектах этот момент корректируется движком) – нужно удалить все лишнее и оставить только один.
Итого, для того чтобы получить карту нормалей для лоу поли объекта с хай поли объекта нужно сделать следующее:
Я обычно удаляю их очень просто: захожу в редактор ув, выделяю какой либо кусочек, перехожу в режим полигонов (если в максе), снимаю выделение с одного полигона, все остальные удаляю, и так повторяю для всех кусочков ув.
Для того чтобы отрендерить карту нормалей в максе нам всегда нужно 2 модели: основная, лоу-поли и хай поли.
Хай-поли модель (для сглаживания или добавления фасок, я не рассматриваю здесь ситуацию когда хай поли значительно отличается от лоу-поли) обычно генерируется с лоу-поли версии. Вообще-то для ее создания Вам необходимо сдублировать лоу-поли модель, добавить бевелы на эджи где Вы считаете нужным и применить MeshSmooth. При этом не беспокойтесь об ув на хайполи модели, его можно повреждать сколько угодно, в процессе рендера оно все равно не используется.
Пример: есть цилиндр, мы хотим сгладить переход между стенкой и крышечкой

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

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


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

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

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

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

Здесь на примере кубика мы рассмотрим детально генерацию карты нормалей с помощью 3dMax.
Шаги по подготовке модели описаны выше(добавляем фаски, сглаживаем, убираем лишние полигоны, итд).
Важный момент: здесь необходимы разрывы на ув иначе будут косяки на углах. Можете проверить опытным путем. Это связано с тем что для разных полигонах на одной и той же грани цвета на карте нормалей РАЗНЫЕ – поэтому, если они разложены на ув цельно неизбежно возникает смешивание разных цветов на грани и на модели появляется косяк.
Т.к. сдублировать кубик и сделать на хай поли версии фаски на гранях является элементарной задачей я опускаю эти шаги.
Для начала мы возьмем лоу поли модель БЕЗ разрывов на ув.

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



Результат:

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

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

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

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

После этого каждая точка сетки будет соотвествовать точке объекта.
Итого, у нас есть "правильная" карта нормалей:

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

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

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

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

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

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

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