stringtranslate.com

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

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

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

Существует две основные категории фильтрации текстур: фильтрация с увеличением и фильтрация с уменьшением. [1] В зависимости от ситуации фильтрация текстур представляет собой либо тип фильтра реконструкции , где разреженные данные интерполируются для заполнения пробелов (увеличение), либо тип сглаживания (AA), где образцы текстуры существуют на более высокой частоте, чем требуется для частоты выборки, необходимой для заполнения текстуры (уменьшение).

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

Необходимость фильтрации

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

Могут быть разные типы соответствия между пикселем и текселем/текселями, которые он представляет на экране. Они зависят от положения текстурированной поверхности относительно зрителя, и в каждом случае требуются разные формы фильтрации. Учитывая квадратную текстуру, отображенную на квадратную поверхность в мире, на некотором расстоянии просмотра размер одного пикселя экрана точно такой же, как один тексель. Ближе к этому текселы больше пикселей экрана и должны быть соответствующим образом увеличены — процесс, известный как увеличение текстуры . Дальше каждый тексель меньше пикселя, и поэтому один пиксель покрывает несколько текселей. В этом случае соответствующий цвет должен быть выбран на основе покрытых текселей с помощью минимизации текстуры . Графические API , такие как OpenGL, позволяют программисту устанавливать разные варианты для фильтров минимизации и увеличения. [1]

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

Mip-отображение

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

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

Методы фильтрации

В этом разделе перечислены наиболее распространённые методы фильтрации текстур в порядке возрастания вычислительной стоимости и качества изображения.

Интерполяция по методу ближайшего соседа

Интерполяция ближайшего соседа — самый простой и грубый метод фильтрации — он просто использует цвет текселя, ближайшего к центру пикселя, для цвета пикселя. Несмотря на простоту, это приводит к большому количеству артефактов — «блочности» текстуры при увеличении [3] , а также наложению и мерцанию при уменьшении. [4] Этот метод быстр при увеличении, но при уменьшении шаг через память становится произвольно большим, и он часто может быть менее эффективным, чем MIP-отображение из-за отсутствия пространственно-когерентного доступа к текстуре и повторного использования строки кэша. [5]

Ближайший сосед с MIP-отображением

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

Линейная фильтрация mipmap

Менее распространенные интерфейсы OpenGL и другие API поддерживают выборку по ближайшим соседям из отдельных MIP-карт, одновременно выполняя линейную интерполяцию двух ближайших MIP-карт, соответствующих выборке.

Билинейная фильтрация

При билинейной фильтрации четыре ближайших к центру пикселя текселя сэмплируются (на самом близком уровне mip-карты), а их цвета объединяются с помощью средневзвешенного значения в соответствии с расстоянием. [6] Это устраняет «блочность», наблюдаемую при увеличении, поскольку теперь есть плавный градиент изменения цвета от одного текселя к другому, вместо резкого скачка, когда центр пикселя пересекает границу текселя. [7] Билинейная фильтрация для фильтрации увеличения является обычным явлением. При использовании для минимизации она часто используется с mip-картой; хотя ее можно использовать и без нее, она будет страдать от тех же проблем со сглаживанием и мерцанием, что и фильтрация ближайшего соседа, если минифицировать слишком сильно. Однако для скромных коэффициентов минификации ее можно использовать в качестве недорогого аппаратно ускоренного взвешенного текстурного суперсэмпла.

Nintendo 64 использовала необычную версию билинейной фильтрации, в которой используются только три пикселя, известную как 3-точечная фильтрация текстур, вместо четырех из-за проблем с аппаратной оптимизацией. Это вносит заметный «триангуляционный сдвиг» в некоторые текстуры. [8]

Трилинейная фильтрация

Трилинейная фильтрация — это средство от распространенного артефакта, наблюдаемого в билинейно отфильтрованных изображениях с mip-картами: резкое и очень заметное изменение качества на границах, где рендерер переключается с одного уровня mip-карты на другой. Трилинейная фильтрация решает эту проблему, выполняя поиск текстуры и билинейную фильтрацию на двух ближайших уровнях mip-карты (один более высокого и один более низкого качества), а затем линейно интерполируя результаты. [9] Это приводит к плавному ухудшению качества текстуры по мере увеличения расстояния от зрителя, а не к серии резких падений. Конечно, ближе, чем уровень 0, доступен только один уровень mip-карты, и алгоритм возвращается к билинейной фильтрации.

Анизотропная фильтрация

Анизотропная фильтрация — это фильтрация самого высокого качества, доступная в современных потребительских 3D -видеокартах . Более простые, «изотропные» методы используют только квадратные mip-карты, которые затем интерполируются с использованием би- или трилинейной фильтрации. ( Изотропный означает одинаковый во всех направлениях, и, следовательно, используется для описания системы, в которой все карты являются квадратами, а не прямоугольниками или другими четырехугольниками.)

Когда поверхность находится под большим углом относительно камеры, область заполнения для текстуры не будет приблизительно квадратной. Рассмотрим распространенный случай пола в игре: область заполнения намного шире, чем ее высота. В этом случае ни одна из квадратных карт не подходит хорошо. Результатом является размытость и/или мерцание, в зависимости от того, как выбрано соответствие. Анизотропная фильтрация исправляет это, выбирая текстуру как неквадратную форму. Цель состоит в том, чтобы выбрать текстуру, соответствующую отпечатку пикселя, спроецированному в пространство текстуры, и такой отпечаток не всегда выровнен по оси с текстурой. Кроме того, при работе с теорией выборки пиксель не является маленьким квадратом [10], поэтому его отпечаток не будет спроецированным квадратом. Сборка отпечатка в пространстве текстуры выбирает некоторую аппроксимацию вычисленной функции спроецированного пикселя в пространстве текстуры, но детали часто являются приблизительными, [11] сугубо фирменными и пропитанными мнениями о теории выборки. Концептуально цель состоит в том, чтобы получить более правильный анизотропный образец соответствующей ориентации, чтобы избежать конфликта между наложением спектров по одной оси и размытием по другой, когда проецируемый размер отличается.

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

Процент Более тесная фильтрация

Картирование теней на основе глубины может использовать интересный фильтр процентного сближения (PCF) с текстурами с отображением глубины, который расширяет восприятие видов текстурных фильтров, которые могут быть применены. В PCF карта глубины сцены визуализируется из источника света. Во время последующего рендеринга сцены эта карта глубины затем проецируется обратно в сцену из положения источника света, и выполняется сравнение между проективной координатой глубины и извлеченной глубиной образца текстуры. Проективная координата будет глубиной пикселей сцены от источника света, но извлеченная глубина из карты глубины будет представлять глубину сцены вдоль этого проецируемого направления. Таким образом, для визуализированного пикселя можно определить видимость для света и, следовательно, освещенность светом. Таким образом, эта операция текстурирования является булевой проверкой того, освещен ли пиксель, однако для данного пикселя можно проверить несколько образцов, а булевы результаты суммировать и усреднять. Таким образом, в сочетании с различными параметрами, такими как местоположение сэмплированного текселя и даже местоположение проекции карты флуктуационной глубины, для пикселя может быть вычислено среднее значение сравнения глубины или процент сэмплов, которые ближе и, следовательно, освещены. Критически важно, что суммирование булевых результатов и генерация процентного значения должны выполняться после сравнения глубины проективной глубины и выборки сэмпла, поэтому это сравнение глубины становится неотъемлемой частью фильтра текстуры. Этот процент затем может использоваться для взвешивания расчета освещенности и предоставления не только булевого значения освещенности или тени, но и результата полутени мягкой тени. [12] [13] Версия этого поддерживается в современном оборудовании, где выполняется сравнение и применяется билинейный фильтр по расстоянию после булевого сравнения [14]

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

Ссылки

  1. ^ ab "Глава 9 - Руководство по программированию OpenGL". Glprogramming.com. 2009-02-13. Фильтрация . Получено 2018-01-14 .
  2. ^ Уильямс, Лэнс (1983). "Пирамидальная параметрика" (PDF) . ACM SIGGRAPH Computer Graphics . 17 (3): 1–11. doi :10.1145/964967.801126. ISSN  0097-8930. Архивировано из оригинала (PDF) 2016-06-06 . Получено 2017-02-14 .
  3. ^ "Game Engine Design: Texture Mapping" (PDF) . uncc.edu. Texture Magnification. Архивировано из оригинала (PDF) 2021-04-17 . Получено 2017-02-14 .
  4. ^ "Game Engine Design: Texture Mapping" (PDF) . uncc.edu. Texture Minification. Архивировано из оригинала (PDF) 2021-04-17 . Получено 2017-02-14 .
  5. ^ Хендрик Ленш (29.11.2007). "Компьютерная графика: теория фильтрации и выборки текстур" (PDF) . Общество Макса Планка . MipMaps . Получено 14.01.2018 .
  6. ^ Маркус Хадвигер (2015-03-09). "GPU and GPGPU Programming Lecture 12: GPU Texturing 2" (PDF) . KAUST . Реконструкция текстур: увеличение. Архивировано из оригинала (PDF) 2021-01-24 . Получено 2017-02-14 .
  7. ^ Маркус Хадвигер (2015-03-09). "GPU and GPGPU Programming Lecture 12: GPU Texturing 2" (PDF) . KAUST . Сглаживание текстур: MIP Mapping. Архивировано из оригинала (PDF) 2021-01-24 . Получено 2017-02-14 .
  8. ^ "Видеоигровая система с сопроцессором, обеспечивающая высокоскоростную эффективную 3D-графику и обработку цифрового аудиосигнала" . Получено 14 ноября 2022 г. .
  9. ^ Хендрик Ленш (29.11.2007). "Компьютерная графика: теория фильтрации и выборки текстур" (PDF) . Общество Макса Планка . MipMapping II . Получено 14.01.2018 .
  10. ^ Элви Рэй Смит (1995-07-17). «Пиксель — это не маленький квадрат! (И воксель — это не маленький куб) — Техническая записка 6» (PDF) . cs.princeton.edu . Получено 2018-01-14 .
  11. ^ Хендрик Ленш (29.11.2007). "Компьютерная графика: теория фильтрации текстур и выборки" (PDF) . Общество Макса Планка . Анизотропная фильтрация . Получено 14.01.2018 .
  12. ^ Ривз, Уильям Т.; Сейлзин, Дэвид Х.; Кук, Роберт Л. (1987-08-01). «Рендеринг сглаженных теней с картами глубины» (PDF) . ACM SIGGRAPH Computer Graphics . 21 (4). Ассоциация вычислительной техники (ACM): 283–291. doi :10.1145/37402.37435. ISSN  0097-8930. S2CID  18320563. Архивировано из оригинала (PDF) 2018-01-15.
  13. ^ Рандима Фернандо (2008-07-02). "Percentage-Closer Soft Shadows" (PDF) . NVIDIA Corporation . Получено 2018-01-14 .
  14. ^ "WebGL WEBGL_depth_texture Khronos Ratified Extension Specification". Khronos.org. 2014-07-15 . Получено 2018-01-14 .