Отображение текстуры

редактировать
1: 3D-модель без текстур. 2: Та же модель с текстурами Преобразование двухмерной текстуры в 3D модель

Отображение текстуры - это метод определения высокочастотной детали, текстуры поверхности или информации о цвете на компьютерной графике или 3D модель. Первоначальный метод был впервые применен Эдвином Катмаллом в 1974 году.

Отображение текстуры первоначально относилось к диффузному отображению, методу, который просто отображал пикселей из текстура для 3D-поверхности («обертывание» изображения вокруг объекта). В последние десятилетия появился многопроходный рендеринг, мультитекстурирование, mipmaps и более сложные сопоставления, такие как height mapping, bump mapping <159.>, отображение нормалей, отображение смещения, отображение отражений, отображение отражений, отображение окклюзии и многие другие Варианты техники (контролируемые параметром a) позволили имитировать почти фотореализм в реальном времени за счет значительного уменьшения количества полигонов и необходимых расчетов освещения для создания реалистичной и функциональной 3D-сцены.

Примеры мультитекстурирования :. 1: Нетекстурированная сфера, 2: Текстурные карты и карты рельефа, 3: Только текстурные карты, 4: Непрозрачность и текстурные карты

Содержание

  • 1 Текстурные карты
    • 1.1 Создание
    • 1.2 Применение текстуры
      • 1.2.1 Пространство текстуры
    • 1.3 Мультитекстурирование
    • 1.4 Фильтрация текстур
    • 1.5 Запекание
  • 2 Алгоритмы растеризации
    • 2.1 Прямое наложение текстуры
    • 2.2 Обратное наложение текстуры
    • 2.3 Отображение аффинной текстуры
    • 2.4 Правильность перспективы
    • 2.5 Ограниченное вращение камеры
    • 2.6 Подразделение для коррекции перспективы
      • 2.6.1 Подразделение мирового пространства
      • 2.6.2 Экранное пространство подраздел
      • 2.6.3 Другие методы
    • 2.7 Аппаратные реализации
  • 3 Приложения
    • 3.1 Томография
    • 3.2 Пользовательские интерфейсы
  • 4 См. также
  • 5 Ссылки
  • 6 Программное обеспечение
  • 7 Внешние ссылки

Текстурные карты

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

. Они могут иметь 1-3 измерения, хотя 2 размеры наиболее распространены для видимых поверхностей. Для использования с современным оборудованием данные карты текстур могут храниться в сдвинутом или мозаичном порядке для улучшения когерентности кэша. API рендеринга обычно управляют ресурсами карты текстуры (которые могут быть расположены в памяти устройства ) как буферы или поверхности и могут разрешать «рендеринг в текстуру » для дополнительных эффектов такие как постобработка или отображение среды.

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

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

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

Создание

Карты текстуры могут быть получены с помощью сканирования / цифровой фотографии, разработанной в программном обеспечении для обработки изображений, например GIMP, Photoshop или рисование на 3D-поверхностях непосредственно с помощью инструмента 3D-рисования, например Mudbox или zbrush.

Текстура application

Этот процесс похож на нанесение узорчатой ​​бумаги на обычную белую коробку. Каждой вершине в многоугольнике назначается текстурная координата (которая во втором случае также известна как UV-координаты ). Это может быть выполнено посредством явного назначения атрибутов вершин, вручную отредактированных в пакете 3D-моделирования с помощью инструментов развертки UV. Также возможно связать процедурное преобразование из трехмерного пространства в пространство текстуры с файлом. Это может быть выполнено с помощью плоской проекции или, альтернативно, цилиндрического или сферического отображения. Более сложные сопоставления могут учитывать расстояние вдоль поверхности для минимизации искажений. Эти координаты интерполируются по граням полигонов для выборки текстурной карты во время рендеринга. Текстуры могут быть повторены или зеркально отражены для расширения конечного прямоугольного растрового изображения на большую площадь, или они могут иметь однозначное уникальное сопоставление «injective » от каждого участка поверхности (что важно для отображения рендеринга и отображения света, также известного как запекание ).

Текстурное пространство

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

Мультитекстурирование

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

Фильтрация текстур

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

Запекание

В качестве оптимизации можно преобразовать детали сложной модели с высоким разрешением или дорогостоящего процесса (например, глобальное освещение ) в текстуру поверхности. (возможно, на модели с низким разрешением). Запекание также известно как отображение рендеринга . Этот метод чаще всего используется для карт освещения, но может также использоваться для создания карт нормалей и карт смещения. Некоторые компьютерные игры (например, Мессия ) использовали эту технику. Первоначальный программный движок Quake использовал запекание на лету для объединения карт освещения и цветовых карт («кэширование поверхности »).

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

Алгоритмы растеризации

В программных и аппаратных реализациях появились различные методы. Каждый предлагает разные компромиссы в отношении точности, универсальности и производительности.

Прямое наложение текстуры

Некоторые аппаратные системы, например Sega Saturn и NV1 пересекают координаты текстуры напрямую, интерполируя проецируемую позицию в пространстве экрана через пространство текстуры и помещая тексели в буфер кадра . (в случае NV1 использовалась квадратичная интерполяция, позволяющая выполнять криволинейный рендеринг). Sega предоставила инструменты для запекания подходящих фрагментов текстуры для каждого квадрата из моделей с UV-отображением.

Это имеет то преимущество, что карты текстур читаются простым линейным способом.

Прямое наложение текстуры также может иногда давать более естественные результаты, чем аффинное наложение текстуры, если примитивы выровнены с заметными направлениями текстуры (например, дорожная разметка или слои кирпичей). Это обеспечивает ограниченную форму коррекции перспективы. Тем не менее, перспективное искажение все еще видно для примитивов рядом с камерой (например, порт Saturn в Sega Rally демонстрировал артефакты сжатия текстуры, поскольку соседние полигоны были почти обрезанными без UV-координат).

Этот метод не используется в современном оборудовании, поскольку UV-координаты оказались более универсальными для моделирования и более последовательными для отсечения.

Обратное наложение текстуры

Большинство подходы используют обратное отображение текстуры, которое пересекает примитивы рендеринга в пространстве экрана, при этом интерполируя координаты текстуры для выборки. Эта интерполяция может быть аффинной или правильной с точки зрения перспективы. Одним из преимуществ является то, что каждый выходной пиксель гарантированно будет пройден только один раз; обычно данные исходной карты текстуры хранятся в некоторой более низкой битовой глубине или в сжатом виде, в то время как буфер кадра использует более высокую битовую глубину. Еще одна - большая универсальность для UV mapping. Кэш текстуры становится важным для буферизации чтений, поскольку шаблон доступа к памяти в пространстве текстуры более сложен.

Аффинное наложение текстуры

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

Аффинная текстура mapping линейно интерполирует координаты текстуры по поверхности, поэтому это самая быстрая форма наложения текстуры. Некоторое программное и аппаратное обеспечение (например, исходная PlayStation ) проецирует вершины в трехмерном пространстве на экран во время рендеринга и линейно интерполирует координаты текстуры в пространстве экрана между ними. («обратное наложение текстуры»). Это можно сделать, увеличивая фиксированную точку UV-координаты или алгоритм возрастающей ошибки, аналогичный линейному алгоритму Брезенхема.

В отличие от перпендикулярного многоугольников, это приводит к заметным искажениям при перспективных трансформациях (см. рисунок: текстура флажка выглядит изогнутой), особенно это касается примитивов около камеры. Такое искажение можно уменьшить, разбив многоугольник на более мелкие.

Движок Doom визуализирует вертикальные и горизонтальные пролеты с аффинным наложением текстуры, и поэтому не может рисовать полы с уклоном или наклонные стены.

Корректность перспективы

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

Для выполнения перспективной коррекции координат текстуры u {\ displaystyle u}u и v {\ displaystyle v}v , мы можем воспользоваться тем фактом, что значения 1 z {\ displaystyle {\ frac {1} {z}}}{\ frac {1 } {z}} , uz {\ displaystyle {\ frac { u} {z}}}{\ displaystyle {\ frac {u} {z}}} и vz {\ displaystyle {\ frac {v} {z}}}{\ displaystyle {\ frac {v} {z}}} линейны в пространстве экрана (в отличие от значений z {\ displaystyle z}z , u {\ displaystyle u}u и v {\ displaystyle v}v сами по себе), z {\ displaystyle z}z - компонент глубины с точки зрения зрителя. Таким образом, мы можем линейно интерполировать эти обратные величины и затем вычислить исправленные значения для каждого пикселя как zcorrect = 1 1 z {\ displaystyle z_ {right} = {\ frac {1} {\ frac {1} {z} }}}{\ displaystyle z_ {correc t} = {\ frac {1} {\ frac {1} {z}}}} , ucorrect = uzz {\ displaystyle u_ {corre} = {\ frac {u} {z}} z}{\ displaystyle u_ {правильно} = { \ frac {u} {z}} z} и vcorrect = vzz {\ displaystyle v_ {right} = {\ frac {v} {z}} z}{\ displaystyle v_ {правильно} = {\ frac {v } {z}} z} .

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

Аффинное наложение текстуры напрямую интерполирует координату текстуры u α {\ displaystyle u _ {\ alpha} ^ {}}u _ {{\ alpha}} ^ {{}} между двумя конечными точками u 0 {\ displaystyle u_ {0} ^ {}}u_ {0} ^ {{}} и u 1 {\ displaystyle u_ {1} ^ {}}u_ {1} ^ { {}} :
u α = (1 - α) u 0 + α u 1 {\ displaystyle u _ {\ alpha } ^ {} = (1- \ альфа) u_ {0} + \ alpha u_ {1}}u _ {{\ alpha}} ^ {{}} = (1- \ alpha) u_ {0} + \ alpha u_ {1} где 0 ≤ α ≤ 1 {\ displaystyle 0 \ leq \ alpha \ leq 1}0 \ leq \ alpha \ leq 1
Правильное отображение перспективы интерполируется после деления на глубину z {\ displaystyle z _ {} ^ {}}z _ {{}} ^ {{}} , а затем использует интерполированное обратное значение для восстановления правильной координаты:
u α = ( 1 - α) U 0 Z 0 + α U 1 Z 1 (1 - α) 1 Z 0 + α 1 Z 1 {\ displaystyle u _ {\ alpha} ^ {} = {\ frac {(1- \ alpha) { \ frac {u_ {0}} {z_ {0}}} + \ alpha {\ frac {u_ {1}} {z_ {1}}}} {(1- \ alpha) {\ frac {1} {z_ {0}}} + \ alpha {\ frac {1} {z_ {1}}}}}}u _ {{\ alpha}} ^ {{}} = {\ frac {(1- \ alpha) {\ frac {u_ {0 }} {z_ {0}}} + \ alpha {\ frac {u_ {1}} {z_ {1}}}} {(1- \ alpha) {\ frac {1} {z_ {0}}} + \ alpha {\ frac {1} {z_ {1}}}}}

Все современное оборудование для трехмерной графики реализует текстурирование с правильной перспективой.

Были разработаны различные методы визуализации геометрии с отображением текстуры в изображения с различными компромиссами качества / точности, которые могут применяться как к программному обеспечению, так и к оборудованию.

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

Ограниченное вращение камеры

Движок Doom ограничивал мир вертикальными стенами и горизонтальными полами / потолками, с камерой, которая могла вращаться только вокруг вертикальной оси. Это означало, что стены будут иметь постоянную координату глубины по вертикальной линии, а полы / потолки будут иметь постоянную глубину по горизонтальной линии. В этом направлении можно было бы использовать быстрое аффинное отображение, потому что оно было бы правильным. Некоторые более поздние рендеры этой эпохи смоделировали небольшую часть камеры шаг с сдвигом, что позволило создать большую свободу при использовании той же техники рендеринга.

Некоторые движки могли отображать отображенные текстуры Карты высот (например, Nova Logic Voxel Space и движок для Outcast ) с помощью брезенхэма -подобных инкрементных алгоритмов, создавая вид ландшафта с текстурой, наложенным на карту без использования традиционных геометрических примитивов.

Подразделение для коррекции перспективы

Каждые Треугольник можно дополнительно разделить на группы по 16 пикселей для достижения двух целей. Во-первых, постоянная работа арифметической мельницы. Во-вторых, получение более быстрых арифметических результатов.

Подразделение мирового пространства

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

Подразделение экранного пространства

Программные средства визуализации обычно предпочитают подразделение экрана, потому что оно имеет меньше накладных расходов. Кроме того, они пытаются выполнить линейную интерполяцию вдоль линии пикселей, чтобы упростить настройку (по сравнению с 2-мерной аффинной интерполяцией) и, таким образом, снова накладные расходы (также аффинное наложение текстуры не помещается в небольшое количество регистров x86 CPU; гораздо больше подходит 68000 или любой RISC ).

Для Quake был использован другой подход, который вычислял правильные координаты перспективы только один раз через каждые 16 пикселей строки развертки и линейно интерполировал между ними, эффективно работая со скоростью линейной интерполяции, потому что Перспективный правильный расчет выполняется параллельно на сопроцессоре. Полигоны визуализируются независимо, следовательно, можно переключаться между промежутками и столбцами или диагональными направлениями в зависимости от ориентации нормали многоугольника для достижения более постоянного z, но усилия, похоже, того не стоят.

Методы разделения экранного пространства. Слева вверху: похоже на землетрясение, справа вверху: билинейно, слева внизу: const-z

Другие методы

Другой метод приближал перспективу с помощью более быстрых вычислений, таких как полином. Еще один метод использует значение 1 / z двух последних нарисованных пикселей для линейной экстраполяции следующего значения. Затем деление выполняется, начиная с этих значений, так что нужно разделить только небольшой остаток, но объем бухгалтерского учета делает этот метод слишком медленным в большинстве систем.

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

Аппаратные реализации

Аппаратные средства отображения текстур изначально были разработаны для моделирования (например, как реализовано в Evans and Sutherland генераторах изображений ESIG) и профессиональных графических рабочих станциях, такие как Silicon Graphics, транслирующие устройства с цифровыми видеоэффектами, такие как и позже появившиеся в аркадных шкафах, потребительских игровых консолях и видеокарты ПК в середине 1990-х годов. В имитации полета отображение текстуры давало важные подсказки движения.

Современные блоки обработки графики (графические процессоры) предоставляют специализированные блоки фиксированных функций, называемые семплерами текстуры, или блоками отображения текстуры, для выполнения преобразования текстуры, обычно с трилинейной фильтрацией или лучше с многоотводной анизотропной фильтрацией и оборудованием для декодирования определенных форматов, таких как DXTn. По состоянию на 2016 год оборудование наложения текстур повсеместно, поскольку большинство SOC содержат подходящий графический процессор.

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

Приложения

Помимо 3D-рендеринга, Наличие оборудования наложения текстуры вдохновило его на использование для ускорения других задач:

Томография

Можно использовать оборудование наложения текстуры для ускорения как реконструкции из томографическое сканирование и для визуализации результатов

Пользовательские интерфейсы

Многие пользовательские интерфейсы используют отображение текстуры для ускорения анимированных переходов элементов экрана, например Exposé в Mac OS X.

См. Также

Ссылки

Программное обеспечение

  • TexRecon - программное обеспечение с открытым исходным кодом для текстурирования 3D-моделей, написанное на C ++

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

Последняя правка сделана 2021-06-10 03:40:46
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте