Отображение нормалей - Normal mapping

Отображение нормалей, используемое для повторной детализации упрощенных сеток. Эта карта нормалей закодирована в пространстве объектов.

В 3D компьютерной графики , карты нормалей , или Dot3 Bump Mapping , является текстурирование метод , используемый для фальсифицируя освещение ударов и вмятин - реализацию бамп . Он используется для добавления деталей без использования дополнительных полигонов . Обычно этот метод используется для значительного улучшения внешнего вида и деталей низкополигональной модели путем создания карты нормалей из высокополигональной модели или карты высот .

Карты нормалей обычно хранятся как обычные изображения RGB, где компоненты RGB соответствуют координатам X, Y и Z, соответственно, нормали к поверхности .

История

В 1978 году Джим Блинн описал, как можно возмущать нормали поверхности, чтобы геометрически плоские грани имели детальный вид. Идея извлечения геометрических деталей из высокополигональной модели была представлена ​​в статье Кришнамурти и Левоя, Proc. SIGGRAPH 1996, где этот подход использовался для создания карт смещения над нурбами . В 1998 году были представлены две статьи с ключевыми идеями для переноса деталей с картами нормалей с высокополигональных сеток на низкополигональные: «Упрощение с сохранением внешнего вида» Коэна и др. SIGGRAPH 1998 и «Общий метод сохранения значений атрибутов на упрощенных сетках» Cignoni et al. IEEE Visualization '98. Первый представил идею хранения нормалей поверхности непосредственно в текстуре, а не смещений, хотя требовал, чтобы модель с низкой детализацией была сгенерирована с помощью определенного алгоритма ограниченного упрощения. Последний представил более простой подход, который разделяет высокополигональную сетку и низкополигональную сетку и позволяет воссоздавать любые атрибуты модели с высокой детализацией (цвет, координаты текстуры , смещения и т. Д.) Таким образом, который не зависит от того, как низко- Создана детальная модель. Комбинация хранения нормалей в текстуре с более общим процессом создания все еще используется большинством доступных в настоящее время инструментов.

Метод

Чтобы вычислить ламбертовское (рассеянное) освещение поверхности, единичный вектор от точки затенения до источника света отмечен точками с единичным вектором, нормальным к этой поверхности, и результатом является интенсивность света на этой поверхности. Представьте себе полигональную модель сферы - вы можете только приблизительно определить форму поверхности. Используя трехканальное растровое изображение, текстурированное по всей модели, можно кодировать более подробную информацию о векторах нормалей. Каждый канал в битовой карте соответствует пространственному измерению (X, Y и Z). Это добавляет больше деталей к поверхности модели, особенно в сочетании с передовыми методами освещения.

Пространства

Пространственные размеры различаются в зависимости от пространства, в котором была закодирована карта нормалей. Простая реализация кодирует нормали в объектном пространстве, так что красный, зеленый и синий компоненты напрямую соответствуют координатам X, Y и Z. В объектном пространстве система координат постоянна.

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

Карта текстуры (слева). Соответствующее нормальное отображение в касательном пространстве (центр). Карта нормалей, примененная к сфере в пространстве объектов (справа).

Повторное использование карт нормалей стало возможным благодаря кодированию карт в касательном пространстве . Касательное пространство - это векторное пространство, касающееся поверхности модели. Система координат плавно изменяется (на основе производных положения относительно координат текстуры) по поверхности.

Наглядное изображение касательного пространства одной точки на сфере .

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

Расчет касательного пространства

Чтобы найти возмущение в нормали, необходимо правильно вычислить касательное пространство. Чаще всего нормаль нарушается во фрагментном шейдере после применения матриц модели и вида. Обычно геометрия предусматривает нормаль и касательную. Касательная является частью касательной плоскости и может быть преобразована просто с помощью линейной части матрицы (верхняя 3x3). Однако нормаль необходимо преобразовать с помощью обратного транспонирования . Большинство приложений хотят, чтобы битангенс соответствовал преобразованной геометрии (и связанным с ней UV). Таким образом, вместо того, чтобы заставлять битангенс быть перпендикулярным касательной, обычно предпочтительнее преобразовывать битангенс точно так же, как касательную. Пусть t - касательная, b - касательная, n - нормальная, M 3x3 - линейная часть матрицы модели, а V 3x3 - линейная часть матрицы вида.

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

Как это работает

Пример карты нормалей (в центре) со сценой, из которой она была рассчитана (слева), и результатом применения к плоской поверхности (справа). Эта карта закодирована в касательном пространстве.

Чтобы вычислить ламбертовское (рассеянное) освещение поверхности, единичный вектор от точки затенения до источника света отмечен точками с единичным вектором, нормальным к этой поверхности, и результатом является интенсивность света на этой поверхности. Представьте себе полигональную модель шара - вы можете только приблизительно определить форму поверхности. Используя трехканальное растровое изображение, текстурированное по всей модели, можно кодировать более подробную информацию о векторах нормалей. Каждый канал в битовой карте соответствует пространственному измерению (X, Y и Z). Эти пространственные измерения относятся к постоянной системе координат для карт нормалей пространственного объекта или к плавно изменяющейся системе координат (основанной на производных положения относительно координат текстуры) в случае карт нормалей касательного пространства. Это добавляет больше деталей к поверхности модели, особенно в сочетании с передовыми методами освещения.

Единичные векторы нормали, соответствующие координате текстуры u, v, отображаются на карты нормалей. Присутствуют только векторы, указывающие на зрителя (z: от 0 до -1 для левосторонней ориентации ), поскольку векторы на геометриях, указывающие от зрителя, никогда не отображаются. Отображение выглядит следующим образом:

  X: -1 to +1 :  Red:     0 to 255
  Y: -1 to +1 :  Green:   0 to 255
  Z:  0 to -1 :  Blue:  128 to 255
                  light green    light yellow
  dark cyan       light blue     light red    
  dark blue       dark magenta
  • Нормаль, указывающая прямо на зрителя (0,0, -1), отображается в (128,128,255). Следовательно, части объекта, прямо обращенные к зрителю, имеют светло-голубой цвет. Самый распространенный цвет на карте нормалей.
  • Нормаль, указывающая на верхний правый угол текстуры (1,1,0), отображается в (255,255,128). Следовательно, верхний правый угол объекта обычно светло-желтый. Самая яркая часть цветовой карты.
  • Нормаль, указывающая вправо от текстуры (1,0,0), отображается в (255,128,128). Следовательно, правый край объекта обычно светло-красный.
  • Нормаль, указывающая на верх текстуры (0,1,0), отображается в (128,255,128). Следовательно, верхний край объекта обычно светло-зеленый.
  • Нормаль, указывающая налево от текстуры (-1,0,0), отображается в (0,128,128). Следовательно, левый край объекта обычно темно-голубой.
  • Нормаль, указывающая на нижнюю часть текстуры (0, -1,0), отображается в (128,0,128). Следовательно, нижний край объекта обычно темно-пурпурный.
  • Нормаль, указывающая на нижний левый угол текстуры (-1, -1,0), отображается в (0,0,128). Следовательно, нижний левый угол объекта обычно темно-синий. Самая темная часть цветовой карты.

Так как нормаль будет использоваться в вычислении скалярного произведения для вычисления рассеянного освещения, мы видим, что {0, 0, –1} будут переназначены на значения {128, 128, 255}, давая такой небесно-голубой цвет. цвет, отображаемый на картах нормалей (синяя координата (z) - координата перспективы (глубины), а плоские координаты RG-xy на экране). {0,3, 0,4, –0,866} будет преобразовано в ({0,3, 0,4, –0,866} / 2 + {0,5, 0,5, 0,5}) * 255 = {0,15 + 0,5, 0,2 + 0,5, -0,433 + 0,5} * 255 = {0,65, 0,7, 0,067} * 255 = {166, 179, 17} значений ( ). Знак координаты z (синий канал) должен быть перевернут, чтобы он совпадал с вектором нормали карты нормалей и вектором нормали глаза (точка обзора или камера) или вектором света. Поскольку отрицательные значения z означают, что вершина находится перед камерой (а не за камерой), это соглашение гарантирует, что поверхность будет сиять с максимальной силой именно тогда, когда вектор света и вектор нормали совпадают.

Отображение нормалей в видеоиграх

Изначально интерактивный рендеринг карты нормалей был возможен только на PixelFlow , машине параллельного рендеринга, созданной в Университете Северной Каролины в Чапел-Хилл . Позже стало возможно выполнять отображение нормалей на высокопроизводительных рабочих станциях SGI, используя многопроходный рендеринг и операции фреймбуфера, или на аппаратном обеспечении ПК низкого уровня с некоторыми уловками с использованием палитр текстур. Однако, с появлением шейдеров в персональных компьютерах и игровые консолях, нормальное отображение стали широко использоваться в коммерческих видеоиграх , начиная популярность конце 2003 года карты нормалей для реального времени рендеринга происходит из - за свое хорошее качество для обработки соотношения требований по сравнению с другими методами производящие аналогичные эффекты. Большая часть этой эффективности стала возможной благодаря масштабированию деталей с индексированием по расстоянию , методике, которая выборочно уменьшает детализацию карты нормалей данной текстуры (см. MIP- отображение ), что означает, что более удаленные поверхности требуют менее сложной имитации освещения. Многие конвейеры разработки используют модели с высоким разрешением, запеченные в игровые модели с низким / средним разрешением, дополненные картами нормалей.

Базовое отображение нормалей может быть реализовано на любом оборудовании, поддерживающем текстуры с палитрой. Первой игровой консолью, оснащенной специализированным оборудованием для отображения нормалей, была Sega Dreamcast . Однако Microsoft Xbox была первой консолью, которая широко использовала этот эффект в розничных играх. Из консолей шестого поколения , только 2 PlayStation «s GPU не хватает встроенной поддержки нормального отображения, хотя это может быть смоделировано с помощью векторных блоков на PlayStation 2 фурнитуры. Игры для Xbox 360 и PlayStation 3 в значительной степени полагаются на отображение нормалей и были первым поколением игровых консолей, в котором использовалось отображение параллакса . Nintendo 3DS было показано поддерживать нормальное отображение, как показано на Resident Evil: Revelations и Metal Gear Solid: Snake Eater .

Смотрите также

использованная литература

внешние ссылки