Введение
Если судить по информации на форумах и из статей в Интернете, то ATi хитрит с трилинейной фильтрацией текстур на новом графическом процессоре X800. Впрочем, находятся и яростно защищающие ATi. Вообще, подобные дискуссии напоминают нам скандал годовалой давности, связанный с nVidia.
Поводом для столь горячего обсуждения стала статья на немецком сайте Computerbase. В ней было показано, как ATi использует оптимизированную трилинейную фильтрацию текстур, часто называемую "брилинейной" (brilinear) из-за смеси билинейной и трилинейной фильтраций, в графических процессорах Radeon 9600 и X800. Новость действительно стала ошеломляющей, ведь ATi всегда твердила о использовании настоящей трилинейной фильтрации.
Но как ситуация выглядит на самом деле? Это - оптимизация, хитрость или просто разумное решение? Чтобы судить, нам необходимо углубиться в технологии различных способов фильтрации. И первая часть статьи будет посвящена именно этому, причём, некоторые технологии мы изложим весьма упрощённо, чтобы уложиться в несколько страниц. Итак, давайте взглянем на базовые и принципиальные функции фильтрации.
Множественное отображение текстуры (mipmapping)
Текстурная фильтрация, о которой мы говорим в этой статье, использует несколько уровней множественного отображения текстур (mipmap). Под термином "множественное отображение" мы подразумеваем использование одной и той же текстуры, но разных размеров. Представьте, что вы находитесь в длинном коридоре, пол которого покрыт паркетом до горизонта. Для реалистичного отображения паркета те квадратики, которые находятся близко к наблюдателю, должны быть сильно детализованы. Однако чем ближе к горизонту, тем квадратики (и текстура) становятся меньше и меньше - то есть они отображаются меньшим числом пикселей. При этом теряются детали типа швов между квадратиками, ведь драйвер видеокарты не знает, какие детали в текстуре являются важными.
Множественное отображение улучшает качество графики, используя текстуры, которые уменьшаются в два раза по мере удаления от наблюдателя. Переход с одного mip-уровня на другой задаётся так называемым уровнем детализации текстур Texture LOD (Level Of Detail).
Впрочем, для получения приличного результата графической карте приходится выполнять не только множественное отображение, поскольку перспектива текстуры при приближении к горизонту искажается, и чем дальше текстура находится от наблюдателя, тем она должна быть меньше. Без фильтрации текстуры (это называется режимом point sampling) вы получите очень пикселизованное изображение. Представьте вновь длинный коридор. Чем дальше квадратик паркета находится от наблюдателя, тем меньше пикселей по горизонтали доступно для его отображения, так как коридор сходится из нижней части экрана к центру.
Следующий раздел статьи показывает, как множественное отображение противодействует пикселизации, вызванной масштабированием. Для демонстрации мы использовали тест текстурной фильтрации 3DMark 2003 (версия Pro):
Также следует отметить, что mip-уровни текстур необязательно должны поставляться вместе с игрой. Современные видеокарты могут сами создавать mip-текстуры из базовой текстуры.