FRYRENDER

FRYRENDER
уроки

PHYSICALY

PHYSICALY
материалы

RENDER

RENDER
документация

ENGINE

ENGINE
тесты

Local normal mapping

January 29, 2010

Карты нормалей – это что-то среднее между технологией bump и displacement. Главная проблема при этом – как сделать карту. Если карты бампа и дисплейсмента можно нарисовать (ведь это всего лишь черно-белое изображение), то карты нормалей представляют собой координаты векторов, описанные через значения цвета в RGB. Поэтому карты нормалей нельзя создать без специальных инструментов. Fryrender версии Beta1.7 предоставляет простой механизм создания карт нормалей из существующей геометрии, на основе технологии ядра Layer Compositing. Чтобы продемонстрировать это, мы создадим материал шара для гольфа, используя карту нормалей, чтобы симулировать углубления в поверхности.

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

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

Рендер карты нормалей.
Теперь, добавьте в сцену FRY Target камеру (можно не менять установки камеры по умолчанию). Установите камеру точно по центру нашей плоскости, и убедитесь в том, что она направлена сверху вниз, перпендикулярно к плоскости, и что плоскость с углублениями находится в фокусе, как показано ниже на рисунке.
Выберите в настройках рендера тип ядра FRY R2 - Layered Compositing, а затем установите в поле Layer type - Normals Buffer. Не меняйте остальные параметры.
Теперь отрендерьте сцену, и вы получите изображение, как на рисунке ниже. Это и есть карта нормалей. Полученная карта будет преимущественно голубого цвета, где каждый пиксель описывает координаты вектора по средствам значения каналов RGB. Канал R соответствует координате по оси X, G – по оси Y, и B – по оси Z, таким образом, что:
R = (X / 2 + 0.5) • 255
G = (Y / 2 + 0.5) • 255
B = (Z / 2 + 0.5) • 255
или, что одно и то же:
X = (R / 255 - 0.5) · 2
Y = (G / 255 - 0.5) · 2
Z = (B / 255 - 0.5) · 2
Нормаль, это всегда нормализованный вектор (или единичный вектор – вектор, длина которого равна единице выбранного масштаба), не равный нолю. Это значит, что:
X·X + Y·Y + Z·Z = 1
Потому, в карте нормалей возможно использовать не любые цвета, а только те, которые соответствуют координатам нормализированного вектора. Так как мы рендерим плоскость, которая располагается перпендикулярно к камере, то основная часть номалей будет иметь координаты (0,0,1) и будет направлена вдоль оси Z. Используя формулу, приведенную выше, получаем, что RGB, описывающее координаты такого нормаля, будет равным:
R = (0 / 2 + 0.5) · 255 = 127
G = (0 / 2 + 0.5) · 255 = 127
B = (1 / 2 + 0.5) · 255 = 255
Вот почему в карте нормалей преодбалает голубой цвет, и почему их нельзя нарисовать вручную, как, например, карты высот для bump или displace.
Преимущество карты нормалей в том, что с их помощью могут быть симулированы любые изгибы, морщины и трещины на поверхности. Вы также можете сделать карту, в которой нормаль будет направлен во внутрь поверхности, в то время как при использовании обычных карт высоты, вы не можете менять направления вектора, а только его длину.
слева – полученная после рендера карта нормалей, справа – более аккуратная бесшовная карта
Обратите внимание, что плоская поверхности отображается на карте голубым цветом (координатам 0,0,1 соответствует цвет 127,127,255), в то же время, левая часть углублений имеет красноватый оттенок (так как с изменением направления вектора по оси X, изменяется и значение красного канала в RGB).

Результат.
Материал мяча для гольфа – это просто пластик. Мы сделаем в материале два слоя, и в обоих слоях должна использоваться наша карта нормалей. В первом слое будет использоваться карта diffuse, второй слой – с сильным specular отражением. Соотношение веса слоев будет 85% для diffuse и 15% для specular, параметр roughness для слоя со specular поставим 5.
Обратите внимание на то, что наша карта нормалей по высоте почти в два раза меньше чем по длине, потому нам надо установить разное число повторений отдельно для координат U и V в настройках карты во fryrender. В нашем случае, это 18 и 10 соответственно. Также необходимо выбрать тип карты - Normals map (показано на Рисунке 6). Установки для карты нормалей должны быть одинаковы для слотов bump обоих слоев. И вот результат:

Заключение.
Карты нормалей, это эффективная (и в то же время экономная, с точки зрения использования ресурсов компьютера) технология детализации модели. Она гораздо более точная, по сравнению с bump. Недостаток же карт нормалей в том, что процесс их создание куда сложнее. В этом уроке была продемонстрирована простая техника создание карты нормалей, с использованием технологии ядра fryrender - Layered Compositing. Удачного меппинга!


"Карты нормалей: создание и использование карт нормалей." автор: Chema Guerra (2007)
перевод: Arhat оригинал: randomcontrol.com

1 comment:

Anonymous said...

Это настолько здорово, что я восхищен разработчиками и благодарен создателю этого сайта.

April 13, 2011 at 8:39 PM

Post a Comment