Создание Normal Bump и его применение
Однажды я приобрёл игру DOOM III и открыл для себя новый тогда эффект - normal bump. Его применение - это резкий скачок вперёд. Вы пробовали отключить БАМП в DOOM III? Без него игра превращается в DOOM I. Главный плюс - иллюзия трёхмерности (объёма) плоской поверхности без сложной сетки, вернее, буквально вообще без неё. В этом уроке я расскажу, как полностью вручную создавать собственные карты NORMAL BUMP и как их применять на практике.
Для создания трёхмерного бампа 3D MAX, как и игры, использует три цвета для определения точки в пространстве. То есть X,Y,Z соответствует R,G,B (возможен другой порядок). Для создание любых текстур нужно использовать только плоские виды, то есть рендер из окна перспективы исключается.
1. Делаем базу для создания карт Normal Bump.
- Создайте новую сцену: File>Reset.
- Создайте в виде Front Plane 1000х1000 с центром в [0,0,0].
- Создайте три источника света Target Directional Light трёх цветов: красный [255,0,0], зелёный [0,255,0] и синий
[0,0,255].
Проследите за тем, чтобы спад и тени были выключены. Мы воспользовались именно этим типом источника, так как нам нужна равномерно освещённая поверхность, а всенаправленный источник даёт неравномерное освещение.
Теперь нам нужно, чтобы свет освещал нашу плоскость под определёнными углами. Удаление от плоскости неважно, главное - угол и положение относительно Plane01. Для этого сделайте следующее:
- Разместим target всех источников света в координатах [0,0,0].
- Самим источникам задайте следующие глобальные координаты: красный [500,-500,0], зелёный [0,-500,-500], синий [0,-500,0].
Сейчас мы создали полностью и равномерно освещённую поверхность. Красный (справа) и зелёный (снизу) свет расположен под углом в 45 градусов к поверхности, что нам и нужно. А синий направлен прямо на Plane01. Теперь о материала: он должен быть матово-белый.
- Создайте в любой свободной ячейке редактора материалов такой образец: ambient,duffuse, specular - белого вцета. Specular Level, Glossiness - 0, Soften - 1. Присвойте этот материал нашей плоскости Plane01.
Рис. 02
Если свет и материал Вы установили правильно, то плоскость будет фиолетовато-сине-голубой -). На этом создание базы для создания текстур закончено.
Зачем вообще нужен Normal Bump и где его использовать? - Лично я сейчас ни в одной сцене не обхожусь без него. Это и тротуарная плитка, и протектор шин, и неровности штукатурки, и провода, и решётка, и сетка, и камни, и кирпичная кладка - всё, всё, всё. Это достойная замена сложной сетке или Displace'у. Например, зачем делать клавиатуру с кнопками с несколькими тысячами фэйсов, если можно обойтись 12 фэйсами? Normal Bump - это огромная оптимизация, которая подойдёт в любой ситуации (разумеется, где есть свет). Но перед применением этого рельефа, его сначала надо создать, например, нарисовать ту самую клавиатуру с кнопками, "откатать" с неё карту Normal Bump и затем "натянуть" на примитив "BOX".
На рисунках ниже показан небольшой пример, как оживляется пустое помещение и кабели при использовании Normal Bump.
2. Создание нашей первой Normal Bump карты.
Сейчас мы сделаем карту рельефа для кованного забора. Согласитесь, зачем делать трёхмерный забор с множеством сторон, если его можно сделать плоским без ущерба для вида? На его создании внимание заострять не буду, так как он делается очень просто: из цилиндров и шариков. Вы можете сделать свой.
- Создаём забор так, чтобы он вписался по размеру в нашу плоскость и выдвигаем его на передний план, чтобы он не находился в одной плоскости с Plane01, но и чтобы попадал под наш свет.
Вот, что получилось у меня. Я сделал его так, чтобы его можно было повторить, скопировав по оси Х столько, сколько нужно.
Рис. 03
- Теперь объединяем наш забор в один объект, либо просто выделяем все его части, выбираем тип рендера - "Box selected" на
панели инструментов вверху и рендерим. Сохраняем в файл 01.jpg.
Этот тип рендера позволяет отсечь всё лишнее, а нам нужно, чтобы наш забор повторялся. То есть нам нужна тайловая
текстура. Ещё нам нужна карта непрозрачности и карта зеркального отражения.
- Спрячьте Plane01 и снова отрендерите. Результат сохраните в 01.png 24b с альфа-каналом.
- Откройте Photoshop и сделайте из картинки 01.png чёрно-белую версию. То есть выделите всё непрозрачное и закрасьте белым.
Инвертируйте выделение и закрасьте чёрным. Склейте слои и сохраните в 02.jpg
Мы создали готовую к работе карту Normal Bump и карты Opacity и Specular Level. Вторая карта нам нужна для прозрачности
между прутьями и чтобы зеркальный блик не возникал там, где ничего нет - между прутьями.
3. Создание плоского забора.
- Создайте новую сцену: File>Reset.
- Создайте в виде TOP замкнутый сплайн любой формы (это будет наш забор).
- примените модификатор Extrude с любым значением отличным от 0.
- Конвертируйте в Editable mesh либо примените модификатор Edit Mesh, выделите верхнюю и нижнюю "крышку" и удалите.
- В редакторе материалов выберите любой образец и назначьте в качестве Opacity и Specular Level карту 02.jpg (сделайте
копию, но не образец).
- В настройках Specular Level, в свитке Output значение Output Amount убавтье до 0,5 (это уменьшит силу блеска).
- В качестве Bump - Normal Bump. В качестве Normal - 01.jpg.
Рис.04
- Назначьте забору этот материал. Включите отображение материала в окнах проекций.
- Примените к забору модификатор UVW Mapping и настройте его так, чтобы карта "сидела" на заборе, как надо.
- В настройках рендера, на закладке Common в группе Option отметьте Force 2-Sides (чтобы рендерить заднюю сторону забора,
поскольку мы сделали его из сплайна - для экономии полигонов).
Теперь наш забор готов полностью. Для проверки его псевдообъёмности поставьте несколько OMNI разных цветов в разных концах
сцены и отрендерите элемент забора покрупнее.
Рис. 05
Кстати, теперь можно назначить любую текстуру в канал Diffuse.
Можете скачать сцены урока и посмотреть маленький видеоролик: я анимировал три OMNI R,G,B, которые крутятся вокруг забора.
Очень впечатляет.
Файлы урока:
a01.max
b01.max
cinepack.avi
А вот несколько очень важных особенностей и советов:
- При очень большой степени выдавливания, да ещё в сочетании с отдалённостью камеры от этого объекта, порой возникают жуткие артефакты (включая интерференцию). Этот эффект часто возникает на заборах, спицах и подобных предметах. Но его легко устранить. Например, если швы бампа видны несильно, то можно переключить параметр сглаживания с Pyramidal на Summed Area, который можно найти здесь: material editor>свойство normal bump'а (bump>normal bump>normal)>Группа Bitmap Parameters>Filtering. Если же дело серьёзней - с этой задачей справится только SuperSampling; В редакторе материалов в одноимённом свитке отключите галочку Use Global Settings и включите Enable Local SuperSampler. А там дело ваше...
- При создании текстуры бампа стены из гладких камней трудностей не возникнет. А вот при создании карты кирпичной
кладки...так как кирпич - параллелепипед, то во фронте будет видна только его фронтальная часть, а боковые стороны невидны. В результате карта бампа получится плоской. Для устранения этой ситуации нужно всего лишь ту самую фронтальную часть немного масштабировать со знаком "-", и получится, что Back-поверхность будет чуть больше, чем
Front-поверхность>появляются боковые стороны в виде Front (если вы рисовали именно для этого вида). В итоге у вас кирпич будет похож на пуд золота ).
- Часто при создании normal bump ровных больших поверхностей, например, плитки, блоков и прочего (особенно в архитектуре), искажается конечный цвет, вернее яркость поверхности. То есть, если Вы, например, сделали дом из панелей серого цвета и применили объёмный бамп, то при рендере он может изменить яркость в ту или другую сторону. Почему? Потому что любой бамп построен на контрасте: обычно швы становятся темнее, а поверхность - светлее. Если Вам всё-таки важна точная цветопередача - то просто меняйте силу бампа, параметры карты в диффузном отражении или её процент влияния. Возвращаясь к домику из панелей, если у Вас он стал ярче - сделайте цвет диффузного отражения темнее или текстуру, если есть.