История
Впервые идея о том, что можно «брать» детали с высокополигональной модели и переносить на низкополигональную, была предложена на СИГГРАФ (SIGGRAPH) в 1996 во время доклада "Использование сглаженных поверхностей для добавления плотности полигональной сетке" авторов Кришнамурати и Левои. Предлагалось использовать созданные на основе НУРБС (NURBS) карты смещения (displacement maps) для увеличения детализации низкополигональной поверхности. Это была только идея; приложение, которое смогло это сделать, появилось гораздо позже.
SIGGRAPH (The Special Interest Group for Computer Graphics) группа SIGGRAPH специальная группа в составе ASM, объединяющая специалистов по компьютерной графике. Проводит ежегодные конференции, предназначенные для художников и аниматоров, работающих с компьютерной графикой.
В 1998 опять на СИГГРАФ были прочитаны 2 доклада о трансформации деталей, составляющих объект как нормалей с высокополигональной модели на низкополигональную. Назывался доклад: «Appearance Preserving Simplification» за авторством Коэна и еще нескольких исследователей из Института инженеров по электротехнике и электронике визуализации. В первой работе представлен алгоритм, с помощью которого при упрощении можно следить за тем, как потерянные детали должны отрисовываться на упрощенной сетке. Далее был представлен простой подход, при котором высоко- и низкополигональная сетка разделяется, а утерянные детали восстанавливаются независимо от способа создания низкополигональной модели. Этот метод (с небольшими вариациями) в данный момент используется в большинстве приложений.
Что же такое карта нормалей?
Карта нормалей (normal map) — это дальнейшее развитие такой технологии как бамп (bump (англ.) – изгиб, выпуклость; выпуклая вмятина, вздутие). Иногда карты нормалей называют «3-х точечная бамп-карта» (Dot3 bump mapping).
Бамп-карта искажает значения нормалей полигонов, а карта нормалей полностью их заменяет. Т.е., оригинальные нормали объекта заменяются нормалями с высокополигональной модели.
Как и бамп, карты нормалей увеличивает визуальную детализацию 3d-модели без добавления дополнительных полигонов.
Бамп рассчитывается на основе текстуры с одним каналом (grayscale — оттенки серого). Карты нормалей используют многоканальную RGB-текстуру.
Карта нормалей рассчитывается для каждого пикселя текстуры. Значения каждого из каналов RGB — это XYZ координаты нормали текселя.
Тексель (текстурный элемент, текстурный пиксель) — это основной элемент, составляющий текстуру. Каждая текстура представляет собой массив текселей, так же как картинка — это массив пикселей.
Обычно карты нормалей существуют в 2-х вариациях: объектное пространство (object-space) и касательное пространство (tangent-space). Они отличаются системой координат, в которой нормали измеряются и сохраняются.
Tangent space (пространство касательных, касательное пространство) — это обобщение на случай произвольного многообразия понятий касательной прямой для одномерных кривых и касательной плоскости для двумерных поверхностей.
По-простому говоря: 1 тексель текстуры с картами нормалей заменяет 10 полигонов, а может и больше.
Картинка примера нормалей:
Настоящие «нормальные» монстры.
Где применяется - zbrush, DOOM 3, Blender3D...
Изначально bump mapping использовал карту высот, сам строил нормали и получался normal mapping, так что по сути одно и тоже.
Я рисовал бамп, используя оттенки серого. Иногда преобразовывал цветное изображение в серое, а затем с помощью специального фильтра в Фотошопе превращал его в карту нормалей.
Для того, чтобы сделать объемные кирпичики на стене, отверстия от пуль или еще какие-нибудь мелочи, эта технология подходит.
Если вы делаете персонажа, машину или еще какой либо сложный объект, вам придется использовать другой метод. Тот самый, который предложили в 1998 году. Когда вы «снимаете» карту нормалей с высокополигональной модели, а затем накладываете эту карту на низкополигональный объект.
Попробуем преодолеть технологические сложности, сделав простейшую карту нормалей.
Генерировать нормал можно в Maya, 3ds max, NVIDIA Melody и Z-Brush. Наверное список программ больше.
Пример как сделать карту нормалей в 3ds max 9
Попробуем сделать карту нормалей для этого объекта.
Это 2 полигона, соединенных под прямым углом.