Нормальное отображение
Эта статья нуждается в дополнительных цитатах для проверки . ( июнь 2024 г. ) |

В 3D-компьютерной графике картирование нормалей или рельефное отображение Dot3 — это метод отображения текстур, используемый для имитации освещения неровностей и вмятин — реализация рельефного отображения . Он используется для добавления деталей без использования большего количества полигонов . [ 1 ] Обычно этот метод используется для значительного улучшения внешнего вида и детализации низкополигональной модели путем создания карты нормалей из высокополигональной модели или карты высот .
Карты нормалей обычно хранятся в виде обычных изображений RGB , где компоненты RGB соответствуют координатам X, Y и Z соответственно нормали к поверхности .
История
[ редактировать ]В 1978 году Джим Блинн описал, как можно изменить нормали поверхности, чтобы геометрически плоские грани приобрели детализированный вид. [ 2 ] Идея взятия геометрических деталей из модели с большим количеством полигонов была представлена в книге «Подгонка гладких поверхностей к плотным полигональным сеткам» Кришнамурти и Левой, Proc. СИГГРАФ 1996, [ 3 ] где этот подход использовался для создания карт смещения поверх nurbs . В 1998 году были представлены две статьи с ключевыми идеями по переносу деталей с помощью карт нормалей из сеток с большим количеством полигонов в сетку с низким: «Упрощение с сохранением внешнего вида», автор: Коэн и др. СИГГРАФ 1998, [ 4 ] и «Общий метод сохранения значений атрибутов на упрощенных сетках» Cignoni et al. Визуализация IEEE '98. [ 5 ] Первый представил идею хранения нормалей поверхности непосредственно в текстуре, а не смещений, хотя для этого требовалось создать модель с низкой детализацией с помощью определенного алгоритма ограниченного упрощения. Последний представил более простой подход, который разделяет высоко- и низкополигональную сетку и позволяет воссоздать любые атрибуты высокодетализированной модели (цвет, текстурные координаты , смещения и т. д.) способом, не зависящим от того, как низко- Создана детальная модель. Сочетание хранения нормалей в текстуре с более общим процессом создания до сих пор используется большинством доступных на данный момент инструментов.
Пространства
[ редактировать ]Ориентация осей координат различается в зависимости от пространства , в котором была закодирована карта нормалей. Простая реализация кодирует нормали в пространстве объектов так, что красный, зеленый и синий компоненты напрямую соответствуют координатам X, Y и Z. В пространстве объектов система координат постоянна.
Однако карты нормалей объектного пространства нельзя легко повторно использовать в нескольких моделях, поскольку ориентация поверхностей различается. Поскольку карты цветных текстур можно свободно использовать повторно, а карты нормалей обычно соответствуют определенной карте текстуры, художникам желательно, чтобы карты нормалей имели такое же свойство.

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

Карты нормалей касательного пространства можно идентифицировать по их доминирующему фиолетовому цвету, соответствующему вектору, обращенному прямо от поверхности. См. Расчет .
Расчет касательных пространств
[ редактировать ]![]() | Этот раздел нуждается в расширении : больше математики. Вы можете помочь, добавив к нему . ( октябрь 2011 г. ) |
![]() | Этот раздел может быть слишком техническим для понимания большинства читателей . ( январь 2022 г. ) |
Нормали поверхности используются в компьютерной графике в первую очередь для освещения, имитируя явление, называемое зеркальным отражением . Поскольку видимое изображение объекта представляет собой свет, отражающийся от его поверхности, информацию о свете, полученную из каждой точки поверхности, вместо этого можно вычислить в касательном пространстве в этой точке.

Для каждого касательного пространства поверхности в трехмерном пространстве существует два вектора, перпендикулярных каждому вектору касательного пространства. Эти векторы называются нормальными векторами , и выбор между этими двумя векторами дает описание того, как поверхность ориентирована в этой точке, поскольку информация о свете зависит от угла падения между лучами. и вектор нормали , и свет будет виден только в том случае, если . В таком случае отражение луча с направлением вдоль вектора нормали дается
Интуитивно это означает, что вы можете видеть только внешнюю сторону объекта, если смотрите снаружи, и видеть только внутреннюю сторону, если смотрите изнутри. Обратите внимание, что информация об освещении является локальной, поэтому поверхность не обязательно должна быть ориентируемой в целом. Вот почему, хотя такие пространства, как лента Мёбиуса и бутылка Клейна , неориентируемы, их всё же можно визуализировать.
Нормали могут быть заданы с использованием различных систем координат. В компьютерной графике полезно вычислять нормали относительно касательной плоскости поверхности. Это полезно, поскольку поверхности в приложениях подвергаются различным преобразованиям, например, в процессе рендеринга или в скелетной анимации, поэтому важно, чтобы нормальная векторная информация сохранялась при этих преобразованиях. Примеры таких преобразований включают в себя трансформация, вращение, сдвиг и масштабирование, перспективная проекция, [ 6 ] или скелетную анимацию детально детализированного персонажа.
Для целей компьютерной графики наиболее распространенным представлением поверхности является триангуляция , и в результате касательная плоскость в точке может быть получена путем интерполяции между плоскостями, содержащими треугольники, каждый из которых пересекает эту точку. Аналогично, для параметрических поверхностей с касательными пространствами параметризация даст частные производные, и эти производные можно использовать в качестве основы касательных пространств в каждой точке .
Чтобы найти возмущение в нормали, необходимо правильно рассчитать касательное пространство. [ 7 ] Чаще всего нормаль нарушается во фрагментном шейдере после применения матриц модели и представления. [ нужна ссылка ] . Обычно геометрия предусматривает нормаль и касательную. Касательная является частью касательной плоскости и может быть просто преобразована с помощью линейной части матрицы (верхние 3х3). Однако нормаль необходимо преобразовать с помощью обратного транспонирования . Большинству приложений требуется, чтобы биткасательная соответствовала преобразованной геометрии (и связанным с ней 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 означают, что вершина находится перед камерой (а не за камерой), это соглашение гарантирует, что поверхность сияет с максимальной силой именно тогда, когда вектор света и вектор нормали совпадают. [ 8 ]
Отображение нормалей в видеоиграх
[ редактировать ]Интерактивный рендеринг карт нормалей изначально был возможен только на PixelFlow , машине параллельного рендеринга, созданной в Университете Северной Каролины в Чапел-Хилл . [ нужна ссылка ] Позже стало возможным выполнять отображение нормалей на высокопроизводительных рабочих станциях SGI, используя многопроходный рендеринг и с кадровым буфером. операции [ 9 ] или на слабом ПК с некоторыми трюками с использованием текстур с палитрой. Однако с появлением шейдеров на персональных компьютерах и игровых консолях отображение нормалей получило широкое распространение в начале 2000-х годов, причем одними из первых игр, реализовавших его, были Evolva (2000), Giants: Citizen Kabuto и Virtua Fighter 4 (2001). . [ 10 ] [ 11 ] Популярность карт нормалей для рендеринга в реальном времени объясняется их хорошим соотношением качества и требований к обработке по сравнению с другими методами создания аналогичных эффектов. Большая часть этой эффективности стала возможной благодаря индексированному по расстоянию масштабированию детализации — методу, который выборочно уменьшает детализацию карты нормалей данной текстуры (см. mipmapping ), а это означает, что более удаленные поверхности требуют менее сложной симуляции освещения. Многие конвейеры разработки используют модели высокого разрешения, встроенные в игровые модели низкого/среднего разрешения, дополненные картами нормалей.
Базовое отображение нормалей может быть реализовано на любом оборудовании, поддерживающем текстуры с палитрой. Первой игровой консолью, оснащенной специализированным оборудованием для отображения нормалей, была Sega Dreamcast . Однако Xbox от Microsoft была первой консолью, которая широко использовала этот эффект в розничных играх. Из консолей шестого поколения [ нужна ссылка ] , только 2 PlayStation графический процессор не имеет встроенной поддержки отображения нормалей, хотя его можно смоделировать с использованием векторных единиц оборудования PlayStation 2. Игры для Xbox 360 и PlayStation 3 в значительной степени полагаются на отображение нормалей и являются первым поколением игровых консолей, в котором используется отображение параллакса . Resident Evil Было показано, что Nintendo 3DS поддерживает отображение нормалей, о чем свидетельствуют игры : Revelations и Metal Gear Solid 3: Snake Eater .
См. также
[ редактировать ]- Отражение (физика)
- Окружающая окклюзия
- Карта глубины
- Выпечка (компьютерная графика)
- Тесселяция (компьютерная графика)
- Отображение рельефа
- Картирование смещения
Ссылки
[ редактировать ]- ^ «ИзучениеOpenGL — отображение нормалей» . Learnopengl.com . Проверено 21 мая 2024 г.
- ^ Блинн. Моделирование морщинистых поверхностей , Siggraph, 1978 г.
- ^ Кришнамурти и Левой, Подгонка гладких поверхностей к плотным полигональным сеткам , SIGGRAPH 1996
- ^ Коэн и др., Упрощение с сохранением внешнего вида , SIGGRAPH 1998 (PDF)
- ^ Чиньони и др., Общий метод сохранения значений атрибутов в упрощенных сетках , IEEE Visualization 1998 (PDF)
- ^ Акенине-Мёллер, Томас; Хейнс, Эрик; Хоффман, Нати; Рыба, Ангел; Иваницкий, Михал; Хиллэр, Себастьян (2018). Рендеринг в реальном времени, 4-е издание (4-е изд.). Бока-Ратон, Флорида, США: AK Peters/CRC Press. п. 57. ИСБН 978-1-13862-700-0 . Проверено 2 августа 2024 г.
- ^ Миккельсен, Возвращение к моделированию морщинистых поверхностей , 2008 (PDF)
- ^ «ИзучениеOpenGL — отображение нормалей» . Learnopengl.com . Проверено 19 октября 2021 г.
- ^ Хайдрих и Зайдель, Реалистичное затенение и освещение с аппаратным ускорением. Архивировано 29 января 2005 г. в Wayback Machine , SIGGRAPH 1999 ( PDF ).
- ^ «Виртуа Файтер 4» . Сега Ретро . 2023-11-30 . Проверено 3 марта 2024 г.
- ^ «Графические технологии в играх» . Меристация (на испанском языке). 18 апреля 2012 г. Проверено 3 марта 2024 г.
Внешние ссылки
[ редактировать ]
- Учебное пособие по карте нормалей Попиксельная логика картографирования нормалей Dot3
- NormalMap-онлайн- бесплатный генератор внутри браузера
- Нормальное картографирование на sunandblackcat.com
- Отображение нормалей в Blender
- Наложение нормалей с текстурами в палитре с использованием старых расширений OpenGL.
- Фотография карты нормалей Создание карт нормалей вручную путем наложения цифровых фотографий.
- Объяснение нормального отображения
- Простой генератор карт нормалей с открытым исходным кодом