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


Из Википедии, свободной энциклопедии
  (Перенаправлено из запекания текстуры )
Перейти к навигации Перейти к поиску
1: 3D-модель без текстур
2: Та же модель с текстурами
Наложение двухмерной текстуры на 3D-модель

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

Отображение текстуры изначально относилось к диффузному отображению , методу, который просто сопоставлял пиксели текстуры с трехмерной поверхностью («обертывание» изображения вокруг объекта). В последние десятилетия появление многопроходного рендеринга, мультитекстурирования , MIP -карт и более сложных отображений, таких как отображение высот , рельефное отображение , отображение нормалей , отображение смещения , отображение отражения , отображение бликов , отображение окклюзии и многие другие вариации техники (управляется системой материалов) позволили имитировать почти фотореализм в реальном времени за счет значительного сокращения количества полигонов и расчетов освещения, необходимых для создания реалистичной и функциональной трехмерной сцены.

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

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

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

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

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

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

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

Творчество

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

Применение текстуры

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

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

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

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

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

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

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

Потоковая передача текстур

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

Выпечка

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

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

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

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

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

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

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

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

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

Инверсное наложение текстуры

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

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

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

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

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

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

Перспективная правильность

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

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

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

Чтобы исправить обратно в пространство, мы сначала вычисляем исправленное , снова взяв обратное значение . Затем мы используем это, чтобы исправить наши : и . [12]

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

Аффинное наложение текстуры напрямую интерполирует координату текстуры между двумя конечными точками и :
где
Перспективное правильное отображение интерполируется после деления на depth , а затем использует интерполированную обратную величину для восстановления правильной координаты:

Оборудование для трехмерной графики обычно поддерживает текстурирование с правильной перспективой.

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

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

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

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

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

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

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

Мировое космическое подразделение

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

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

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

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

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

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

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

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

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

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

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

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

Приложения

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

Томография

Аппаратное обеспечение текстурного картирования можно использовать для ускорения как реконструкции наборов воксельных данных из томографических сканов , так и для визуализации результатов [16] .

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

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

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

  • 2.5D
  • 3D компьютерная графика
  • Мипмап
  • Система материалов
  • Параметризация
  • Синтез текстуры
  • Атлас текстур
  • Разбрызгивание текстур - техника комбинирования текстур.
  • Шейдер (компьютерная графика)

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

  1. ^ Ван, Хуамин. «Отображение текстуры» ( PDF ) . факультет компьютерных наук и инженерии . Университет штата Огайо . Проверено 15 января 2016 г. .
  2. ^ «Отображение текстуры» ( PDF ) . www.inf.pucrs.br . Проверено 15 сентября 2019 г. .
  3. ^ «Отображение текстуры CS 405» . www.cs.uregina.ca . Проверено 22 марта 2018 г.
  4. ^ Кэтмулл, Э. (1974). Алгоритм разделения для компьютерного отображения криволинейных поверхностей ( PDF ) (кандидатская диссертация). Университет штата Юта.
  5. ^ Фоснер, Рон (январь 1999 г.). «DirectX 6.0 набирает обороты благодаря множеству новых функций и гораздо более быстрому коду» . Microsoft.com . Архивировано из оригинала 31 октября 2016 года . Проверено 15 сентября 2019 г. .
  6. ↑ Хвидстен , Майк (весна 2004 г.). «Руководство по отображению текстур OpenGL» . домашние страницы.gac.edu . Проверено 22 марта 2018 г.
  7. ^ Джон Рэдофф, Анатомия MMORPG, «Анатомия MMORPG» . radoff.com . 22 августа 2008 г. Архивировано из оригинала 13 декабря 2009 г .. Проверено 13 декабря 2009 г. .
  8. ^ Робертс, Сьюзен. «Как использовать текстуры» . Проверено 20 марта 2021 г.
  9. ^ Блайт, Дэвид. Расширенные методы программирования графики с использованием OpenGL . Siggraph 1999. ( PDF ) (см.: Мультитекстура )
  10. ^ Синтез карты рельефа в реальном времени , Ян Каутц 1 , Вольфганг Хейдрихи 2 и Ханс-Питер Зайдель 1 , ( 1 Макс-Планк-Институт информатики, 2 Университет Британской Колумбии)
  11. ^ a b "Следующее поколение 1996 Лексикон от А до Я: Коррекция перспективы" . Следующее поколение . № 15. Imagine Media . Март 1996. с. 38.
  12. ^ Калмс, Микаэль (1997). «Перспективное текстурное наложение» . www.lysator.liu.se . Проверено 27 марта 2020 г. .
  13. ^ " Воксельный движок местности ", введение. В мыслях кодера, 2005 г. (из архива 2013 г.).
  14. ^ Абраш, Майкл. Специальное издание Black Book по программированию графики Майкла Абраша. The Coriolis Group, Скоттсдейл, Аризона, 1997. ISBN 1-57610-174-6 ( PDF заархивирован 11 марта 2007 г. в Wayback Machine ) (глава 70, стр. 1282) 
  15. ^ US 5739818 , Спакман, Джон Нил, «Устройство и метод для выполнения интерполяции с правильной перспективой в компьютерной графике», выпущено 14 апреля 1998 г. 
  16. ^ "наложение текстур для томографии" .

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

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

внешняя ссылка

  • Введение в наложение текстур с использованием C и SDL (PDF)
  • Программирование текстурированного ландшафта с использованием XNA/DirectX, с сайта www.riemers.net.
  • Перспективное правильное текстурирование
  • Текстурирование по времени Отображение текстуры с линиями Безье
  • Полиномиальное наложение текстуры Интерактивное повторное освещение для фотографий
  • 3 Métodos de interpolación a partir de puntos (на испанском языке) Методы, которые можно использовать для интерполяции текстуры, зная координаты текстуры в вершинах многоугольника.
  • Инструменты 3D-текстурирования
Получено с https://en.wikipedia.org/w/index.php?title=Texture_mapping&oldid=1048521946#Baking .