2010. július 9., péntek

Mit tud majd a DirectX 11

Akármilyen géppel vagy konzollal rendelkezzünk is, elvárjuk, hogy évről évre szebb játékok lássanak napvilágot. Egyre divatosabban használjuk a "shader" és "szűrés" kifejezéseket, minden eltelt nappal kritikusabbá válunk, és csak reméljük, hogy lassan eljön a nap, amikor már meg se lehet különböztetni a valóságot a játéktól. De vajon ez mikor következik be?

Mielőtt még elmerülnénk a DirectX 11 mélységeiben, nem árt egy kis technikaóra, hogy könnyebben érthető legyen, miért is várunk olyan sokat a Microsoft legfrissebb üdvöskéjétől. A videokártyák grafikus processzorai (GPU-i) abban különböznek a számítógép agyának is nevezett processzoroktól (CPU-któl), hogy míg utóbbiakat már évek óta szigorú szabványok alapján kell felépíteni, addig előbbiekre mindez nem igaz. Akármilyen architektúrát alkalmazhatunk, a lehetőségek határa a csillagos ég. Ahhoz viszont, hogy mindez működjön, szükség van egy alkalmazási felületre (API-ra), ami bármilyen videokártyát képes felismerni, s mellyel kommunikálva annak meghajtó programja kihasználhatja az eszközben rejlő lehetőségeket. Ez az API tehát létfontosságú a gyors és mindenki számára elérhető 3D-s grafika kiszámításában. Jelenleg két uralkodó típus osztja meg egymással a piacot. Az egyik az OpenGL, melyet az egyszeri játékosok főként az id FPS-eiből ismerhetnek (az összes teljesen 3D-s id motor arra épült), a másik pedig a tortából jóval nagyobb szeletet kivágó DirectX.


Mivel utóbbi nem szorul különösebb bemutatásra, legyen elég annyi, hogy ez manapság a legelterjedtebb platform. A forradalmi 8.1 után (Az übergéniusz, John Carmack szerint se készült azóta innovatívabb felület.) megérkezett a 9, mely bár koránt sem volt akkora durranás, mégis átvette a korábban uralkodó 7 helyét a játékvilágban. A DirectX 10-re a Windows Vista megjelenéséig várnunk kellett, ám mikor végre kijött, nagyon megosztotta a közönséget. Kihasználni a mai napig nem tudta senki, holott lényege nem is a grafikai tupír, hanem a programozást leegyszerűsítendő felépítésében rejlett. Ennek ellenére még most is a DirectX 9 a vezető, s még egyetlen olyan játék sem látott napvilágot, mely kizárólag a DirectX 10-re épült volna.


A Microsoft látva a kvázi sikertelenségét, nem is oly rég bejelentette API-ja 11. generációját, ami a 10-hez hasonlóan most is egy új operációs rendszer keretében érkezik majd (Windows 7). De vajon jó lesz-e ez nekünk? Szükségünk van-e még egy kihasználatlan felületre, avagy komoly forradalom készül? Bemutatómban igyekszem közérthetően megismertetni a DirectX 11 legfontosabb tulajdonságait és újdonságait.

Szebb jövőt

A DirectX 10 legnagyobb buktatói pont az őt teremtő cég ostobaságaiból fakadtak. Csak és kizárólag Windows Vista operációs rendszer mellett volt elérhető, egyetlen játék sem használta ki, a driverek nem támogatták rendesen, és a tetejébe még a beígért Flight Simulator patch sem érkezett meg időben. Szerencsére az óriás tanult a hibáiból, így a DX 11 Vista alatt is elérhető lesz, jóval nagyobb táborra szert téve már rögtön a megjelenésekor. Mindez persze mit sem érne, ha nem lehetne rendesen programot írni rá, de a birtokunkban lévő eddigi információk és a novemberben elérhetővé tett DirectX SDK DX 11-et is tartalmazó elemei kellően meggyőzőek. A legnagyobb előnye a DX 11-nek a DX 10-zel szemben, hogy míg utóbbi egy abszolút új irányba terelt fejlesztés volt, addig a 11 nagyon sok elemében hasonlít a DX 10-hez.



Ahhoz, hogy ezt megértsük, tudnunk kell, hogy is működik egy átlagos API. Legfontosabb feladata természetesen nem más, mint megmondani a hardvernek, hogyan számolja ki a 3D-s világ szintén 3D-s elemeit és miként rajzolja ki őket a képernyőre. Ezt a folyamatot hívjuk pipeline-nak. A DirectX 10 sok forradalmi lépést tett a dolgok egyszerűsítése érdekében, s utódja mindezeket egy az egyben át fogja venni. Amiben mégis más lesz, az a vertex számítások után beiktatott három új tesszellációs lépcsőfok. A tesszellátor feladata a térgeometriai formák apró elemekre bontása, hogy valami bonyolultabb épülhessen fel belőlük, alapanyagot, azaz számítási kapacitást spórolva ezzel. Továbbá megjelenik még a Compute Shadernek nevezett, minden tekintetben forradalmi eljárás, mely lehetővé teszi a fejlesztők számára, hogy magát az API-t megkerülve sajtoljanak ki extra erőforrásokat a GPU-ból. Ennek részletezésébe most nem mennék bele, de mindez magyarra lefordítva annyit tesz, hogy sokkal kevesebb munkával jóval nagyobb teljesítmény érhető el a DirectX 11 használata közben, egyre közelebb hozva a valóságos grafika álmának megvalósulását.


Joggal tehetjük fel a kérdést, hogy miért is jó nekünk mindez, ha olyan 70-30%-os arányban még mindig a DirectX 10.1-et kapjuk meg új köntösben? A válasz egy üzletileg kétségkívül zseniális ötletben rejlik. A 11-es Microsoft API megjelenésével nem csak az új csúcskártyák tulajdonosai jutnak előnyökhöz, hanem a mostani, DX 10.1-es VGA-k felhasználói is! Köszönhetően a 11 operációs rendszerhez és driverekhez szorosan kötődő programozási hátterének, megfelelő támogatással a mostani kártyák teljesítménye is nő. A legszebb az egészben, hogy ez még a meghajtókat programozó csapatoktól sem kíván túl nagy megerőltetést, mert a két platform közti átjárásnak hála pofonegyszerű lesz 10-ről 11-re, vagy épp fordítva portolni. Aki tehát nemrégiben vette meg HD4870 X2-esét, nem kell elkeseredjen, mert jó ideig szórakozhat még vele, különösebb kompromisszumok nélkül is. Meg kell még jegyezni, hogy a DX 11 a 10-től eltérően az összes régebbi kártyával együttműködik majd.

Nem csak gyorsabb, sokkal szebb is!

Ugyan a több szálon futó (angolul csak multi-threaded) programozás lehetősége már évtizedek óta adott, a fejlesztők csak nemrégiben kerültek vele konkrét kapcsolatba, hála a többmagos processzoroknak. A Microsoft felismerte az ebben rejlő lehetőségeket, s most végre úgy tűnik, élnek is velük. A DX 11 nem csak a grafikus engine több szálra való installálását támogatja, de maga a játék belső motorja, forráskódja is profitálhat belőle. Mi több, ez működik majd DirectX 10-zel felszerelt, de DX 11-et telepített gépeken is, noha elképzelhető, hogy egyes esetekben a gyorsulás helyett lassulást eredményez. Manapság még nem nagyon létezik olyan motor, ami komolyan szükségessé tenné ezt a felhasználási módot, de a jövő megpróbáltatásai (CryEngine 3.0, vagy a már régóta készülő Unreal Engine 4.0) napról napra közelebb vannak, így nem árt a felkészülés.



Ha pedig már a jövő, akkor új shaderek. A Microsoft's High Level Shader Language (azaz HLSL) a DirectX 11-gyel az 5.0-ás verziószámhoz érkezik. Mivel a HLSL felépítése mindig emlékeztetett a C programnyelvére, már épp ideje volt az osztályok és interfészek beimplantálásának. Akik egy kicsit is ismerik a programozást, tudják, hogy milyen nehéz nagy adategységekkel dolgozni, ha nincs objektumorientált háttér. Ez a helyzet a mai játékok shaderigényeivel is. A kódsorok nagyok, újra és újra be kell illeszteni őket, ami lassítja a motort és elnyújtja a fejlesztés fázisait. Az új megoldásnak hála viszont minden egyes fontosabb shader leírható lesz egy osztályban, mely később bármikor meghívhatóvá válik a forrásból. Ezzel együttvéve a mutatókat is száműzik a nyelvből, így a memória sem kap felesleges terhelést.

Végszó

Ugyan sok dologról nem ejtettem szót, és lenne még bőven írnivaló a DirectX 11-ről, de szándékosan fogtam vissza magam. Egyrészről már így is picit túl technokrata lett a megközelítés, továbbá pedig úgyis csak az elméletek és elképzelések vizein eveznénk, mert ettől fogva az ismereteink már nem mind bizonyítottak. Nincs tehát jobb dolgunk, mint várni, hogy a Windows 7 elvileg jövő év eleji premierjekor az új API berobbanjon a köztudatba. Ami viszont mindenképp biztos, az a DX 11 innovációja. Ilyet már a 8.1 óta várunk, s ha csak nem rontanak el valamit nagyon a Microsoft fejlesztői, nem is fogunk csalódni. Csak jelenjen már meg a Crysis 2, hogy láthassak egy multi-threaded dzsungelt!

0 megjegyzés :

Megjegyzés küldése