Что такое UV и UVW Mapping?

26

Пытаясь понять некоторые базовые 3D-концепции, сейчас я пытаюсь понять, как на самом деле работают текстуры. Я знаю, что UV и UVW картирование - это методы, которые отображают 2D-текстуры в 3D-объекты - Википедия рассказала мне об этом. Я гуглил для объяснений, но нашел только учебники, которые предполагали, что я уже знаю, что это такое.

Насколько я понимаю, каждая 3D-модель состоит из точек, а несколько точек создают лицо? Есть ли у каждой точки или грани вторичная координата, которая отображается в положение оси / у в 2D-текстуре? Или как распаковка манипулирует моделью?

Кроме того, что на самом деле делает W в UVW, что она предлагает по сравнению с УФ? Насколько я понимаю, W отображается в координату Z, но в какой ситуации у меня будут разные текстуры для одного и того же X / Y и разных Z, разве часть Z не будет невидимой? Или я совершенно не понимаю этого?

Майкл Стум
источник
1
задать два вопроса по отдельности
Noob Game Developer
1
Я так ненавижу таких ребят, как @NoobGameDeveloper, все остальные отвечают на вопрос, и все, что они делают, пытаются выяснить, что не так с этим вопросом. Давай, пусть они задают вопросы, я не говорю, что никто не должен следовать правилам, но такие вопросы, как это вполне нормально, чтобы быть размещены здесь.
Даниял Азрам

Ответы:

23

Ваше понимание близко. Каждая 3D-модель состоит из вершин. Каждая вершина обычно определяет местоположение точки в пространстве, нормаль (используется в расчетах освещения) и 1 или более текстурных координат. Они обычно обозначаются как u для горизонтальной части текстуры и v для вертикальной.

Когда объект текстурирован, эти координаты используются для поиска того, какой тексель или пиксель следует построить на основе текстуры. Я считаю, что проще всего думать о них как о процентах или соотношениях между левым краем текстуры ( u = 0) и правым краем текстуры ( u = 1.0) и сверху текстуры ( v = 0) и снизу. этого ( V= 1,0). Они интерполируются между вершинами и ищутся для каждого отображаемого пикселя на экране. Они могут быть больше или меньше этих диапазонов, и состояние рендеринга, которое устанавливается при рендеринге объекта, определяет, что происходит. Возможные варианты: CLAMP и REPEAT. Зажим ограничивает координату либо 0, либо 1, в результате чего текстура размазывается там, где она находится за пределами диапазона. Повтор заставляет текстуру повторяться, когда она находится вне диапазона; это фактически то же самое, что захватить только десятичную часть координаты и использовать ее на своем месте.

Перед применением текстурных координат к объекту они умножаются на матрицу текстуры, чтобы применить к ним некоторое преобразование (например, масштабирование, перемещение или вращение). Этот эффект иногда анимируется в играх, чтобы он выглядел так, как будто что-то движется по объекту без необходимости перемещать сам объект ... текстура просто прокручивается по нему. Когда матрица текстуры умножается на координаты текстуры, она выдает 2 значения, которые используются для поиска текселя для построения графика (назовем их s и t ). Они генерируются автоматически из u и v, даже если матрица текстуры не установлена; это эквивалент умножения u и v на единичную матрицу.

Это где w- координата входит, хотя она используется не так часто. Это дополнительный параметр для умножения матрицы текстуры, и он обычно используется, когда вы хотите учесть перспективу (например, в Shadow Mapping ). Он работает так же, как и при преобразовании местоположения в объектном пространстве в экранное пространство с помощью матрицы проекции мировоззрения. Умножая UVW на проекционное преобразование, вы получаете 2 координаты, s и t, которые затем отображаются на 2D текстуру.

Джоэл Бейкер
источник
Стоит отметить, что OpenGL рассматривает v0 как низ и v1.0 как верх. Это стоило мне много времени в прошлом, когда я не мог найти ошибку, когда мои текстуры выглядели странно.
tkausl
8

Рассмотрим треугольник.

Каждый угол имеет UV-координату. Вы интерполируете между ними, чтобы получить набор UV-координат для каждого пикселя. (Здесь также есть перспектива, но давайте пока проигнорируем это).

Затем вы выбираете тексель из текстуры из координат U и V. То есть пиксель из координаты текстуры x, y - то же самое, немного другая терминология, поскольку мы говорим о текстурах.

Если ваша текстура действительно трехмерная, вам также понадобится третья координата W.

Один из способов визуализировать это - подумать о деревянном блоке. Если вы порежете его как-нибудь, вы увидите, что каждая плоскость внутри блока содержит 2-х мерную текстуру.

3d текстуры настолько редки, что о них можно на время забыть.

Яри ​​Комппа
источник
Редкие? Для чего они используются? Можете ли вы показать некоторые примеры в контексте названий ААА.
Quazi Irfan
Нет, потому что они вообще говоря никогда не использовали. Всегда есть более дешевый способ сделать то же самое. Подумайте о рубленых предметах в wii sports plus; Вы можете разбить предметы по своему усмотрению и увидеть «внутренности». Они могли бы потратить впустую огромные объемы памяти, делая их трехмерными текстурами (при условии, что аппаратное обеспечение даже поддерживает это), но гораздо дешевле имитировать это с парой двумерных текстур вместо этого.
Яри ​​Комппа
Значит, они не эксклюзивны? или это не столь необходимая особенность для каких-либо известных вещей, которые делает движок игры?
Quazi Irfan
Я не понимаю, что вы имеете в виду. 3d текстуры могут быть полезны для других целей, но не просто как текстуры; если некоторые данные, необходимые шейдеру, удобно отображать в трехмерный массив, это будет одним из применений. Но как «нормальная» текстура, они, как правило, просто пустая трата памяти.
Яри ​​Комппа
Одним из применений 3D-текстуры является дистанционное картографирование, хотя, как говорит Яри, они очень необычны в игре из-за их сложности. [ссылка] http.developer.nvidia.com/GPUGems2/gpugems2_chapter08.html
Jackalope
7

Думай оригами.

Ультрафиолетовая карта похожа на сплющенную (развернутую) 2D-оболочку вашей 3D-сетки (оболочки).

Если бы вы вырезали карту и сложили ее вдоль линий сетки, результатом была бы ваша 3d-модель.

Значения (U, V) с плавающей запятой варьируются от (0,0) до (1,1). Верхний левый угол карты UV равен (0,0). Нижний правый угол равен (1,1).

Каждая вершина в сетке многоугольников (трис / квадр) имеет значение (U, V), которое сообщает средству визуализации, какую часть карты использовать.

В конвейере графического процессора вершинные шейдеры вычисляют 2D-проекции каждого пикселя в этих 3D-полигонах, а затем фрагментируют шейдеры, окрашивая их, используя UV-карту.

Это не может быть полностью оценено без такой картины, которая делает все это очевидным:

УФ-сетка

Как упоминали другие комментаторы, компонент W используется средством визуализации для более изящных эффектов, таких как отображение теней, но UV-карта является основой для понимания.

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

Обратите также внимание на то, что встроенные в процессор графические процессоры предназначены для мобильных устройств и имеют число ядер менее чем на одну десятую меньше, чем у внешних графических процессоров аналогичного поколения. Это из-за ограничений по мощности и охлаждению. Закон Мура, кажется, замедлился, но производительность все еще улучшается (со странным перепадом здесь и там ..)

УФ-картирование миллиардов пикселей со скоростью 240+ кадров в секунду может вызвать настоящий беспорядок!

Доминик Черизано
источник
0

Ультрафиолетовая карта отображает точку (x, y, z) в сетке в точку (u, v) на текстурном изображении. Поскольку изображение отображается (u, v) в цвет, две карты можно объединять в цепочку, получая карту из пространства сетки в цветовое пространство.

         uv map       color map
 (x,y,z)   ->   (u,v)    ->     color
 mesh           Texture
 space          space
golopot
источник