Фильтрация текстур - Texture filtering
В компьютерная графика, Фильтрация текстур или же сглаживание текстуры метод, используемый для определения цвета текстуры для наложена текстура пиксель, используя цвета соседних тексели (пиксели текстуры). Есть две основные категории фильтрации текстур, фильтрация увеличения и фильтрация минификации.[1] В зависимости от ситуации фильтрация текстур может быть одним из видов фильтр реконструкции где редко данные интерполируется для заполнения пробелов (увеличения) или типа сглаживание (AA), где образцы текстуры существуют с более высокой частотой, чем требуется для частоты дискретизации, необходимой для заполнения текстуры (минификации). Проще говоря, фильтрация описывает, как текстура применяется во многих различных формах, размерах, углах и масштабах. В зависимости от выбранного алгоритма фильтра результат будет показывать разную степень размытости, детализации, пространственного, временного и блокирующего искажений. В зависимости от обстоятельств фильтрация может выполняться программно (например, пакет программного рендеринга) или аппаратно в реальном времени или GPU ускоренный рендеринг или их сочетание. Для наиболее распространенных интерактивных графических приложений современная фильтрация текстур выполняется с помощью специализированное оборудование который оптимизирует доступ к памяти через кеширование памяти и предварительная выборка и реализует набор алгоритмов, доступных пользователю и разработчику.
Существует множество методов фильтрации текстур, в которых используются разные компромиссы между вычислительный сложность, пропускная способность памяти и качество изображения.
Необходимость фильтрации
В процессе наложения текстуры для любой произвольной 3D-поверхности поиск текстуры происходит, чтобы выяснить, где на текстуре попадает центр каждого пикселя. Для многоугольных поверхностей с наложенной текстурой, состоящих из треугольников, типичных для большинства поверхностей в 3D-играх и фильмах, каждый пиксель (или образец подчиненного пикселя ) этой поверхности будет ассоциироваться с некоторым треугольником (ами) и набором барицентрические координаты, которые используются для определения позиции в текстуре. Такое положение может не идеально ложиться на «пиксельную сетку», что требует некоторой функции для учета этих случаев. Другими словами, поскольку текстурированная поверхность может находиться на произвольном расстоянии и произвольной ориентации относительно наблюдателя, один пиксель обычно не соответствует непосредственно одному текселю. Чтобы определить лучший цвет для пикселя, необходимо применить какую-либо форму фильтрации. Недостаточная или неправильная фильтрация будет отображаться на изображении как артефакты (ошибки в изображении), например, "блочность", неровности, или мерцающий.
Между пикселем и текселем / текселом, которые он представляет на экране, могут быть разные типы соответствия. Они зависят от положения текстурированной поверхности относительно зрителя, и в каждом случае необходимы разные формы фильтрации. Учитывая квадратную текстуру, отображаемую на квадратную поверхность в мире, на некотором расстоянии просмотра размер одного пикселя экрана в точности равен одному текселю. Ближе к этому тексели больше, чем пиксели экрана, и их необходимо соответствующим образом масштабировать - процесс, известный как увеличение текстуры. Дальше каждый тексель меньше пикселя, поэтому один пиксель покрывает несколько текселей. В этом случае необходимо выбрать соответствующий цвет на основе покрытых текселей через минимизация текстуры. Графика API Такие как OpenGL позволяют программисту устанавливать различные варианты фильтров уменьшения и увеличения.[1]
Обратите внимание, что даже в случае, когда пиксели и тексели имеют точно такой же размер, один пиксель не обязательно будет точно соответствовать одному текселю. Он может быть смещен или повернут и покрывать части до четырех соседних текселей. Следовательно, по-прежнему требуется некоторая форма фильтрации.
Mipmapping
Mipmapping это стандартный метод, используемый для экономии некоторой работы по фильтрации, необходимой во время минимизации текстуры.[2] Это также очень полезно для согласованность кеша - без него шаблон доступа к памяти во время выборки из удаленных текстур будет демонстрировать крайне плохую локальность, что отрицательно сказывается на производительности, даже если фильтрация не выполняется.
Во время увеличения текстуры количество текселей, которые необходимо найти для любого пикселя, всегда равно четырем или меньше; однако во время минификации, поскольку текстурированный многоугольник перемещается дальше, потенциально вся текстура может упасть в один пиксель. Это потребует чтения все его текселей и комбинирование их значений для правильного определения цвета пикселя - непомерно дорогостоящая операция. Mipmapping позволяет избежать этого, предварительно фильтруя текстуру и сохраняя ее в меньших размерах, вплоть до одного пикселя. По мере удаления текстурированной поверхности применяемая текстура переключается на предварительно отфильтрованный меньший размер. MIP-карты разных размеров называются «уровнями», при этом уровень 0 является наибольшим размером (используется ближе всего к средству просмотра), а увеличивающиеся уровни используются с увеличением расстояния.
Методы фильтрации
В этом разделе перечислены наиболее распространенные методы фильтрации текстур в порядке возрастания стоимости вычислений и качества изображения.
Интерполяция ближайшего соседа
Интерполяция ближайшего соседа это самый простой и грубый метод фильтрации - он просто использует цвет текселя, ближайшего к центру пикселя, для цвета пикселя. Хотя это просто, это приводит к большому количеству артефактов - «блочности» текстуры во время увеличения,[3] и сглаживание и мерцание во время минификации.[4] Этот метод работает быстро во время увеличения, но во время минификации шаг по памяти становится произвольно большим, и он часто может быть менее эффективным, чем MIP-отображение из-за отсутствия пространственно согласованного доступа к текстуре и повторного использования строки кэша.[5]
Ближайший сосед с mipmapping
Этот метод по-прежнему использует интерполяцию ближайшего соседа, но добавляет MIP-отображение - сначала выбирается ближайший уровень MIP-карты в соответствии с расстоянием, затем выбирается ближайший центр текселя для получения цвета пикселя. Это значительно уменьшает наложение и мерцание во время минификации, но не устраняет их полностью. При этом улучшается доступ к памяти текстур и повторное использование строки кэша за счет предотвращения произвольно больших шагов доступа через память текстур во время растеризации. Это не помогает с блочностью во время увеличения, поскольку каждый увеличенный тексель по-прежнему будет отображаться в виде большого прямоугольника.
Линейная фильтрация MIP-карт
Реже используемый OpenGL и другие API-интерфейсы поддерживают выборку ближайшего соседа из отдельных MIP-карт при линейной интерполяции двух ближайших MIP-карт, относящихся к выборке.
Билинейная фильтрация
Билинейная фильтрация это следующий шаг вперед. В этом методе отбираются четыре ближайших текселя к центру пикселя (на ближайшем уровне MIP-карты), а их цвета объединяются средневзвешенное в зависимости от расстояния.[6] Это устраняет «блочность», наблюдаемую при увеличении, так как теперь имеется плавный градиент изменения цвета от одного текселя к другому вместо резкого скачка, когда центр пикселя пересекает границу текселя.[7] Билинейная фильтрация для фильтрации по увеличению является обычным явлением. При использовании для минификации он часто используется с mipmapping; хотя его можно использовать и без него, при слишком большом уменьшении он будет иметь те же проблемы сглаживания и мерцания, что и фильтрация ближайшего соседа. Однако для умеренных коэффициентов минификации его можно использовать в качестве недорогого аппаратного ускоренного взвешенного суперсэмпла текстур.
Трилинейная фильтрация
Трилинейная фильтрация является средством от распространенного артефакта, наблюдаемого в изображениях с билинейной фильтрацией mipmapped: резкое и очень заметное изменение качества на границах, где средство визуализации переключается с одного уровня mipmap на другой. Трилинейная фильтрация решает эту проблему, выполняя поиск текстуры и билинейную фильтрацию на два ближайшие уровни MIP-карты (один более высокого качества и один более низкого качества), а затем линейно интерполирующий результаты, достижения.[8] Это приводит к плавному ухудшению качества текстуры по мере увеличения расстояния от зрителя, а не к серии резких падений. Конечно, ближе к уровню 0 доступен только один уровень MIP-карты, и алгоритм возвращается к билинейной фильтрации.
Анизотропная фильтрация
Анизотропная фильтрация это самая качественная фильтрация, доступная в текущем потребительском 3D видеокарты. В более простых, «изотропных» методах используются только квадратные MIP-карты, которые затем интерполируются с использованием би- или трилинейной фильтрации. (Изотропный означает то же самое во всех направлениях и, следовательно, используется для описания системы, в которой все карты представляют собой квадраты, а не прямоугольники или другие четырехугольники.)
Когда поверхность находится под большим углом относительно камеры, область заливки текстуры не будет приблизительно квадратной. Рассмотрим общий случай пола в игре: площадь заполнения намного шире, чем высота. В этом случае ни одна из квадратных карт не подходит. В результате получается размытость и / или мерцание, в зависимости от того, как подбирается крой. Анизотропная фильтрация исправляет это, выбирая текстуру неквадратной формы. Цель состоит в том, чтобы сэмплировать текстуру, чтобы она соответствовала отпечатку пикселя, проецируемому в пространство текстуры, и такой отпечаток не всегда совмещен с осью текстуры. Кроме того, имея дело с теорией выборки, пиксель - это не маленький квадрат.[9] следовательно, его след не будет спроектированным квадратом. Сборка посадочного места в пространстве текстуры представляет собой пример некоторой аппроксимации вычисленной функции проецируемого пикселя в пространстве текстуры, но детали часто являются приблизительными,[10] очень запатентованный и глубоко знаком с теорией выборки. Концептуально, однако, цель состоит в том, чтобы выбрать более правильный анизотропный образец соответствующей ориентации, чтобы избежать конфликта между наложением спектров на одной оси и размытием на другой, когда проецируемый размер отличается.
В анизотропных реализациях фильтрация может включать в себя те же алгоритмы фильтрации, которые используются для фильтрации квадратных карт традиционного мип-отображения во время построения промежуточного или конечного результата.
Процент более близкой фильтрации
На основе глубины Отображение теней может использовать интересный процентный более близкий фильтр (PCF) с текстурами с отображением глубины, который расширяет представление о типах текстурных фильтров, которые могут быть применены. В ФКП а карта глубины сцены рендерится из источника света. Во время последующего рендеринга сцены эта карта глубины затем проецируется обратно в сцену из положения источника света, и выполняется сравнение между координатой проекционной глубины и полученной глубиной выборки текстуры. Проективная координата будет глубиной в пикселях сцены от источника света, но полученная глубина из карты глубины будет представлять глубину сцены вдоль этого проецируемого направления. Таким образом, для визуализированного пикселя может быть выполнено определение видимости света и, следовательно, освещения этим светом. Таким образом, эта операция текстурирования является логическим тестом того, горит ли пиксель, однако для данного пикселя можно протестировать несколько выборок, а логические результаты суммировать и усреднить. Таким образом, в сочетании с различными параметрами, такими как местоположение текселя выборки и даже местоположение проекции карты глубины с дрожанием, для пикселя может быть вычислено среднее значение после сравнения глубины или процент близких и, следовательно, освещенных образцов. Важно отметить, что суммирование логических результатов и генерация процентного значения должны выполняться после сравнения глубины проективной глубины и выборки выборки, поэтому это сравнение глубины становится неотъемлемой частью фильтра текстуры. Затем этот процент можно использовать для взвешивания расчета освещенности и обеспечения не только логического значения освещенности или тени, но и результата полутени мягкой тени.[11][12] Версия этого поддерживается в современном оборудовании, где выполняется сравнение и применяется билинейный фильтр после логического сравнения по расстоянию.[13]
Смотрите также
Рекомендации
- ^ а б «Глава 9 - Руководство по программированию OpenGL». Glprogramming.com. 2009-02-13. Фильтрация. Получено 2018-01-14.
- ^ Уильямс, Лэнс (1983). «Пирамидальная параметрика» (PDF). ACM SIGGRAPH Компьютерная графика. 17 (3): 1–11. Дои:10.1145/964967.801126. ISSN 0097-8930.
- ^ «Дизайн игрового движка: наложение текстур» (PDF). uncc.edu. Увеличение текстуры.
- ^ «Дизайн игрового движка: наложение текстур» (PDF). uncc.edu. Уменьшение текстуры.
- ^ Хендрик Ленш (2007-11-29). "Компьютерная графика: теория фильтрации текстур и выборки" (PDF). Общество Макса Планка. MipMaps. Получено 2018-01-14.
- ^ Маркус Хадвигер (2015-03-09). «Лекция 12 по программированию на GPU и GPGPU: Текстурирование графического процессора 2» (PDF). КАУСТ. Реконструкция текстуры: Увеличение.
- ^ Маркус Хадвигер (2015-03-09). «Лекция 12 по программированию на GPU и GPGPU: Текстурирование графического процессора 2» (PDF). КАУСТ. Сглаживание текстур: отображение MIP.
- ^ Хендрик Ленш (2007-11-29). "Компьютерная графика: теория фильтрации текстур и выборки" (PDF). Общество Макса Планка. MipMapping II. Получено 2018-01-14.
- ^ Элви Рэй Смит (1995-07-17). «Пиксель - это не маленький квадрат! (И воксель - это не маленький куб) - Техническая записка 6» (PDF). cs.princeton.edu. Получено 2018-01-14.
- ^ Хендрик Ленш (2007-11-29). "Компьютерная графика: теория фильтрации текстур и выборки" (PDF). Общество Макса Планка. Анизотропная фильтрация. Получено 2018-01-14.
- ^ Ривз, Уильям Т .; Салесин, Дэвид Х .; Кук, Роберт Л. (1987-08-01). «Отрисовка сглаженных теней с помощью карт глубины» (PDF). ACM SIGGRAPH Компьютерная графика. Ассоциация вычислительной техники (ACM). 21 (4): 283–291. Дои:10.1145/37402.37435. ISSN 0097-8930.
- ^ Рандима Фернандо (2 июля 2008 г.). "Мягкие тени в процентах ближе" (PDF). Корпорация NVIDIA. Получено 2018-01-14.
- ^ "WebGL WEBGL_depth_texture Спецификация ратифицированного расширения Khronos". Khronos.org. 2014-07-15. Получено 2018-01-14.