Kik vagyunk mi? Magdics Milán Umenhoffer Tamás cg.iit.bme.hu
Kik vagytok Ti?
Mi a tárgy célja? Unity alapjainak megismerése Gyakorlati ismeretek Ahol lehet, megfelelő elmélet Alapvető programozási ismeretek C# (szkript) Unity-n belüli használata A félév végére egy egyszerű 2D, oldalnézetes mászkálós/ugrálós játék létrehozása
Milyen témákat érintünk? Unity alapjai 2D grafika alapjai Sprite-ok, sprite animáció 2D fizika kontroll Játékmenet programozás GUI
Értékelés Órák látogatása Házi feladat v. vizsgafeladat Házi feladat: Egyszerű 2D játék Grafika Irányítás Fizika UI Játszható “demo pálya” Vizsga: Unity kezelés és programozási ismeretek mérése gyakorlati feladattal
SPASIM 1974 Maze war 1974
1991, Wolfenstein3D
1993, Doom
1996, Quake
1997, Quake 2 I(x,V)=I LightMap +I e (x,V)+ I(L) f r (L,x,V) cos ’
1999 Quake 3, Unreal Tournament
2004 Doom3 I(x,V)=I e (x,V)+ I(L) v(x, L f r (L,x,V) cos ’
2004 Half-Life 2 I(x, )=I e (x, )+ I(h(x,- ’ , ’) f r ( ’,x, ) cos ’d ’
….
Játékfejlesztés szereplői Design Programozói részleg Művészeti részleg Hang részleg Menedzsment Minőség biztosítás Üzleti részleg Utóélet...
Design Vezető designer (Lead Designer) Játékmenet tervező Pálya/küldetés tervező Történet és párbeszéd tervező
Programozói részleg Vezető programozó Játék mechanika/játékmenet programozó 3D grafikai programozó AI programozó GUI programozó Fizika Audio Eszköz programozó Pályaszerkesztő programozás Hálózat programozás
Művészeti részleg Art director Concept artist 2D artist/interface designer 3D modellező Karakter modellező Textúrázó Animáció / MOCAP Forgatókönyvezés
Hang részleg Szinkron Hang effektek Zene
Management Line producer Associate producer Studio Head
Minőségbiztosítás Kiadó minőségbiztosítási részlege Vezető Fő csapat Multiplayer csapat Friss csapat Kompatibilitási csapat Lokalizáció (pl. magyarítás) Béta tesztelés Béta tesztelő Béta tesztelő program manager
Üzleti részleg Üzletfejlesztés Üzletfejlesztési igazgató(business developement executive) Studió vezető Ügyvédek Licenszelés Eladás/Marketing Kézikönyv Gyártás
Egyéb Hardver gyártók Utóélet
Játékmotorok Nagyon összetett, bonyolult szoftvercsomag Jól átgondolt (?), általános, újrahasznosítható szoftverkomponensek Játékobjektumok 2D / 3D modellek Fényforrások stb. Egyéb segédeszközök (tool-ok) Pályaszerkesztő (level editor) Modellező szoftver pluginek stb.
Játékmotorok feladata, elvárt funkciók Rajzolás: Erőforrások kezelése Videokártya vezérlés Grafikai algoritmusok
Játékmotorok feladata, elvárt funkciók Animáció: Fizikai szimulációk Karakter animáció Részecskerendszerek Kamera mozgatás
Játékmotorok feladata, elvárt funkciók Multimédia: Hangok Átvezető videók
Játékmotorok feladata, elvárt funkciók GUI: Menük Eseménykezelés
Játékmotorok feladata, elvárt funkciók Mesterséges intelligencia: Állapotkezelés Útvonaltervezés
Játékmotorok feladata, elvárt funkciók Scriptelés: Játéklogika és objektumok viselkedésének egyszerű szerkesztése
Játékmotorok feladata, elvárt funkciók Többszálúság, párhuzamosság támogatása
Játékmotorok feladata, elvárt funkciók Procedurális tartalomgenerálás Globális illumináció Növényzet Városi környezet Véletlen pályák …
Játékmotorok feladata, elvárt funkciók Hálózati mód
Játékmotorok feladata, elvárt funkciók Multiplatform támogatás
Játékmotorok feladata, elvárt funkciók (Asset store:) Mások által gyártott tartalom könnyű elérhetősége Saját munka könnyű/egységes publikálása
Rajzolás (rendering) – erőforráskezelés Háromszög modellek, textúrák, shaderek betöltése fájlból A fentiek betöltése/törlése a processzor/videokártya memóriájába Erőforrás megosztás játékobjektumok között 200 egyforma orkhoz ne tároljuk a modellt 200-szor Rajzolási „célpontok”: textúrába rajzolás, bufferek
Rajzolás (rendering) – anyagok/shaderek Anyagjellemzőket a kód újrafordítása nélkül tudjuk szerkeszteni Pl. material script Pl. D3D Effects system Anyagok objektumokhoz rendelése Anyagok beállítása kirajzolás előtt
Rajzolás (rendering) – videokártya vezérlés CPU – GPU kommunikáció minimalizálása Rajzoló hívások, állapotváltozások minimalizálása Rajzolás sorok Rendezés material, textúra stb. szerint Példányosítás
Rajzolás (rendering) – láthatóság Ami nem is látszhat a képen, azt ne rajzoljuk ki Grafikai algoritmusok ennek támogatására
Render motor – példák Ogre3D Crystal Space Genesis3D Irrlicht Truevision3D …
Animáció – fizikai animáció Egy virtuális világnak nem csak valószerűen kell kinéznie, úgy is kell viselkednie! Merevtest mechanika Ütközésdetektálás és válasz Csuklók, motorok Ruha szimuláció Folyadék szimuláció Haj szimuláció
Fizikai könyvtárak – példák Bullet ODE – Open Dynamics Engine NVIDIA PhysX Box2D
Animáció – karakter animáció Morphing Bemenet: csúcspont koordináták kulcspontokban Csontváz animáció Bemenet: csont orientáció kulcspontokban Bőrözés Mi vezérli? Motion capture Fizika (pl. rongybaba) Inverz kinematika kombinálás (blending)
Audio Audio fájlok betöltése Lejátszás Hangok keverése Effektek Digitális jelfeldolgozás Távolság szerinti csillapodás, Doppler, visszhang 3D audio! (effektekkel)
Audio könyvtárak - példák OpenAL XAudio2 IrrKlang, FMOD, SDL_sound
GUI Menük, gombok, csúszkák, kijelölőgomb, választó gombok, állapot jelzők stb. Könyvtárak, pl: MyGUI CEGUI
AI Véges állapotgép tétlen/figyel/agresszív/menekül/… Útvonaltervezés Legrövidebb út keresése Formációk, együttműködés Stratégia Bonyolultabb AI algoritmusok
Szkriptelés Magas szintű viselkedés specifikáció Inkább tervezőknek mint programozóknak Interpretált nyelv, nincs előre fordítva Futási időben változtatható Könnyebben olvasható nyelvek Rövid kódrészleteknél ez OK
Szkript nyelvek Lua Egyszerűbb, gyorsabb, kisebb Kiválóan használható konfigurációra, jelenet felépítésre Python Sok funkció Jobb matek, szövegfeldolgozás
Tartalom Generálás Offline eszközök (pályaszerkesztőben) Globális illumináció (fénytérképek - lightmap) Terep generálás (terrain) Növényzet Futási időben Részletességi szintek Véletlen pályaelemek
Hálózat Kommunikáció client/server Adat tömörítás Broadcasting Üzenetek elvesztésének kezelése, sorrendiség Extrapoláció/Predikció Interpoláció Példa könyvtárak: OpenTNL (Torque Network Library) RakNet
Rakjuk őket össze A játékobjektumok minden alrendszerrel kapcsolatban vannak Az objektum reprezentációknak ezeket a funkciókat szét kell tudni választani Könnyebb bővíthetőség Komponens alapú modell (Unity)
Játékmotorok Unreal 4 Grafikailag sokat nyújt Lassabb tanulási görbe Sok beépített szolgáltatás (pl blueprint) Unity 5 Könnyű kezdés Nagy közösség, nagy asset store Plusz szolgáltatások fizetősek Valve Source 2 (stabil, gyors) Nem sok gyakorlati tapasztalatról tudunk CryEngine Grafikailag top Lassu tanulási görbe Korona SDK 2D Saját motor Új technológia Speciális szolgáltatások
Köszönjük a figyelmet!