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

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

Фильтрация текстур: основная идея

Чтобы понять разницу между различными алгоритмами фильтрации нужно сначала понять, что пытается сделать фильтрация. Ваш экран имеет определенное разрешение и состоит из того, что называется пикселями. Разрешение определяется количеством пикселей. Ваша 3D плата должна определить цвет каждого из этих пикселей. Основой для определения цвета пикселей служат текстурные изображения, которые накладываются на полигоны, расположенные в трехмерном пространстве. Текстурные изображения состоят из пикселей, называемых текселями. По сути, эти тексели являются пикселями 2D изображения, которые наложены на 3D поверхность. Главный вопрос таков: какой тексель (или какие тексели) определяет цвет пикселя на экране?

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

Посмотреть на различные формы светового пятна можно на следующих примерах:

1. Point Sampling

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

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

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

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

2. Bi-Linear Filtering

Bi-Linear Filtering — билинейная фильтрация. Состоит в использовании интерполяционной техники. Иными словами, применительно к нашему примеру, для определения текселей, которые должны быть задействованы для интерполяции, используется основная форма светового пятна — круг. По существу, круг аппроксимируется 4 текселями. Этот способ фильтрации представляет собой существенно лучше поточечной выборки (point sampling), так как отчасти принимается во внимание форма светового пятна и используется интерполяция. Это означает, что если полигон приближается слишком близко к экрану или точке наблюдения, то для интерполяции потребуется больше текселей, чем в действительности доступно. В результате получается прекрасно выглядящее расплывчатое изображение, впрочем это лишь побочный эффект.

Главный недостаток билинейной фильтрации в том, что аппроксимация выполняется корректно только для полигонов, которые расположены параллельно экрану или точке наблюдения. Если полигон развернут под углом (а это в 99% случаев), значит вы используете неправильную аппроксимацию. Неправильность заключается в том, что вы используете аппроксимацию круга, в то время, как должны аппроксимировать эллипс. Главная проблема в том, что при билинейной фильтрации требуется считывать по 4 текселя из текстурной памяти для определения цвета каждого выводимого на экран пикселя, а значит требования к ширине полосы пропускания памяти увеличиваются в четыре раза, по сравнению с поточечной фильтрацией.

3. Tri-Linear filtering

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

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

4. Anisotropic filtering

Anisotropic filtering — анизотропная фильтрация. Итак, чтобы получить действительно хорошие результаты, вы должны помнить, что все тексели в световом пятне определяют цвет пикселя. Вы так же должны помнить, что форма светового пятна изменяется вместе с изменением положения полигона относительно точки наблюдения. До этого момента мы использовали лишь 4 текселя вместо всех текселей, покрываемых световым пятном. Это означает, что все эти техники фильтрации дают искаженный результат, когда полигон расположен дальше от экрана или от точки наблюдения, т.к. вы не используете достаточный объем информации. На самом деле вы осуществляете сверх меры фильтрацию в одном направлении, и совершенно недостаточно фильтруете во всех остальных. Единственным преимуществом у всех описанных выше фильтраций является тот факт, что при приближении к точке наблюдения, изображение выглядит менее блочным (хотя это всего лишь побочный эффект). Таким образом, чтобы добиться наилучшего качества, мы должны использовать все тексели, покрываемые световым пятном и усреднять их значение. Однако, это серьезно ударяет по пропускной способности памяти — ее попросту может не хватить, и выполнить такую выборку с усреднением нетривиальная задача.

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

1 Tile (тайл) — плитка или фрагмент изображения. Фактически тайл представляет собой участок изображения, обычно с размером 32 на 32 пикселя; по этим участкам осуществляется сортировка с целью определения, какие полигоны, попадающий в этот тайл являются видимыми. Тайловая техника реализована в чипсетах VideoLogic/NEC.

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

Источник

Косметика виртуальных миров. Технологии построения изображения, ч. 2

Трилинейная фильтрация что это. Трилинейная фильтрация что это фото. картинка Трилинейная фильтрация что это. смотреть фото Трилинейная фильтрация что это. смотреть картинку Трилинейная фильтрация что это.Трилинейная фильтрация что это. Трилинейная фильтрация что это фото. картинка Трилинейная фильтрация что это. смотреть фото Трилинейная фильтрация что это. смотреть картинку Трилинейная фильтрация что это. Трилинейная фильтрация что это. Трилинейная фильтрация что это фото. картинка Трилинейная фильтрация что это. смотреть фото Трилинейная фильтрация что это. смотреть картинку Трилинейная фильтрация что это.

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

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

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

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

Самым простым способом фильтрации принято считать Point Sampling (то есть поточечную выборку). Алгоритм его работы прост до безобразия: цвет точки на экране определяется всего лишь одним текселем (пикселем в текстуре), расположенным ближе всего к центру пикселя. Понятно, что результат подобных расчетов далек от идеала и любая относительно сложная текстура таким образом превращалась в хаотичное нагромождение точек. На этом недостатки не заканчиваются: в движении все выглядит еще хуже, можно наблюдать мерцание и перескакивание пикселей с одного места на другое. Ну а если подойти к нашей виртуальной стене слишком близко, то размер текселей станет больше размера пикселей, в результате чего проявится эффект блочности. Подобное можно было наблюдать в старых играх вроде Heretic, Descent или DOOM. К счастью, в новых играх Point Sampling давно не используется.

Со временем на смену поточечной выборке пришла билинейная фильтрация (Bilinear Filtering), ставшая, по сути, усовершенствованным Point Sampling. Разница заключается в том, что данный метод фильтрации использовал для расчетов 4 текселя вместо одного, результирующий же цвет пикселя равнялся усредненному значению цветов четырех текселей, расположенных ближе всего к центру. В результате пропадала блочность, изображение становится более качественным, но все же далеким от идеала. Недостатки подобного метода очевидны: во-первых, текстура становится расплывчатой (особенно сильно заметно вблизи), а во-вторых — значительно увеличивается нагрузка на видеокарту.

Великий и ужасный Point Sampling в игре Descent.

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

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

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

В Serious Sam можно увидеть MIP-уровни — они имеют разные цвета.

Погоня за красотой привела к появлению анизотропной фильтрации (Anisotropic Filtering) — в ее алгоритмах учитывается то, как расположен объект относительно экрана, и, соответственно, цвета пикселей определяются наиболее корректно. Однако в реализации этого метода кроется множество нюансов, и алгоритмы, используемые ATI и NVIDIA, сильно различаются. Между этими компаниями развернулась настоящая битва; совершенствование анизотропной фильтрации продолжается до сих пор. Стоит заметить, что анизотропная фильтрация подразделяется на уровни, которые определяют число текселей, которые обрабатываются при вычислении конечного цвета пикселя. Различают следующие уровни: 2x (16 текселей), 4x (32 текселя), 8x (64 текселя) и 16x (128 текселей).

Чтобы как-то снизить влияние фильтрации текстур на быстродействие видеокарты, производители часто идут на ухищрения, которые они именуют «оптимизациями». К их числу относится так называемая брилинейная фильтрация (именно так, опечатки нет), при которой изображение обрабатывается по билинейным алгоритмам, а трилинейка применяется лишь в небольших областях, на которых граничат соседние MIP-уровни. NVIDIA применила этот тип фильтрации в видеокартах серии GeForce FX, однако это вызвало много негативных отзывов — качество картинки было хуже, чем у полноценной трилинейной фильтрации. ATI также использовала эту оптимизацию в Radeon 9600 и Radeon X800, но тут дело дошло до смешного: компания отрицала факт ее использования, а при включении подкрашенных MIP-уровней драйвера автоматически переключались на честную трилинейную фильтрацию. Впрочем, это сказывалось на fps, так что скрыть оптимизацию не удалось. Во многих видеокартах также используется адаптивная анизотропная фильтрация, при которой поверхности 3D-изображения получают различный уровень анизотропии. Например, при взгляде на стену, параллельную экрану, нет смысла применять фильтрацию уровня 16х, так как она ничем не будет отличаться от фильтрации уровня 2х. Таким образом, оптимизация позволяет грамотно экономить вычислительную мощь. Качество при этом не теряется.

Сглаживание изображения

Увы, но проблемы на этом не заканчиваются. Еще одним препятствием на пути к качеству является алиасинг (aliasing), прозванный в народе «лесенкой». Под этим термином подразумеваются неровные края объектов, которые вместо прямой линии выглядят как совокупность множества углов. Увы, но любая негоризонтальная и невертикальная линия порождает этот тип искажений. За примерами далеко ходить не надо: достаточно запустить Paint (в нем сглаживание не реализовано) и нарисовать несколько наклонных прямых — результат будет далек от идеала. С этим надо бороться, наиболее логичными выходами из ситуации являются либо увеличение разрешения экрана, либо адаптация картинки под особенности человеческого зрения. Первый вариант, безусловно, хорош, но труднореализуем: чтобы среднестатистический пользователь перестал различать подобные дефекты, разрешение 17-дюймового монитора должно составлять около 4000х3000 пикселей! Сомнительно, что подобные устройства станут доступны в ближайшее время, да и нагрузка на видеокарту при этом будет непомерной.

Сглаживание в играх делает картинку куда более естественной. Расплата за это — падение fps.

А поскольку нельзя увеличить размер картинки, то менять придется саму картинку. При этом используется следующее свойство зрения: оно мгновенно замечает резкие цветовые переходы между пикселями, но не реагирует или слабо реагирует на плавные. Если по краям черной линии, изображенной на белом фоне, разместить серые пиксели, то «лесенку» практически не будет заметно — это пример простейшего сглаживания (антиалиасинга), наблюдать его можно при рисовании линий в MS PowerPoint или Adobe Photoshop. Однако алгоритмы сглаживания, реализованные в видеокартах, более сложны и разнообразны. Рассмотрим их подробнее.

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

Первым способом борьбы с пресловутой «лесенкой» стал метод сглаживания, именуемый суперсэмплингом (Supersampling): кадр строится в увеличенном разрешении, а перед выводом на экран сжимается до необходимых размеров. Уровень сглаживания (чаще всего 2х или 4х) показывает, во сколько раз увеличивается разрешение относительно начального. Таким образом, если кадр, имеющий размеры 800х600 пикселей, сглаживается 2х-суперсэмплингом, то в действительности он будет иметь разрешение 1600х1200 пикселей, и лишь в последний момент размер вернется к прежнему значению. Очевидно, что подобный способ борьбы с неровностями крайне ресурсоемок: скорость уменьшается в разы, а это слишком дорогая плата за красоту. У суперсэмплинга есть интересный эффект: помимо сглаживания происходит и своеобразная фильтрация текстур, хотя и не особо эффективная. Этого мало, чтобы оправдать его прожорливость.

Суперсэмплинг не учитывал одной важной детали: «лесенка» образовывается только на границах полигонов, а не внутри текстур. Следовательно, и обрабатывать необходимо лишь границы. Осознание этого факта привело к созданию нового алгоритма сглаживания — мультисэмплинга (Multisampling), впервые реализованного в GeForce 3. В новом методе кадр все так же строился в увеличенном разрешении, но расчеты проводились лишь для крайних пикселей, а цвета внутренних записывались в буфер без какой-либо обработки. Это позволило в значительной степени снизить нагрузку на видеокарту, при этом «лесенки» уничтожались не хуже, чем при суперсэмплинге. К минусам можно отнести два факта: во-первых, исчезла побочная фильтрация текстур, а во-вторых — буфер кадра все также требовал много места в памяти: в разрешении 1600х1200 с включенным HDR и 4х-сглаживанием промежуточное изображение будет занимать около 90 Мб.

Впрочем, в GeForce 3 классическим мультисэмплингом дело не ограничилось. Помимо 2х- и 4х-сглаживания, у видеокарты были еще два режима — Quincunx и 4х 9-tap. В них при расчете цвета пикселя учитывались не только цвета субпикселей данного пикселя, но и цвета субпикселей соседних пикселей (представьте себе, в этой фразе есть смысл!). То есть на конечный цвет оказывали влияние соседние пиксели, хотя и в меньшей степени: у каждого субпикселя был свой коэффициент влияния. В режиме Quincunx учитывались цвета пяти субпикселей (из них только два располагались внутри искомого пикселя), а в 4х 9-tap — девяти (4 внутри). Картинка в результате получалась очень красивой, но слегка расплывчатой.

NVIDIA долго оставалась лидером в области сглаживания изображения, но все изменилось, когда ATI выпустила в свет Radeon 9700, использовавшую технологию SmoothVision 2.0. Фактически в ней был реализован «классический» мультисэмплинг — и никаких вам «заимствований» в стиле Quincunx, однако изменилось само расположение ключевых субпикселей внутри пикселя. Если ранее в режиме 4х они располагались в форме квадрата (то есть являлись центрами пикселей, появившихся в результате увеличения разрешения в четыре раза), то теперь применялась повернутая опорная решетка расположения субпикселей. Польза от этого была просто огромной. Дело в том, что хуже всего сглаживанию поддаются линии, являющиеся почти вертикальными и почти горизонтальными: именно дефекты при их отображении бросаются в глаза в первую очередь. Кроме того, таких линий в кадрах традиционно больше, чем диагональных. Повернутое расположение субпикселей сглаживает подобные линии гораздо лучше, а «неудобные» углы наклона для этого метода сглаживания встречаются довольно редко. Кроме того, мультисэмплинг от ATI поддерживал режим 6х, чем не могла похвастаться NVIDIA.

Повернутая опорная решетка субпикселей позволила повысить планку качества сглаживания.

Успех технологии SmoothVision 2.0 привел к тому, что ее аналог стал применяться и в видеокартах серии GeForce, начиная с модели 6800, правда, решетка в данном случае была повернута в противоположную сторону. Именно мультисэмплинг с повернутой решеткой расположения субпикселей используется в большинстве сегодняшних видеокарт как основной способ сглаживания.

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

С выходом GeForce 8800 компания NVIDIA вновь вернула себе первенство благодаря новому способу сглаживания, названному Coverage Sampling. Инженеры компании пришли к выводу, что при определении цвета пикселя совсем не обязательно знать цвета всех субпикселей — куда важнее знать соотношение площадей частей пикселя, расположенных в разных треугольниках. Таким образом, необязательно каждому субпикселю передавать полную информацию о цвете — вместо этого часть из них может выполнять иную функцию, а именно — сигнализировать о том, где они расположены (вне или внутри треугольника). Такие субпиксели называются coverage-значениями. Для передачи информации о цвете одного субпикселя при включенном HDR затрачивается 64 бита, для передачи информации о местоположении можно обойтись и одним битом (например, 0 — внутри, 1 — снаружи). Кроме того, количество coverage-значений не влияет на разрешение промежуточного изображения. Ну а в случае, если в пикселе граничат более двух треугольников, его сглаживание просто возвращается к стандартному мультисэмплингу, ведь Coverage Sampling всего лишь надстройка, действия которой можно прекратить в любой момент. Одни преимущества. Единственная проблема — кривая реализация настроек сглаживания в драйверах ForceWare, но это уже претензии к программистам, а не к самой видеокарте. Кстати, в GeForce 8800 также появился мультисэмплинг 8х — благо мощности для его реализации хватает.

Возможность создания фотореалистичных кадров с нуля существует далеко не первый день: сейчас каждый второй фильм в большей или меньшей степени пестрит различными спецэффектами, созданными на компьютерах. Порой мы их даже не замечаем, приписывая многое гениальности оператора и сложным постановкам сцен. Увы, но компьютерные игры долгое время не могли похвастаться подобными красотами по одной простой причине: для них слишком важен такой параметр, как скорость. Если Голливуд может позволить себе потратить на построение одного кадра хоть час, хоть сутки, то персональный компьютер вынужден выдавать не менее 30—50 кадров в секунду, чтобы удовлетворить наши потребности.

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

Источник

Трилинейная фильтрация: техника улучшения качества изображений

В данной статье объясняется, почему на определенном уровне визуализации появляются ошибки или артефакты, вызванные процессом наложения текстур на трехмерные объекты, а так же представляются концепции использования текстур с различными уровнями детализации (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»).

Пример использования трилинейной фильтрации приведен ниже. Здесь опять используется все тот же прямоугольник, текстурированный волнообразным изображением, но с плавными переходами от одного 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 не снижается. В общем, очевидно, что графические чипсеты, которые поддерживают трилинейную фильтрацию наряду с высокой скоростью заполнения пикселями текстур, будут обеспечивать наивысшее качество визуализации трехмерной графики в ближайшем будущем.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *