DirectX 9.0 - A leghardverebb szoftver

Vágólapra másolva!
A játékosok és játékfejlesztők valóságos megváltóként várták a DirectX 8.0 verzióját, amely először tette lehetővé, hogy az addig fixen a grafikus lapkába huzalozott funkciókba a fejlesztők beavatkozzanak. Azóta nagyjából egy év telt el, és közeleg a 9.0-s DirectX.
Vágólapra másolva!

Az újítások jelentős része azért született, hogy a programozók könnyebben hozhassanak létre az eddigieknél még látványosabb effektusokat és háromdimenziós alkalmazásokat. A felhasználók persze a végeredményre, az alkalmazásokra kíváncsiak: a DX9-re épülő programok azonban csak fél év múlva jelennek meg. Cikkünkben a teljesség igénye nélkül mutatjuk be a DirectX 9.0 új technológiáit, elsősorban a háromdimenziós grafikával kapcsolatos forradalmi megoldásokra koncentrálva.

Vertex Shader 2.0

Először is két alapfogalmat kell tisztáznunk: a shaderek (pixel shader, vertex shader, magyarul: pixel-, illetve vertexárnyékolók) olyan programocskák, amelyek segítségével az alkalmazásfejlesztők leírhatják, mi történjen a háromdimenziós világ objektumaival. A vertex pedig a háromdimenziós világ legkisebb építőegysége. Nem más, mint egy pont a térben, amelynek nemcsak x, y és z koordinátája, hanem normálvektora (a vertexben találkozó poligonok normáljainak eredője), textúrakoordinátái, szín- és fényességadatai is vannak. Annak ellenére, hogy a vertex a háromdimenziós világ legkisebb építőeleme, nagyon sok adatot tárol. A vertexárnyékoló programok segítségével megváltoztathatóak a vertexek koordinátái, így helyet vagy helyzetet változtathat az objektum, esetleg át is alakulhat. Manipulálhatók a szín- és textúraadatok, ezzel többek között látványos tükröződéseket, fénytörést vagy felületi érdességet (bump mapping) lehet létrehozni. A DirectX korábbi (9.0 előtti) változataiban a vertexárnyékoló programok valójában nem voltak mások, mint rövid utasítássorozatok. (A DirectX 8.x esetében a vertex programok legfeljebb 128 utasítást tartalmazhattak, a DX9 esetében már 1024-et.)

Pixel Shader 2.0

Gyakorlatilag a textúrák, fények és színek adatait felhasználva kirajzolják elénk a 3D-s világ látványát. A DirectX 8 megjelenésekor a programozók el voltak ragadtatva a Vertex Shader "nyelvtől", a Pixel Shadert azonban számos kritika érte, sokak szerint nem volt igazán hatékony, amolyan "félmegoldásnak" tartották. Korábbi változatainak legfőbb hibájaként rótták fel az egyszerre kezelhető textúrák alacsony számát, illetve a programok maximális hosszát. A 2.0 mindkét tekintetben messze felülmúlja elődjét, hiszen az eddigi 6 textúra és legfeljebb 128 utasítás helyett már akár 16 textúrát és 160 utasítást is képes feldolgozni. A cél természetesen itt is az volt, hogy minél komplexebb, a valóságot minél inkább megközelítő effektusokat lehessen létrehozni.

128 bites, lebegőpontos színábrázolás

Bizonyára minden olvasónk tudja, hogy a számítógépes grafikában az egyes képpontok színeit a három alapszín (vörös, zöld, kék) árnyalataiból keverik össze. A DirectX 9.0 előtti érában egy képpont színét 32 bites egész számmal ábrázolták. Gyakorlott fejszámolók és a kettes számrendszert ismerők most valószínűleg rávágják, hogy ez közel 4,3 milliárd különféle árnyalatot jelent. Sajnos ez nem ilyen egyszerű, ugyanis 32 bites színábrázolás esetében az egyes alapszínek árnyalataira csupán 8-8 bit jut, 8 biten pedig az átlátszóságot ábrázolják - így "csak" 16,8 millió szín ábrázolható.

A 32 bites színábrázolásnak azonban nem ez a legnagyobb rákfenéje. Képzeljünk el egy bonyolult pixelprogramot, amelynek során egy képpont színét összeadással, kivonással, szorzással, osztással, hatványozással és gyökvonással határozzák meg. Ez gyakran tört végeredményhez vezet, mivel azonban a színek komponenseit fixpontos formátumban ábrázolják, kerekítést kell alkalmazni. Emiatt jelentős lehet a kerekítésekből adódó pontatlanság. A DX9 esetében lehetőség van 64 vagy akár 128 bites, lebegőpontos - tehát sokkal pontosabb - ábrázolásra is. Ráadásul törteket is használhatunk, így a feldolgozás közben nem vész el értékes színinformáció.

Gazdag színek, erősebb fények

32 bites színábrázolás esetében a vörös, zöld és kék alapszíneknek 256 különféle árnyalata áll rendelkezésre a színek megjelenítéséhez, ami - figyelembe véve az emberi szem érzékenységét - elegendőnek mondható. Ám csak 256 különböző árnyalat áll rendelkezésre a fényesség leírásához, vagyis a vaksötét és a vakító fény között csupán 254 különféle átmenet létezik, holott az emberi szem ennél nagyságrendekkel többet képes megkülönböztetni. Ezért az erősen változó fényességű jelenetek a számítógépen alulexponáltnak vagy túlexponáltnak, túl sötétnek vagy túl világosnak tűnnek. A DX9 lehetővé teszi egy olyan 32 bites, nagy pontosságú frame puffer mód használatát, amelynek segítségével négyszer több fényességértéket lehet ábrázolni, így sokkal természetesebbnek tűnő látvány hozható létre.

Ez így gömbölyű

Letöltés: DirectX 8.1b/szoftverbazis/seged/rendszer/dx81ben9x.html

A DirectX 8-ban vezették be először az úgynevezett N-patch felületeket, amelyek révén az objektumok széleit részletesebbé, gömbölyűbbé, természetesebbé lehetett tenni. Az eljárás lényegében a háromdimenziós objektumot alkotó háromszögeket az oldalak továbbosztásával még kisebb háromszögekre bontja fel, majd ezek rendezésével részletesebb és finomabban ívelt objektumot hoz létre. A DX9 továbbmegy egy lépéssel: a displacement mapping nevű eljárás révén a háromszögek felbontása, darabolása és mozgatása nem geometriai egyenletek, hanem egy textúra alapján történik.

Bár a DX9 végleges változata csak októberben jelenik meg, egy videolapka máris van a piacon, amely teljeskörűen támogatja azt: az ATi Radeon 9700. Aki azonban máris rohanna a boltba, annak el kell mondanunk, hogy a jövő év eleje előtt szinte biztosan nem jelenik meg olyan alkalmazás vagy játék, amely DirectX 9.0-ra épül. Egyelőre érdemes spórolni, már csak azért is, mert az nVIDIA karácsony környékére ígéri saját DX9 gyorsítóját (egyelőre NV30 kódnéven ismeretes).