Пытаясь понять некоторые базовые 3D-концепции, сейчас я пытаюсь понять, как на самом деле работают текстуры. Я знаю, что UV и UVW картирование - это методы, которые отображают 2D-текстуры в 3D-объекты - Википедия рассказала мне об этом. Я гуглил для объяснений, но нашел только учебники, которые предполагали, что я уже знаю, что это такое.
Насколько я понимаю, каждая 3D-модель состоит из точек, а несколько точек создают лицо? Есть ли у каждой точки или грани вторичная координата, которая отображается в положение оси / у в 2D-текстуре? Или как распаковка манипулирует моделью?
Кроме того, что на самом деле делает W в UVW, что она предлагает по сравнению с УФ? Насколько я понимаю, W отображается в координату Z, но в какой ситуации у меня будут разные текстуры для одного и того же X / Y и разных Z, разве часть Z не будет невидимой? Или я совершенно не понимаю этого?
источник
Ответы:
Ваше понимание близко. Каждая 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 текстуру.
источник
Рассмотрим треугольник.
Каждый угол имеет UV-координату. Вы интерполируете между ними, чтобы получить набор UV-координат для каждого пикселя. (Здесь также есть перспектива, но давайте пока проигнорируем это).
Затем вы выбираете тексель из текстуры из координат U и V. То есть пиксель из координаты текстуры x, y - то же самое, немного другая терминология, поскольку мы говорим о текстурах.
Если ваша текстура действительно трехмерная, вам также понадобится третья координата W.
Один из способов визуализировать это - подумать о деревянном блоке. Если вы порежете его как-нибудь, вы увидите, что каждая плоскость внутри блока содержит 2-х мерную текстуру.
3d текстуры настолько редки, что о них можно на время забыть.
источник
Думай оригами.
Ультрафиолетовая карта похожа на сплющенную (развернутую) 2D-оболочку вашей 3D-сетки (оболочки).
Если бы вы вырезали карту и сложили ее вдоль линий сетки, результатом была бы ваша 3d-модель.
Значения (U, V) с плавающей запятой варьируются от (0,0) до (1,1). Верхний левый угол карты UV равен (0,0). Нижний правый угол равен (1,1).
Каждая вершина в сетке многоугольников (трис / квадр) имеет значение (U, V), которое сообщает средству визуализации, какую часть карты использовать.
В конвейере графического процессора вершинные шейдеры вычисляют 2D-проекции каждого пикселя в этих 3D-полигонах, а затем фрагментируют шейдеры, окрашивая их, используя UV-карту.
Это не может быть полностью оценено без такой картины, которая делает все это очевидным:
Как упоминали другие комментаторы, компонент W используется средством визуализации для более изящных эффектов, таких как отображение теней, но UV-карта является основой для понимания.
Обратите внимание, что вершинный шейдер должен вызывать фрагментный шейдер хотя бы один раз для каждого пикселя, который нужно раскрасить. Именно поэтому графические процессоры являются параллельными процессорами с десятками ядер - конвейер шейдеров очень требователен.
Обратите также внимание на то, что встроенные в процессор графические процессоры предназначены для мобильных устройств и имеют число ядер менее чем на одну десятую меньше, чем у внешних графических процессоров аналогичного поколения. Это из-за ограничений по мощности и охлаждению. Закон Мура, кажется, замедлился, но производительность все еще улучшается (со странным перепадом здесь и там ..)
УФ-картирование миллиардов пикселей со скоростью 240+ кадров в секунду может вызвать настоящий беспорядок!
источник
Ультрафиолетовая карта отображает точку (x, y, z) в сетке в точку (u, v) на текстурном изображении. Поскольку изображение отображается (u, v) в цвет, две карты можно объединять в цепочку, получая карту из пространства сетки в цветовое пространство.
источник