Антиалиасинг и анизотропная фильтрация сегодня: что, где и почем? |
Вы не знаете, что такое антиалиасинг и анизотропия? Вы считаете, что картинка в современных играх могла бы быть и получше? Тогда обязательно прочитайте этот материал – возможно, вы найдёте для себя много полезной информации. На самом деле, статью с таким заголовком можно было бы начать с какой-либо банальности, вроде «каждый пользователь компьютера когда-либо мог наблюдать работу таких техник улучшения трехмёрного изображения, как антиалиасинг или анизотропная фильтрация». Либо такой: «пока наши корабли бороздят космические просторы, программисты NVIDIA и ATI ищут способы, чтобы улучшить работу известных техник улучшений изображения». Вторая банальность имеет куда больше шансов на жизнь в том плане, что она уже интригует неким подобием того, что мы будем заниматься расследованием вопроса о том, кто и каким образом «наоптимизировал» в своих драйверах. Однако мы, пожалуй, обойдёмся вовсе без банальностей. Потому что куда более интересно порассуждать на тему того, насколько же стали доступны сейчас техники улучшения изображения для простого пользователя или, правильнее будет сказать, для простого геймера. Именно геймеры на сегодняшний день являются наиболее активными потребителями всех новых технологий и нововведений в 3D. По большому счёту, мощный 3D-акселератор на сегодняшний день нужен исключительно для игры в последние компьютерные игры с мощными 3D-движками, оперирующие сложными шейдерами различных версий. Сейчас никого уже не удивишь игрой с пиксельными шейдерами версии 2.0 – в игровом мире такие забавы потихоньку становятся повседневным явлением. Большинство игр по-прежнему выпускается на основе шейдерной модели 1.1 ввиду того, что для разработчиков игр наиболее важно добиться, чтобы их игра сносно работала на железе, которое стоит у подавляющего большинства игроков. Делать супернавороченный движок сейчас – это большое расточительство и даже риск. Судите сами: разработка движка класса «Doom 3» или «Half-Life 2» (ну и приплюсуем сюда первопроходца шейдеров 2.0 во всей красе, детище Crytek – «FarCry», чтобы получилась истинная вездесущая троица) занимает огромное количество времени, что привносит в разработку дополнительные трудности – необходимо разработать движок в такие сроки, чтобы нововведения и оригинальные наработки не устарели во время создания движка. Если вы сомневаетесь в том, что такое может быть, то совершенно зря – в случае с «Half-Life 2» всё именно так и было (да и «Doom 3» разрабатывался с оглядкой на GeForce 3, а вышел тогда, когда вовсю продавались GeForce FX). Также разработка движков подобного класса сопряжена с большими затратами на разработку: талантливые программисты стоят сегодня недёшево. А ещё в последнее время много внимания (даже больше, чем нужно) уделяется, если можно так выразиться, «политике» в отношении игровых движителей. Да-да, именно так, вы не ослышались, в сфере 3D уже давно есть своя политика, основанная, естественно, на интересах двух грандов строения графических процессоров: ATI и NVIDIA. Суровая Канада уже давно ведет борьбу против солнечной Калифорнии, и пока конца этому противостоянию не видно, что нам, простым потребителям, конечно, только на руку. Теперь разработать классный движок мало – чтобы иметь успех, нужно заручиться поддержкой либо калифорнийской дивы NVIDIA, либо канадской ATI, благо, теперь и у первой, и у второй есть свои партнёрские программы для разработчиков игр. У NVIDIA такая программа называется «The way it`s meant to be played», а у ATI – «Get it in the game». Всё достаточно красноречиво и понятно: NVIDIA говорит, что «играть нужно так», а совсем не эдак, а ATI уверяет, что всё, что мы только ни пожелаем, мы обязательно получим в самой игре. Достаточно заманчиво, не правда ли? Движки же класса «Doom 3» и «Half-Life 2» (в случае последней движок называется Source, однако для простоты восприятия мы будем называть его именно «Half-Life 2», чтобы сохранить правильную ассоциацию) и вовсе изначально разрабатываются в тесном сотрудничестве с инженерами производителей графических чипов, чтобы игры лучше работали именно на GPU какого-то одного производителя. Поэтому, как мы можем видеть, революции в области новых графических 3D-движков делать весьма проблематично, и поэтому случаются эти самые перевороты в мире игровых движков не так уж и часто. Однако улучшать качество изображения каким-то образом нужно. Если просто увеличивать количество полигонов в кадре, тем самым получая визуально более красивую для восприятия картинку, то в итоге мы придём к тому, что акселератор не сможет обрабатывать сцену с приемлемым уровнем частоты кадров, но в картинке всё равно будет чего-то не хватать. Лесенки из пикселей всё равно останутся, да и качество текстур не улучшится. Остаются менее явные способы по улучшению качества трёхмерной картинки на мониторе – это анизотропная фильтрация и антиалиасинг. Непосредственно к самому 3D-движку эти техники улучшения изображения не имеют никакого отношения, и сделать сам движок более красивым они, естественно, не могут, однако они могут работать с текстурами и изображением таким образом, что на выходе, то есть на мониторе, мы можем видеть визуально более красивую и мягкую картинку. Именно на поприще анизотропной фильтрации и антиалиасинга проходит колоссальнейшее количество оптимизаций драйверов как со стороны NVIDIA, так и со стороны ATI. У компаний различные подходы и политика в отношении этих самых оптимизаций, порой не совсем справедливая по отношению к пользователям. Однако наша статья как раз и призвана разобраться с тем, что же хорошего и что же плохого в подходах обеих компаний-производителей GPU и что на сегодняшний день может улучшить качество изображения в 3D-играх. Что такое антиалиасинг и с чем его едят?Перед тем как начать вдаваться в подробности относительно такой животрепещущей темы, как оптимизации антиалиасинга и различного типа фильтрации текстур, не помешает (и даже скажем больше – необходимо) приобрести некоторую порцию теоретических знаний по предмету нашего сегодняшнего разговора. Итак, антиалиасинг – что же это такое и зачем он нужен. В первую очередь, в слове «антиалиасинг» необходимо выделить часть его – «анти». Предельно ясно, что это часть слова подразумевает то, что само явление «антиалиасинга» направлено на борьбу с чем-то. Как несложно догадаться, в нашем случае – с «алиасингом». Поэтому для нас на данный момент важно чётко разобраться в том, что же представляет из себя пресловутый «алиасинг». Для начала нужно чётко понимать, что изображение, которое мы с вами можем ежедневно наблюдать на экранах наших с вами мониторов, состоит из так называемых мелких частичек, которые принято называть пикселями. Хорошей аналогией в этом смысле может послужить пример с бумагой в клеточку. Изображение на мониторе – это та же бумага в клеточку, только они в данном случае очень и очень мелкие. Если говорят, что разрешение экрана составляет 1024х768 при 32-битном цвете, то это означает, что по горизонтали на мониторе умещается 1024 точек, а по вертикали – 768. При этом каждая точка может быть закрашена одним цветом из доступных в 32-битной палитре. На данный момент 32-битный цвет – это предел того, чего мы можем добиться на экране компьютера. Лучшие умы человечества (тот же Кармак) уже поговаривают о необходимости перехода на 64-битный цвет и указывают на явные минусы 32-битной палитры. В своё время при переходе с 16-битного на 32-битный цвет данная необходимость была достаточно чётко обоснована и виделись реальные причины, по которым стоило бы перейти на 32 бит. Переход же на 64-битный цвет на сегодняшний день – это скорее излишество. Так же как и в случае с 16 и 32 битами, в своё время придётся достаточно долго ждать, когда акселераторы всех уровней смогут с приемлемой скоростью обрабатывать 64-битный цвет. Подавляющее большинство статей, в которых затрагиваются тем или иным образом принципы построения изображений в 3D и где ведётся разговор об антиалиасинге, изобилуют простым, но вместе с тем наиболее действенным примером, на котором можно достаточно хорошо понять, что же такое антиалиасинг. Посмотрите на увеличенную надпись «Апгрейд», сделанную в Word’e, а затем просто увеличенную в фотошопе. Не очень хорошо выглядит, не правда ли? По бокам букв видна так называемая гребёнка или, как её ещё называют, «лесенка». В сущности, эта самая «гребёнка» или «лесенка» и есть алиасинг. Можно представить и другой пример в виде геометрического объекта, например, пирамиды. По её краям также хорошо видна всё та же «гребёнка». А теперь посмотрите на другое изображение той же пирамиды, но с увеличенным вдвое разрешением. Выглядит уже значительно лучше, и «гребёнка» практически незаметна. Как уже было сказано выше, данный эффект, сглаживающий «гребёнку», был достигнут за счёт того, что мы увеличили разрешение в 2 раза. Что это означает? Предположим, у нас была отрендерена пирамида с разрешением 200х200 пикселей (выше мы уже подробно прояснили вопрос о том, что такое пиксели и зачем они нужны). Мы увеличили количество точек по вертикали и по горизонтали ровно в 2 раза, то есть получили изображение с разрешением 400 точек по вертикали и 400 точек по горизонтали. Это также означает, что количество точек на нашем объекте, который находился на сцене, увеличилось вдвое. Что это дало применительно к нашему эффекту алиасинга? Очевидно, что он стал минимален, то есть сгладился – ведь количество точек по краям объекта также возросло вдвое. Именно слово «сгладился» является здесь ключевым. Ведь антиалиасинг по-иному называют сглаживанием, что отражает самую суть технологии, которая сглаживает ту самую «лесенку» по краям трёхмерных объектов. На самом деле, после увеличения разрешения «лесенка» с края пирамиды никуда не делась – она остаётся там по-прежнему. Однако за счёт того, что мы увеличили разрешение (что означает увеличение точек, которые расходуются на отображение пирамиды), эффект «лесенки» сгладился благодаря особенностям человеческого зрения, которое уже менее чётко видит пиксели на крае объекта. Абсолютно понятно, что если увеличивать разрешение ещё и ещё, то эффект алиасинга будет наблюдаться всё в меньшей и меньшей степени. Точнее, человеческий глаз станет замечать его всё в меньшей и меньшей степени, поскольку сам эффект алиасинга никуда не денется. Но так же абсолютно понятно и то, что до бесконечности увеличивать разрешение не получится, ведь мониторы, пусть даже и самые современные, имеют конечные разрешения, причём не такие уж и большие, что не позволит нам постоянно увеличивать количество точек. Проще говоря, простейшего эффекта антиалиасинга можно добиться, всего лишь увеличив разрешение экрана, однако разрешение не может расти до бесконечности. Казалось бы, выхода нет? Однако в действительности он был найден, и основан он всё на той же особенности зрения человека. Этого удалось достичь благодаря плавным переходам цветов на изображении. Фактически визуальное улучшение изображения производится не за счёт физического увеличения разрешения, а за счёт, если можно так выразиться, цветового увеличения разрешения. В данной статье мы не будем описывать алгоритмы вычисления этих точек и не будем вдаваться в глубины математических вычислений, а расскажем лишь о принципе работы такого антиалиасинга. Лесенка на границах объектов видна лишь потому, что чаще всего края трёхмерных объектов довольно сильно выделяются по цвету от остальной картинки и представляют собой тонкие линии в один пиксель. Это можно компенсировать, поставив некоторое количество точек с цветами, вычисляемыми по формуле из значений цвета самого края и точек рядом с этим краем. То есть, если край объекта чёрный, а фон белый, то дополнительная точка рядом с чёрной линией края станет серой. Чем больше этих дополнительных точек около края любого 3D-объекта, тем более гладко выглядят его края и тем меньше заметна лесенка. Данный способ называется краевым антиалиасингом. Качество антиалиасинга, задаваемое в драйвере видеокарты, как то: 2x, 4x, 6x, 8x означает количество проставляемых дополнительных пикселей вокруг линии, нуждающейся в сглаживании. Анизотропная фильтрация: мини-ликбез для начинающихДля того чтобы понять, что такое фильтрация, необходимо обладать некоторыми основными знаниями. Мы уже выяснили, что изображение на экране состоит из множества пикселей, количество которых определяется разрешением. Для вывода цветного изображения ваша видеокарта должна определять цвет каждого пикселя. Определяется его цвет посредством наложения текстурных изображений на полигоны, которые расположены в трёхмерном пространстве. Текстурные изображения состоят из пикселей, вернее, текселей, то есть тексель – это пиксель двухмерного изображения, наложенного на 3D-поверхность. Главная дилемма заключается в следующем: какой тексель или тексели определяют цвет пикселя на экране. Для представления проблемы фильтрации давайте представим одну картину. Допустим, что ваш экран – это плита с множеством круглых отверстий, каждое из которых является пикселем. Для того чтобы определить, какой цвет имеет пиксель относительно трёхмерной сцены, расположенной за плитой, достаточно просто посмотреть в одно из отверстий. А теперь представим луч света, который проходит через одно из отверстий и попадает на наш текстурированный полигон. Если последний расположен параллельно относительно отверстия, через которое проходит световой луч, то световое пятно будет иметь форму окружности. В противном случае, если полигон расположен не параллельно к отверстию, световое пятно искажается и имеет эллиптическую форму. Мы думаем, что многие читатели в это время задаются одним вопросом: «как связаны все эти плиты, отверстие, луч света с проблемой определения цвета пикселя?» Внимание! Ключевая фраза: все полигоны, расположенные в световом пятне, определяют цвет пикселя. Всё вышеизложенное и есть те необходимые базовые знания, которые нужны для того, чтобы понять различные алгоритмы фильтрации. А теперь, чтобы вы лучше поняли, для чего нужна фильтрация, рассмотрим происходящие процессы на примере легендарной «Quake 3 Arena». Представьте какой какой-нибудь коридор с множеством квадратов и различных орнаментов (благо, в «Quake 3 Arena» этого хватает). Орнамент в начале коридора сильно детализирован, а ближе к концу коридора (горизонту) элементы орнамента становятся всё меньше и меньше, т. е. они отображаются меньшим числом пикселей. В результате теряются детали типа швов между элементами орнамента, что, соответственно, приводит к ухудшению качества изображения. Проблема заключается в том, что драйвер графической карты не знает, какие детали в текстуре являются важными. Point SamplingPoint Sampling (поточечная выборка) – самый простой способ определения цвета пикселя. Этот алгоритм основан на текстурном изображении: выбирается всего один тексель, который ближе всех расположен к центру светового пятна, и по нему происходит определение цвета пикселя. Нетрудно догадаться, что это совершенно не верно. Во-первых, цвет пикселя определяется несколькими текселями, а мы выбрали только один. Во-вторых, форма светового пятна может измениться, а алгоритм не принимает это во внимание. А зря! Главным недостатком поточной выборки является тот факт, что когда полигон расположен близко к экрану, количество пикселей будет значительно выше, чем текселей, из-за чего качество изображения очень сильно пострадает. Так называемый эффект блочности, как мы полагаем, многие могли наблюдать в старых компьютерных играх, например, в том же легендарном «Doom». У Point Sampling есть преимущество. Из-за того, что определение цвета пикселя осуществляется всего по одному текселю, данный метод не критичен к пропускной способности памяти, а это автоматически даёт данному способу фильтрации колоссальные диведенды в том плане, что на фильтрацию по данной схеме затрачивается очень мало ресурсов 3D-акселератора. | ||
Обзор мультимедийного ноутбука Samsung R730-JS04 (R730E)< Предыдущая | Следующая >Как спастись бедному спамеру? |
---|