No Image

Трилинейная фильтрация или анизотропная что лучше

СОДЕРЖАНИЕ
0 просмотров
10 марта 2020

Анизотро́пная фильтра́ция (англ. Anisotropic Filtering , AF) — в трёхмерной графике метод улучшения качества изображения текстур на поверхностях, сильно наклонённых относительно камеры. Как билинейная и трилинейная фильтрация, анизотропная фильтрация позволяет устранять алиасинг на различных поверхностях, но при этом вносит меньше размытия и поэтому позволяет сохранить бо́льшую детализацию изображения. Анизотропная фильтрация требует относительно сложного вычисления, и поэтому только около 2004 года она стала «бесплатной» (не снижающей общей кадровой частоты, либо снижающей её незначительно) в графических платах потребительского уровня.

Выбирается MIP-текстура, соответствующая разрешению поперёк направления обзора. Берут несколько текселей вдоль направления обзора (в фильтрации 2x — до двух, в 4x — до четырёх, и т. д.) и усредняют их цвета.

Так как пикселей на экране может быть 1 миллион и даже больше, а каждый тексел — это не менее 32 бит, анизотропная фильтрация требует огромной пропускной способности видеопамяти (десятки гигабайт в секунду). Столь большие требования к памяти уменьшают за счёт сжатия текстур и кэширования.

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

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

http://itc.ua/files/pics/pp-01s.jpg http://itc.ua/files/pics/pp-02s.jpg

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

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

Анизотропная фильтрация имеет лишь одну настройку коэффициент фильтрации (2x, 4x, 8x, 16x). Чем он выше, тем четче и естественнее выглядят текстуры. Обычно при высоком значении небольшие артефакты заметны лишь на самых удаленных пикселах наклоненных текстур. Значений 4x и 8x, как правило, вполне достаточно для избавления от львиной доли визуальных искажений. Интересно, что при переходе от 8x к 16x снижение производительности будет довольно слабым даже в теории, поскольку дополнительная обработка понадобится лишь для малого числа ранее не фильтрованных пикселов.

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

Шейдеры делятся на три типа: вершинные (Vertex Shader) оперируют координатами, геометрические (Geometry Shader) могут обрабатывать не только отдельные вершины, но и целые геометрические фигуры, состоящие максимум из 6 вершин, пиксельные (Pixel Shader) работают с отдельными пикселами и их параметрами.

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

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

Parallax mapping
Parallax mapping это модифицированная версия известной техники bumpmapping, используемой для придания текстурам рельефности. Parallax mapping не создает 3D-объектов в обычном понимании этого слова. Например, пол или стена в игровой сцене будут выглядеть шероховатыми, оставаясь на самом деле абсолютно плоскими. Эффект рельефности здесь достигается лишь за счет манипуляций с текстурами.

http://itc.ua/files/pics/pp-03v.jpg

Исходный объект не обязательно должен быть плоским. Метод работает на разных игровых предметах, однако его применение желательно лишь в тех случаях, когда высота поверхности изменяется плавно. Резкие перепады обрабатываются неверно, и на объекте появляются артефакты.

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

Эффект чаще всего применяется для каменных мостовых, стен, кирпичей и плитки.

Anti-Aliasing
До появления DirectX 8 сглаживание в играх осуществлялось методом SuperSampling Anti-Aliasing (SSAA), известным также как Full-Scene Anti-Aliasing (FSAA). Его применение приводило к значительному снижению быстродействия, поэтому с выходом DX8 от него тут же отказались и заменили на Multisample Аnti-Аliasing (MSAA). Несмотря на то что данный способ давал худшие результаты, он был гораздо производительнее своего предшественника. С тех пор появились и более продвинутые алгоритмы, например CSAA.

http://itc.ua/files/pics/pp-04s.jpg http://itc.ua/files/pics/pp-05s.jpg

Учитывая, что за последние несколько лет быстродействие видеокарт заметно увеличилось, как AMD, так и NVIDIA вновь вернули в свои ускорители поддержку технологии SSAA. Тем не менее использовать ее даже сейчас в современных играх не получится, поскольку количество кадров/с будет очень низким. SSAA окажется эффективной лишь в проектах предыдущих лет, либо в нынешних, но со скромными настройками других графических параметров. AMD реализовала поддержку SSAA только для DX9-игр, а вот в NVIDIA SSAA функционирует также в режимах DX10 и DX11.

Принцип работы сглаживания очень прост. До вывода кадра на экран определенная информация рассчитывается не в родном разрешении, а увеличенном и кратном двум. Затем результат уменьшают до требуемых размеров, и тогда «лесенка» по краям объекта становится не такой заметной. Чем выше исходное изображение и коэффициент сглаживания (2x, 4x, 8x, 16x, 32x), тем меньше ступенек будет на моделях. MSAA в отличие от FSAA сглаживает лишь края объектов, что значительно экономит ресурсы видеокарты, однако такая техника может оставлять артефакты внутри полигонов.

Раньше Anti-Aliasing всегда существенно снижал fps в играх, однако теперь влияет на количество кадров незначительно, а иногда и вовсе никак не cказывается.

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

http://itc.ua/files/pics/pp-07s.jpg http://itc.ua/files/pics/pp-07s.jpg

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

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

Чтобы игра могла использовать тесселяцию, ей требуется видеокарта с поддержкой DirectX 11.

Вертикальная синхронизация

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

http://itc.ua/files/pics/pp-08s.jpg

Если частота обновления монитора составляет 60 Гц, и видеокарта успевает просчитывать 3D-сцену как минимум с таким же количеством кадров, то каждое обновление монитора будет отображать новый кадр. Другими словами, с интервалом 16,66 мс пользователь будет видеть полное обновление игровой сцены на экране.

Читайте также:  Your pc needs to be repaired 0xc0000098

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

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

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

High dynamic range (HDR)
Эффект, часто используемый в игровых сценах с контрастным освещением. Если одна область экрана является очень яркой, а другая, наоборот, затемненной, многие детали в каждой из них теряются, и они выглядят монотонными. HDR добавляет больше градаций в кадр и позволяет детализировать сцену. Для его применения обычно приходится работать с более широким диапазоном оттенков, чем может обеспечить стандартная 24-битовая точность. Предварительные просчеты происходят в повышенной точности (64 или 96 бит), и лишь на финальной стадии изображение подгоняется под 24 бита.

http://itc.ua/files/pics/pp-09s.jpg http://itc.ua/files/pics/pp-10s.jpg

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

Bloom
Bloom нередко применяется совместно с HDR, а еще у него есть довольно близкий родственник Glow, именно поэтому эти три техники часто путают.

http://itc.ua/files/pics/pp-11.jpg

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

Film Grain
Зернистость артефакт, возникающий в аналоговом ТВ при плохом сигнале, на старых магнитных видеокассетах или фотографиях (в частности, цифровых изображениях, сделанных при недостаточном освещении). Игроки часто отключают данный эффект, поскольку он в определенной мере портит картинку, а не улучшает ее. Чтобы понять это, можно запустить Mass Effect в каждом из режимов. В некоторых «ужастиках», например Silent Hill, шум на экране, наоборот, добавляет атмосферности.

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

http://itc.ua/files/pics/pp-12.jpg http://itc.ua/files/pics/pp-13.jpg

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

SSAO
Ambient occlusion техника, применяемая для придания сцене фотореалистичности за счет создания более правдоподобного освещения находящихся в ней объектов, при котором учитывается наличие поблизости других предметов со своими характеристиками поглощения и отражения света.

Screen Space Ambient Occlusion является модифицированной версией Ambient Occlusion и тоже имитирует непрямое освещение и затенение. Появление SSAO было обусловлено тем, что при современном уровне быстродействия GPU Ambient Occlusion не мог использоваться для просчета сцен в режиме реального времени. За повышенную производительность в SSAO приходится расплачиваться более низким качеством, однако даже его хватает для улучшения реалистичности картинки.

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

Cel shading
Игры с эффектом Cel shading начали делать с 2000 г., причем в первую очередь они появились на консолях. На ПК по-настоящему популярной данная техника стала лишь через пару лет. С помощью Cel shading каждый кадр практически превращается в рисунок, сделанный от руки, или фрагмент из мультика.

http://itc.ua/files/pics/pp-14.jpg

В похожем стиле создают комиксы, поэтому прием часто используют именно в играх, имеющих к ним отношение. Из последних известных релизов можно назвать шутер Borderlands, где Cel shading заметен невооруженным глазом.

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

Depth of field
Глубина резкости это расстояние между ближней и дальней границей пространства, в пределах которого все объекты будут в фокусе, в то время как остальная сцена окажется размытой.

http://itc.ua/files/pics/pp-15.jpg

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

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

В играх с использованием Depth of field геймер обычно сильнее ощущает эффект присутствия. Например, заглядывая куда-то через траву или кусты, он видит в фокусе лишь небольшие фрагменты сцены, что создает иллюзию присутствия.

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

Чтобы выяснить, как включение тех или иных опций сказывается на производительности, мы воспользовались игровым бенчмарком Heaven DX11 Benchmark 2.5. Все тесты проводились на системе Intel Core2 Duo e6300, GeForce GTX460 в разрешении 1280Ч800 точек (за исключением вертикальной синхронизации, где разрешение составляло 1680Ч1050).

Как уже упоминалось, анизотропная фильтрация практически не влияет на количество кадров. Разница между отключенной анизотропией и 16x составляет всего лишь 2 кадра, поэтому рекомендуем ее всегда ставить на максимум.

Сглаживание в Heaven Benchmark снизило fps существеннее, чем мы того ожидали, особенно в самом тяжелом режиме 8x. Тем не менее, поскольку для ощутимого улучшения картинки достаточно и 2x, советуем выбирать именно такой вариант, если на более высоких играть некомфортно.

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

Для вертикальной синхронизации было выбрано более высокое разрешение, чтобы fps не ограничивался вертикальной частотой развертки экрана. Как и предполагалось, количество кадров на протяжении почти всего теста при включенной синхронизации держалось четко на отметке 20 или 30 кадров/с. Это связано с тем, что они выводятся одновременно с обновлением экрана, и при частоте развертки 60 Гц это удается сделать не с каждым импульсом, а лишь с каждым вторым (60/2 = 30 кадров/с) или третьим (60/3 = 20 кадров/с). При отключении V-Sync число кадров увеличилось, однако на экране появились характерные артефакты. Тройная буферизация не оказала никакого положительного эффекта на плавность сцены. Возможно, это связано с тем, что в настройках драйвера видеокарты нет опции принудительного отключения буферизации, а обычное деактивирование игнорируется бенчмарком, и он все равно использует эту функцию.

Если бы Heaven Benchmark был игрой, то на максимальных настройках (1280Ч800; AA 8x; AF 16x; Tessellation Extreme) в нее было бы некомфортно играть, поскольку 24 кадров для этого явно недостаточно. С минимальной потерей качества (1280Ч800; AA 2x; AF 16x, Tessellation Normal) можно добиться более приемлемого показателя в 45 кадров/с.

http://itc.ua/files/pics/pp-16.jpg

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

Читайте также:  Как завести личный кабинет налогоплательщика

Введение

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

Билинейная фильтрация это техника устранения искажений изображения (фильтрация), таких, как "блочности" текстур при их увеличении. При медленном вращении или движении объекта (приближение/удаление) могут быть заметны "перескакивания" пикселов с одного места на другое, т.е. появляется блочность. Во избежании этого эффекта применяют билинейную фильтрацию, при использовании которой для определения цвета каждого пикселя берется взвешенное среднее значение цвета четырех смежных текселей и в результате определяется цвет накладываемой текстуры. Результирующий цвет пикселя определяется после осуществления трех операций смешивания: сначала смешиваются цвета двух пар текселей, а потом смешиваются два полученных цвета.

Впрочем, существует целый класс артефактов визуализации, появляющихся в результате наложения текстур и известный под названием "depth aliasing" (депт-алиасинг, ошибки определения глубины сцены, другое название Z-aliasing), от которых билинейная фильтрация не избавляет и не может избавить.

Треугольник формируется путем наложения текстурного изображения на трехмерную поверхность.

Ошибки "depth aliasing" возникаю в результате того факта, что объекты более отдаленные от точки наблюдения, выглядят более маленькими на экране. Если объект двигается и удаляется от точки наблюдения, текстурное изображение, наложенное на уменьшившийся в размерах объект становится все более и более сжатым. В конечном счете, текстурное изображение, наложенное на объект, становится настолько сжатым, что появляются ошибки визуализации. Эти ошибки визуализации особенно нежелательны в анимации, где такие артефакты во время движения становятся причиной мерцания и эффекта медленного движения в той части изображения, которая должна быть неподвижной и стабильной.

В качестве иллюстрации к описанному эффекту могут служить следующие прямоугольники с билинейным текстурированием:

Рис. 2A (Левый сверху): Прямоугольник состоит из двух треугольников, текстурированных изображением шахматной доски. Обратите внимание на то, как ширина и высота каждого квадрата уменьшается при движении от ближайшей стороны прямоугольника, которая ближе к точке наблюдения, до дальней стороны прямоугольника.

Рис. 2B (Правый сверху): На увеличенном изображении, сразу напротив серой стрелки, можно заметить, что состоящая из нескольких пикселов сторона квадратов по вертикали (высоты) уменьшаются и в итоге состоят всего лишь из одного или двух пикселей. Как только вертикальная сторона квадрата (высота) сокращается по длине до двух пикселей, напротив голубой стрелки, обратите внимание на появление артефактов "depth-aliasing" выражающихся в том, что несколько квадратов сливаются в один.

Mip-mapping и вычисления степени детализации

Для избежания ошибок "depth aliasing" и имитации того факта, что объекты на расстоянии выглядят менее детализированными, чем те, что находятся ближе к точке наблюдения, используется техника, известная как mip-mapping. Если говорить кратко, то mip-mapping — наложение текстур, имеющих разную степень или уровень детализации, когда в зависимости от расстояния до точки наблюдения выбирается текстура с необходимой детализацией.

Mip-текстура (mip-map) состоит из набора заранее отфильтрованных и масштабированных изображений. В изображении, связанном с уровнем mip-map, пиксель представляется в виде среднего четырех пикселей из предыдущего уровня с более высоким разрешением. Отсюда, изображение связанное с каждым уровнем mip-текстуры в четыре раза меньше по размеру предыдущего mip-map уровня.

Изображения, связанные с каждым mip-map уровнем волнообразной текстуры показаны ниже.

Степень или уровень детализации — Level of Detail или просто LOD, используются для определения, какой mip-map уровень (или какую степень детализации) следует выбрать для наложения текстуры на объект. LOD должен соответствовать числу текселей накладываемых на пиксель (т.е. какое количество элементов текстуры должно быть наложено на элемент выводимого на экран изображения). Например, если текстурирование происходит с соотношением близким к 1:1, то LOD будет 0, а значит и будет использоваться mip-map уровень с самым высоким разрешением. Если 4 текселя накладываются на один пиксель, то LOD будет 1 и будет использоваться следующий mip уровень с меньшим разрешением. Обычно, при удалении от точки наблюдения, объект, заслуживающий наибольшего внимания имеет более высокое значение LOD.

Ниже представлен прямоугольник, использовавшийся в первом примере, только теперь наложение текстур произведено с использованием техники mip-mapping. Обратите внимание, что ошибки визуализации "depth aliasing" исчезли и на расстоянии стороны прямоугольника выглядят размытыми, как и должно быть.

Рис. 4A (Левый сверху): Прямоугольник из первого примера. Обратите внимание отсутствие ошибок "depth aliasing".

Рис. 4B (Правый сверху): При увеличении удаленной части прямоугольника, хорошо заметна размытость.

Если для каждого пикселя в треугольнике вычисляется значение LOD для определения того, какая mip-текстура имеет нужный уровень фильтрации, то в результате предотвращается появление ошибок визуализации и излишней размытости. LOD должен вычисляться для каждого пикселя в треугольнике с целью избежания разрывов по краям треугольников. Этот метод называется per-pixel mip-mapping (попиксельное mip-текстурирование).

Если же LOD вычисляется всего лишь раз для всего треугольника, то следствием использование этого значения для всех пикселей треугольника становится появление странного эффекта растрескивания, когда некоторые треугольники, из которых состоит анимированный объект, вдруг внезапно становятся чрезмерно размытыми или с неровностями. Этот дешевый, менее эффективный метод mip-текстурирования известен как "per-polygon mip-mapping" (т.е. mip-текстурирование по каждому полигону).

Проблемы Mip-текстурирования

В то время, как mip-текстурирование решает проблему ошибок "depth-aliasing", его использование может стать причиной появления других артефактов. Для борьбы с этими артефактами используются различные техники фильтрации. При удалении объекта все дальше от точки наблюдения, происходит переход от низкого mip-map уровня (соответствующего изображению с высокой детализацией) к высокому mip-map уровню (соответствующего изображению с высокой степенью фильтрации и низкой детализацией). В момент нахождения объекта в переходном состоянии от одного mip-map уровня к другому, появляется особый тип ошибок визуализации, известных под названием "mip-banding" (мип-бендинг) — полосатость или слоеность, т.е. явно различимые границы перехода от одного mip-map уровня к другому.

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

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

Рис. 5A (левый сверху): Прямоугольная лента состоит из двух треугольников, текстурированных волнообразным изображением. Обратите внимание на "mip-banding" артефакты, обозначенные красными стрелками.

Рис. 5B (правый сверху): Увеличенная часть изображения в местах проявления ошибок "mip-banding".

Особенно остро проблема наличия ошибок "mip-banding" стоит в анимации, за счет того, что человеческий глаз очень чувствителен к смещениям и может легко заметить место резкого перехода между уровнями фильтрации при движении вокруг объекта.

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

Трилинейная фильтрация (trilinear filtering) представляет собой технику, которая удаляет артефакты "mip-banding", возникающие при использовании mip-текстурирования. При трилинейной фильтрации для определения цвета пикселя берется среднее значение цвета восьми текселей, по четыре из двух соседних текстур и в результате семи операций смешивания определяется цвет пикселя. При использовании трилинейной фильтрации возможен вывод на экран текстурированного объекта с плавно выполненными переходами от одного mip уровня к следующему, что достигается за счет определения LOD путем интерполяции двух соседних mip-map уровней. Таким образом решая большинство проблем, связанных с mip-текстурированием и ошибками из-за неправильного расчета глубины сцены ("depth aliasing").

Читайте также:  Php server request uri

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

Рис. 6A (левый сверху): Прямоугольник текстурированный волнообразным изображением, выведен на экран с использованием mip-текстурирования и трилинейной фильтрации.

Рис. 6B (правый сверху): Увеличим полученное изображение; обратите внимание на отсутствие артефактов визуализации.

Далее вы сможете посмотреть на другой пример, показывающий преимущества от использования трилинейной фильтрации. В качестве источника был взят тестовый пакет от Ziff-Davis. В первом случае трилинейная фильтрация не применялась и нетрудно заметить "mip-banding" там, где желтая разметка дороги достигает изгиба шоссе (см. рис. ниже). Заметим, что проблема встает более остро при анимационном изображении.

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

Текущее положение дел в области производства графических чипсетов

С момента появления, mip-текстурирование стало широко распространенным стандартом в области трехмерной графики. Графические чипсеты, поддерживающие mip-текстурирование, сегодня делают большинство производителей. Однако, широкое применение хорошо реализованной трилинейной фильтрации началось только в чипсетах, выпущенных на рынок в этом году. Несмотря на то, что некоторые производители заявляют о поддержке трилинейной фильтрации, зачастую это реализуется за счет двухпроходного рендеринга — кстати очень эффективного способа снижения значений fill rate почти в два раза, из-за того, что графический чипсет вынужден обрабатывать каждый пиксель дважды. Заметим, что вывод изображения в два приема означает, что при втором наложении текстуры должно происходить смешивание с уже наложенной текстурой за первый проход. В дополнение к сказанному, стоит заметить, что в некоторых чипсетах, реализациях трилинейной фильтрации выполнена так, что она не используется в комбинации с некоторыми другими трехмерными функциями.

Другой способ относительно корректной трилинейной фильтрации это размытие (dither) переменной LOD так, что только один mip уровень используется для отображения каждого пикселя. Не смотря на то, что до некоторой степени это снижает проблему ошибок "mip banding", этот способ имеет нежелательный эффект, выражающийся в появлении уродливо размытых узоров при использования некоторых mip-текстур.

Для снижения стоимости и сложности аппаратной части, связанной с корректной реализацией трилинейной фильтрации и вычислений LOD для каждого пикселя, некоторые производители графических чипсетов предлагают использовать дешевую альтернативу, известную под именем "per polygon mip-mapping" (mip-текстурирование каждого многоугольника). В этом решении используется одно значение LOD для всех пикселенй в каждом полигоне (обычно в качестве полигонов используются треугольники), что позволяет избавиться от ошибок "mip-banding" внутри полигона. Однако, это решение не избавляет от "mip-banding". Артефакты, вместо проявления внутри каждого полигона, теперь проявляются на границах полигонов. Следствием использования "per polygon mip-mapping" является появление странного эффекта растрескивания, когда некоторые полигоны, из которых состоит объект, при анимации неожиданно становятся расплывчатыми или ступенчатыми.

Другая проблема при использовании "per-polygon mip-mapping" состоит в том, что mip уровень некоторых полигонов может отличаться от нескольких уровней внутри самого полигона. Совершенно невозможно выбрать только один mip уровень для полигона, который бы сразу избавил от эффектов неровностей (aliasing) для всех пикселей внутри полигона без появления расплывчатости некоторых других пикселей. "Per-polygon mip-mapping" требует больше вычислений, но при этом результат получается далеким от идеального, так как данная техника не избавляет от обоих указанных проблем.

Следующие ниже примеры иллюстрируют недостатки "per-polygon mip-mapping". Изображение "А" иллюстрирует ситуацию, когда mip-map уровень в треугольниках слишком высок и очень много деталей теряются в области прямоугольной ленты ближней к точке наблюдения. Изображение "В" иллюстрирует ситуацию, когда mip-map уровень в треугольниках ниже, чем в предыдущем примере, что должно снизить расплывчатость и восстановить некоторые детали, однако появился другой отрицательный эффект — "depth aliasing", который можно заметить на дальней от точки наблюдения стороне прямоугольной ленты. В завершении, как компромисс, вы можете посмотреть на два треугольника (которые формируют прямоугольную ленту), имеющие различные mip-map уровни, на изображении "С". Теперь присутствует "mip-banding" артефакт, имеющий место на границе двух треугольников. Более того, на изображении "С" проблемы ошибки вычисления глубины сцены ("depth-aliasing") и потеря деталей все еще вполне очевидны.

Рис. 7A (левый верхний): Прямоугольник текстурированный изображением шахматной доски под воздействием "per-polygon mip-map" уровня фильтрации. "Per-polygon mip-map" уровень слишком высокий и произошла потеря деталей на ближней стороне прямоугольника.

Рис. 7B (правый верхний): Прямоугольник текстурированный изображением шахматной доски под воздействием "per-polygon mip-map" уровня фильтрации. В этом случае "per-polygon mip-map" уровень слишком низкий и сразу появляются ошибки вычисления глубины сцены — "depth-aliasing".

Рис. 7C (нижний): Прямоуголник текстурированный изображением шахматной доски под воздействием "per-polygon mip-map" уровня фильтрации. В этом случае "per-polygon mip-map" уровень выбран компромиссным между применявшимися в примерах "А" и "В" — а именно, один треугольник имеет высокий mip-map уровень, в то время как другой треугольник имеет низкий mip-map уровень. В этом случае проявляется "mip-banding" на границе между двумя треугольниками. Более того, все еще ясно различимо присутствие "depth-aliasing" и потеря деталей.

В лучшем случае, техника "per-polygon mip-mapping" представляет собой низкокачественную замену для попиксельного mip-текстурирования. В худшем случае, следствием применения "per-polygon mip-mapping" является появление нового набора ошибок визуализации без избавления при этом от проблем, присущих наложению текстур. Без аппаратной реализации поддержки вычислений LOD для каждого пикселя, не существует способа предотвратить появление "mip banding" используя трилинейную фильтрацию.

Одной из альтернатив трилинейной фильтрации является анизотропная фильтрация (anisotropic filtering). Анизотропная фильтрация представляет собой продвинутую технику, следствием применения которой, при корректной реализации, является появление лишь нескольких ошибок визуализации, по сравнению с использованием трилинейной фильтрации. Анизотропная фильтрация может быть реализована с помощью использования выборки по шаблонам (over-sampling или оверсемплинг), в качестве которых могут выступать тексели. Идея в том, что для наложении текстуры на пиксель используется больше текселей, причем количество используемых текселей зависит от применяемого алгоритма. Тем не менее, применение over-sampling серьезно влияет на производительность графического чипсета. Для примера, восьмикратный over-sampling (т.е. когда для наложения текстуры используется восемь текселей) может снизить частоту смены кадров в приложении в восемь раз или больше, по сравнению с тем, что было бы без использования over-sampling. Как следствие, пока не существует решения пригодного для использования анизотропной фильтрации в режиме реального времени. Тем не менее, этот тип фильтрации будет со временем использоваться в приложениях, таких, как например интерфейсы GDI2000 и Chrome от Microsoft. Но, скорее всего, случится это не раньше 2000, так как пока нет приложений, которые могут использовать преимущества анизотропной фильтрации.

Заключение

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

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

Дополнительную информацию по данной теме можно прочитать здесь и здесь.

Комментировать
0 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock detector