Antialiasing – проблем или не за съвременните видеокарти?




Antialiasing – проблем или не за съвременните видеокарти?

PCMagazine, Брой 9
Категория: Хардуер , Графични карти
Етикети: AMD , Nvidia , ATI , видеокарта
PC MAGAZINE
12.9.2008

Antialiasing – проблем или не за съвременните видеокарти?

Последните няколко поколения графични карти (е, ако трябва да сме честни – само последното поколение) както на Nvidia, така и на ATI/AMD имаха известни проблеми с производителността при активирането на антиалайсинг независимо от притежаваната мощност. Дали поради недостиг на чисто изчислителна сила или поради недостатъчна производителност на рендер модулите, както G80, така и RV600 имаше проблеми в това отношение. За да разберем по- добре проблема и причината за него, в тази статия ще разгледаме принципите, на които се базира антиалайсингът, и начините за преодоляването на забавянето при неговото активиране.

Нуждата от използването на антиалайсинг не е възникнала в конкретен момент, а е по-скоро обусловена от самата същност на работа на компютърните дисплеи. Докато всичко около нас може да бъде изобразено безпроблемно по аналогов път, цифровата природа на компютрите и по-конкретно на техните монитори налага определена „зърнестост“ на изображенията. Допреди 4-5 години това не беше кой знае какъв проблем, тъй като потребителите все още не бяха свикнали на днешните „глезотии“, превръщащи изображението на една компютърна игра в неразличима с реална снимка. Ако трябва да дадем пример, предполагам, че всеки е виждал сравнителните снимки в играта Crysis, при които наистина понякога е трудно да се отличи реалността от 3D изображение.

Постигането на подобно ниво на реализъм доведе до момент, в който потребителите вече са склонни да жертват част от производителността на системата, за да получат по-реалистично изображение. Логичната следваща стъпка след използването на текстури и модели с висока резолюция е да се открие метод, чрез който да се премахне „назъбеността“ на линиите в изображението. За да стане това, се използват различни техники, обединени под общото име Antialiasing.

 

Supersampling

Един от най-елементарните методи за прилагане на Antialiasing е използването на supersampling. При тази техника изображението се рендерира при по-висока разделителна способност от тази, която ще се използва, като използваните стойности могат да са от 2 до 8 или дори 16 пъти по-висока резолюция. Както можете да се досетите, използването на антиалайсинг от типа на 4х или 8х означава, че изображението е получено от такова с първоначална 4 или 8 пъти по-висока разделителна способност.

След като се рендерира кадърът с по- висока резолюция, от който ще получим суперсемплираното изображение, всеки пиксел, който ни интересува (явяващ се гранична точка между два или повече цвята), се подлага на обработка. За да получим цвета на пиксела в крайното изображение (което е 2, 4, 8 или 16 пъти по-малко), вземаме данните за цвета от няколко пиксела, всеки от които се намира в областта, която ще оформи крайния пиксел след намаляване на резолюцията. Броят на семпълите, които ще вземем, зависи от много неща, като зависимостта е, както можете да се досетите, „повече пиксели, повече (и съответно по-бавна) обработка“. Впрочем тук ще вмъкна една подробност, която ще е от значение по-късно – техниката на суперсемплиране влиза в употреба едва след полагането на текстурата върху полигона, който ще обработваме. Казано с други думи, прилагането на SSAA става чак след като изображението е готово и обработено в съответната х2-х16 по-голяма резолюция.

 

Местоположението на пикселите, които ще използваме, се дефинира от предварително избран алгоритъм, като съществуват редица възможности. Според избрания от програмистите алгоритъм началните пиксели могат да се подберат както произволно без никакви ограничения от строго определени области от зоната, която ни интересува, така и да се вземат под определена форма (решетка, кръст, завъртян куб и др.).

След като най-сетне се „сдобием“ с желаните пиксели от зоната, която ще представлява крайния пиксел в редуцираното изображение, тяхната обработка е съвсем елементарна. Най-просто казано, това, което се прави, е усредняването на стойностите на техните цветове – сборът от цветовете (по-точно цветовият код) на всички пиксели се дели на техния брой и като краен резултат получаваме цвета на интересуващия ни пиксел в крайното изображение.

Макар тази техника да дава доста добри резултати като качество на крайното изображение, тя все пак притежава един много съществен недостатък – цената, на която става нейното прилагане. Използваното х-кратно увеличено изображение с висока резолюция буквално задръства както графичния процесор, така и неговите канали за трансфер на информация към фрейм буфера или паметта на видеокартата, което е нежелан ефект. За да се заобиколи този недостатък на техниката, се налага да се разработят допълнителни алгоритми, които да се приложат върху процедурата.

Multisample Antialiasing

Както вече отбелязахме, макар и да има добър резултат върху визията, използването на суперсемплиране има доста по-неприятен ефект върху производителността на системата. За да се избегне това, програмистите разработват техника за антиалайсинг, носеща името мултисемплинг, при която частично се избягват проблемите с намаляването на производителността. Докато при суперсемплирането се обработват всички параметри на изображението (координати на пиксела, цветови стойности, Z-буфер и т.н.), при мултисемплирането се пристъпва към обработка само на данните, които са от значение.

Най-просто казано, при определяне на координатите на всеки пиксел в Z буфера му се записва информация за това дали той се вижда на моментната сцена или е закрит от намиращ се пред него обект. Ако той е скрит зад някакъв предмет, логично пикселът не би се виждал на обработваната картина, а следователно не би имал нужда и от прилагане на антиалайсинг. Благодарение на тези „спестени“ пиксели, които не се подлагат на обработка, употребата на multisampling AA успява да постигне както задоволително качество на антиалайсинга (близко до това на суперсемплирания АА), така и по-добро бързодействие. В допълнение към това мултисемплирането е техника, която за разлика от суперсемплирането се прилага преди фазата на полагане на текстури върху полигоните. С други думи, всеки пиксел, чиято стойност се иззема от изображението с висока резолюция, има само по една стойност за цвета вместо 4, както е при SSAA. В допълнение към това, за разлика от SSAA при MSAA се проверява кога има смисъл от обработка на текущия пиксел, тъй като, когато той е „лице“ само на един полигон, не би имало смисъл от антиалайсинг.

 

Тъй като всяко нещо в живота си има положителна и отрицателна страна, използването на MSAA няма как да бъде изключение. Положителните черти на MSAA се крият в отличното съотношение между цената, която се плаща от системата (бързодействие), и крайния видим ефект. Ръбовете и границите на 3D полигоните, които често пъти се явяват най-лесно забележимите носители на „ефекта на назъбване“, винаги са обработени и подложени на антиалайсинг. В допълнение към това се избягва излишното натоварване на фрейм буфера и шините за комуникация, тъй като се прехвърлят по-малки обеми от информация.

Недостатъците на MSAA се крият в самия му принцип на работа, тъй като не е изключено да се пропусне обработката на важни и лесно отличими полигони, които да останат назъбени. Причината за това се крие именно в Z буфера, в който се записва кога даден обект се крие зад друг такъв. Ако засенчващият обект е прозрачен (например прозорец, решетеста ограда, пролука в оградата и т.н. модели, използващи прозрачни текстури), от една страна, той записва в Z буфера, че намиращите се зад него полигони са невидими.

От друга страна обаче, след полагането на прозрачните текстури се оказва, че същите тези обекти все пак са видими. Проблемът възниква, когато се нанесе текстурата върху полупрозрачния обект. Когато тази текстура е напълно прозрачна, това не е проблем, но когато тя имитира даден обект (решетеста ограда, прозорец), възниква затруднение. То произтича от това, че самата текстура не притежава фактически 3D свойства и не може да бъде „хваната“ от алгоритмите, прилагани при MSAA. За да се избегне този проблем, както AMD/ATI, така и Nvidia прилагат собствени техники, отчитащи рязката промяна на цветовите компоненти за всеки от вече текстуризираните пиксели, след което локално за областта прилагат мултисемплиране. За съжаление обаче, макар и да се справят отчасти с проблема, тези техники представляват допълнително „горещо“ място във веригата, допринасящо за снижаване на производителността.

 

Coverage Sample и Custom Filter Antialiasing

След като става ясно, че използването на класическото мултисемплиране може да се оприличи по-скоро на пилеене на ресурси, както АМD така и Nvidia разработват нови схеми на прилагане на антиалайсинг. Предложената от AMD техника носи името Custom Filter Antialiasing (CFAA), докато схемата на Nvidia е наречена Coverage Sample Antialiasing (CSAA).

При CFAA AMD изхождат от идеята, че освен различните цветове на взетите семпъл пиксели (от изображението с висока резолюция) от значение е също така и на какво разстояние се намират те от истинския пиксел, който ще се използва в крайното изображение. Както можем да се досетим, разработеният от AMD алгоритъм взема под внимание не само цвета на примерните пиксели, но и тяхното разстояние от центъра, като по-близките са един вид „с предимство“ пред намиращите се по-далеч. Както можем да се досетим, прилагането на подобна техника изисква наличието на връзки между отделните блокове в графичното ядро, каквито стават налични едва в серията R6хх и R7xx.

За разлика от CFAA на AMD Nvidia подхождат по друг начин към реализирането на собствената си разработка. Подобно на въвеждането на мултисемплирането, при което обработката на образа се извършва преди нанасянето на текстурите, при CSAA идеята е да се спестят данните за пиксели, които не се виждат в образа. При класическата SuperSampling AA обработка системата съхранява по един семпъл за Z буфера и текстурата. Увеличаването на режима от 2х към 16х увеличава пропорционално и тези семпъли, което води до срив в производителността. Въвеждането на MultiSample AA спестява нуждата от съхраняване на семпъли за текстурите, а по подобен начи постъпва и CSAA – намалява броя на семпълите, съхранявани в режимите над 8хАА.

Според Nvidia режими от типа на 16хMSАА имат неоправдано висок отрицателен ефект върху производителността за сметка на подобрението във визията, което предлагат. Използването на 16xCSAA позволява на потребителите да се възползват от визия, близка до тази на 16xMSAA, като влошаването на производителността се запазва сравнително ниско, близко до това на 8хMSAA.

 

Temporal Antialiasing

За финал оставих един малко по- различен режим на антиалайсинг, чиято разработка принадлежи на ATI/AMD и може да се използва единствено при нейните видеокарти. Става въпрос за т.нар. Temporal Antialiasing, при който се постига визуален ефект, наподобяващ по-високо ниво на антиалайсинг. Идеята на Temporal AA е, че човешкото око не може да възприема кадри с честота над 25-30 кадъра в секунда. Когато компютърът използва мощна видеокарта, той може да се справя с игровите заглавия без проблеми и никак не са редки fps със стойности от типа на 60-120+ и нагоре. Според AMD това позволява на системата да използва нещо като „временен“ антиалайсинг, влизащ в сила само при високо ниво на fps. Този временен АА може да мени своята реална стойност, като крайният визуален ефект според AMD е като от активирането на 12хАА.

Казано по-просто (и не съвсем вярно), при 60 fps Temporal Antialiasing позволява на системата да направи следното: за първите 30 четни кадъра от секундата тя може да приложи 2х мултисемплиран антиалайсинг, а за оставащите 30 нечетни кадъра да подбере и използва нови, променени семпъли от суперсемплираното изображение, отново в режим 2хMSAA. Ефектът от подобна рязка смяна на семпълите за човешкото око ще е напълно незабележим (при подобно ниво на кадрите в секунда), но пък визуално резултатът ще наподобява използването на 4х или дори 6х MSAA.

За съжаление използването на техниката Temporal Antialiasing си има и някои отрицателни страни, по-важните от които са нуждата от по-висок фреймрейт и постоянно активиран V-Sync и ниво на fps, равно или по-високо на него. Причината за това се крие в самата същност на принципа, тъй като динамичната промяна на семпълите се отразява на крайния АА ефект. С други думи, ако се загледаме в някоя гранична повърхност при по- нисък фреймрейт, ще можем да видим трептенето на пикселите и промяната на техните цветове, когато системата се опитва да приложи антиалайсинга.

Макар и да съществува от доста време, едва напоследък Temporal AA започва да придобива по-сериозно значение. Основната причина за това се крие във все по-широкото навлизане на LCD дисплеите, чиито пиксели за много по-инертни от тези на CRT мониторите. Именно поради тази инертност това слабо „вибриране“ на пикселите в изображението ще остане скрито от потребителя, което може би ще даде нов живот на тази техника на AMD.


Съдържание: