Komponensalapú játékmotor-tervezés

OData támogatás
Konzulens:
Dr. Szécsi László
Irányítástechnika és Informatika Tanszék

A modern 3D motorok, melyek korunk legnagyobb játékai mögött állnak elképesztő mennyiségű matematikai és programozói tudást igényelnek, és átfogó megértésük csaknem lehetetlen feladat. Komoly tapasztalattal rendelkező vezetők sokfős csapataikkal építik azokat a meghökkentő szoftverarchitektúrákat, melyek a grafikus hardvert végül összekötik a játéklogikával. Egy játék hihetetlen mennyiségű részből áll össze függetlenül attól, hogy technikai (modellek, textúrák, hangok, szkriptek, MI...), vagy egyszerű felhasználói szempontból (történet, karakterek, helyszínek, tevékenységek...) tekintünk rájuk. A mai nagy költségvetésű játékokba zsúfolt tartalom mennyisége egészen lehengerlő. Ami lehetővé teszi játékfejlesztők számára, hogy ilyen hatalmas világokat készítsenek, azok a komplex szoftverrendszerek melyeket egyszerűen csak játékmotoroknak hívunk.

Diplomamunkám keretében bemutatnám a modern motorok gyártásának néhány aspektusát DirectX 11 programozói környezetet és C++ programozási nyelvet használva.

Egy motor nagy és összetett rendszer. A saját megvalósításom során moduláris megközelítést használtam, amiben a grafikus motor a teljes szoftverarchitektúrának csupán egy része. Egy ilyen architektúra sikeres megvalósításához a kezdetektől fogva megfelelő eszközök szükségesek. Az első fejezet ezen eszközökről szól, konkrétan tehát a programozási paradigmákról és mintákról melyeket a rendszer megépítéséhez használtam. A rendszer áttekintő jellegű ismertetése során bemutatom az összes segítő alrendszert is, melyek a grafikus motort támogatják.

A második fejezet a komponens-alapú motorról szól. A motor bármilyen játéktartalom futtatásához szükséges alapvető funkcióinak áttekintése után kifejtem az egyes alrendszerek pontos működését. Ilyenek alrendszerek például az animáló/mozgató, fizikai szimulációt végző, erőforrás kezelő és entitás (játékobjektum) előállító modulok.

A harmadik és egyben utolsó fejezet témája a képernyőre rajzolás és annak hatékonysága. A render motor képességeinek (késleltetett árnyalás, simított árnyékok) leírása után olyan optimalizációs szempontokat fogok bemutatni, melyek egy grafikus motorban kritikusak. Az optimalizáció szemléltetése konkrét implementációkon keresztül történik. Az erről szóló alfejezetek az általam használt instancing, láthatósági vágás módszerek és egy saját algoritmus működésébe nyújtanak betekintést. Ez utóbbi algoritmus lehetővé teszi bizonyos rajzolási hívások csoportosítását és összefogását annak érdekében, hogy ne kelljen azokat többször beállítani vagy végrehajtani, ezáltal csökkentve a CPU és GPU közötti kommunikáció mennyiségét és növelve a rendering hatékonyságot.

Letölthető fájlok

A témához tartozó fájlokat csak bejelentkezett felhasználók tölthetik le.