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ű
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).