Войти
ПрограммированиеСтатьи

Алгоритм сглаживания Smart Filtering.

Автор:

Такие алгоритмы сглаживания текстур, как билинейная, бикубическая фильтрация давно уже прижились как стандартные и единственно возможные алгоритмы сглаживания текстур. В принципе, они действительно во многом хороши.. кроме одной-единственной вещи - они сглаживают не только те части текстуры, которые необходимо сгладить, но и те, которые вроде-как надо оставить резкими. Именно для этой задачи пару лет назад Максим Степин () придумал свой алгоритм фильтрации текстур, позже названый Алексом Фрунзе (Alex Frounze) "Smart Filtering". Как технология mip-mapping была создана для уменьшения текстур, так и технология smart filtering предназначена для их увеличения.

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

Вот непосредственно скрин-шоты:


Изображение
отсутствие фильтрации


Изображение
билинейная фильтрация


Изображение
smart filtering

Принцип такой: на предварительной стадии определяем однородные сегменты, последовательно рассматривая кусочки 2x2 по 4 текселя. Определить однородность текселей можно сделать за счет рассмотра контрастов - если цветовой контраст м/у 2-мя ближними текселями велик, то они принадлежат различным сегментам, если контраст мал - одному сегменту.

В зависимости от принадлежности различным сегментам отдельно взятых текселей, в каждом кусочке из 4-х текселей могут возникнуть такие ситуации:


Изображение

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

В 0-м случае все 4 тексела принадлежат одному сегменту.

В 1-м - 2 верхних текселя принадлежат одному сегменту, а 2 нижних - другому... и так далее.

Следующий шаг - составить массив, в котором будут храниться описания, какой фильтр следует применить на какой интервал текселей... На этом предварительная стадия завершена. Довольно удобно хранить текстуру и массив с номерами функций в 32-битном TGA-файле, т.к. в нем на каждый пиксель выделяется всего 32 бита, цвет каждого пикселя хранится в 24 битах, и 8 бит нам остается для того, чтобы хранить номер фильтра.

Далее, уже на стадии рендеринга, в зависимости от номера фильтра на каждую группу текселей производим фильтрацию. Для каждого из вариантов размещения сегментов (0-13) предлагается использовать свою интерполяционную функцию.


пример фильтрации, exe
пример фильтрации, исходные тексты программы

Последняя информация по smart filtering - на сайте www.hiend3d.com

14 июня 2002

Комментарии [21]