Játékfejlesztés
Időpontok !!!MINDEN HÉTEN!!! Kedd 16:15-17:00 IL407 Szerda 14:15-15:45 IL407 ???
Követelmények Órák látogatása Házi feladat Vizsga Ebből kettőt kell teljesíteni…
Honlap http://cg.iit.bme.hu/portal/oktatott-targyak/jatekfejlesztes
Miről lesz szó? Modellezés - Blender Textúrázás - GIMP Animáció - Blender Grafika - Ogre3D Fizika – PhysX ??? GUI ??? ??? Hálózat ??? ??? Hangok ???
Miről lesz szó? Árnyalás, textúrázás, light map, árnyékok, bump map, shaderek (Cg) Csontváz animáció (sw / hw??) Arc animáció (sw / hw)?? Merevtest fizika (ragdoll??) Részecskerendszerek Speciális effektek…
Speciális Effektek
Történelem
Történelem 1973 1981
1991, Wolfenstein3D
1993, Doom
1996, Quake
1997, Quake 2 I(x,V)=ILightMap+Ie(x,V)+ S I(L) fr(L,x,V) cos’
1999 Quake 3, Unreal Tournament
2004 Doom3 I(x,V)=Ie(x,V)+ S I(L) h(x, L) fr(L,x,V) cos’
2004 Half-Life 2 I(x,w)=Ie(x,w)+I(h(x,-w’),w’) fr(’,x,) cos’dw’
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ő A játékot legelőször is meg kell tervezni. Ha a kiadó felvet egy ötletet, a fejlesztő cégnek egy vezető designert kell felmutatnia. Ez gyakran a fejlesztő cég vezetője, alapítója. Koordinálja a tervezőket, olyan mint egy rendező, nem kell az egész játékot neki megtervezni. Ő feladata, hogy eldöntse mi tartozik bele a játékba és mi nem. Játékmenet designer: általában programozói tapasztalata van. Lead designer, programozók és a pálya tervezők között helyezkedik el, koordinál. Pályatervező: a játékok kis talányok, megoldandó feladatok sorozatai. Ezek a tervezők gyakran programozók, scriptelők. Néha művészek, térképdarabokkal babrálva. Valamikor csak szövegesen terveznek. Történet és dialógus: egészen más, mint novellát írni. A játékok interaktív alkalmazások. Vezető designerrel sokat kell egyeztetni, hogy merre fusson a történet fonala, és a küldetés tervezőkkel is rengeteget kell egyeztetni, hogy mit lehet és mit nem, mit enged meg a technológia (pálytervező szoftver, scriptek stb.). Ezek a feladatkörök természetesen nem feltétlenül egy emberhez tartoznak, egy designer több részterület munkáját is lefedheti.
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 Sokak szerint az igazi tervezők mégiscsak a programozók és a művészek. A tervezők tervezgetnek, de a végső játék mégiscsak úgy néz ki ahogy azt a programozók és a művészek megcsinálják. A végső kép a designerek, programozók és művészek kollektív látomásaiból alakul ki. A programozók feladata a játék kódjának elkészítése: 3d motor, hálózat, ai stb. Általában a kódolási munkák miatt csúsznak a projektek. Ez jellemző a szoftverfejlesztésre általában. Nincs elég biztonságos kódolási struktúra. Ez persze folyamatosan fejlődik... Vezető programozó: általában a legtapasztaltabb programozó, a legnagyobb kihívást jelentő programozási feladatokkal birkóznak meg. Általában ők a projekt hősei (John Carmack). Általában sok programozó dolgozik egy projekten, akár 25 ember. Valakinek át kell látnia ezeknek az embereknek a munkáját és jelenteni tud a projekt vezetőség felé. Ezek az emberek a technical director-ok. Általában kevesebbet kódolnak, többet menedzselnek. A technikal director lehet a vezető programozó is, de előfordul, hogy külön embert igényel (a vezető programozó túl elfoglalt, nem érdekli a menedzsment v. alkalmatlan a menedzsmentre). Játék mechanika: a tervezők által megálmodott mechanikát önti kód formájába. Ez a játék nagy vonalú lényegét jelenti, mi történik a játékvilágban, milyen objektumok, fegyverek vannak, mit lehet csinálni a játékban. (Játékmenet programozás). Közép szintű programozást jelent. Általában a designerekkel gyakran érintkezik, ő rakja bele a „játékot” a játékba. Szórakoztató munka lehet. 3D: legmegbecsültebb poszt, erős programozói, matematikai tudást igényel. Erről sokat tudnánk még beszélni, de találkoztunk már és találkozni is fogunk vele a tanulmányaink során. Mesterséges intelligencia programozás: folyamatosan erősödik, fejlődik. Script szerű működéstől a tanuló algoritmusokig. Az igény nagyban függ a játék műfajától. GUI: panelek, HUD elemek, menuk. GUI könyvtárak ismerete szükséges (ez lehet saját fejlesztésű). Sok gyakorlatot igényel, nehéz jól csinálni. Audio. Viszonylag kis volumenű munka a jól használható könyvtáraknak köszönhetően. Eszköz: (akár 50%-a a programozási feladatoknak ez lehet).
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 Kezdetben a programozó és a művész egy ember volt. Később ezek a szerepek elváltak. Manapság igen nagy mennyiségű digitális tartalomra van szükség egy játék elkészítéséhez. A különböző művészek képességei, tudása, szerepe alapján a következőképpen csoportosíthatók: Art director: a művészeti részleg vezetője. Függőségeket átlátja, felel a megfelelő időzítésért. Másik még fontosabb feladata az, hogy biztosítsa, hogy minden egyes elkészült alkotás egy egységes egész szerves része lehessen, minőségben, stílusban. A legtöbb tapasztalattal, megbecsüléssel rendelkező művész a csapatban, aki tud bánni az emberekkel. Concept artist: régen egy-két vázlat elég volt ahhoz hogy érzékeltessük a fő karaktereket, helyszíneket. Manapság, amikor egy-egy hibás művészeti alkotás (modell- háttér, textúra) súlyos pénzeket és erőforrásokat jelent, egyre nagyobb hangsúlyt fektetnek a látványtervekre. A fekete fehér rajzokat kiszínezik, és felküldik egyeztetésre az art direktorok, designerek, producerek felé jóváhagyásra. Ha ez megvan, kezdődhet a tényleges „gyártás”. 2D: klasszikus rajz és festészeti tudással bír. Hátterek, portrék, plakátok, website grafika, install grafika, marketing grafika stb... (Photoshop) Interface: tapasztalt 2D grafikus, néha programozó v. designer. Nagyon fontos szerep. Az egész játék arculatát meghatározza. 3D modellező: programozó-művész hibrid jelent meg, aki megbirkózott a technikai feladatokkal amit a modellezés jelent. Régebben nagyon nehéz volt jó ilyen munkaerőt szerezni (átcsábítani a filmiparból v. kiképezni), manapság a tanfolyamoknak és a modellező programok egyszerűsödésének köszönhetően már jobb a helyzet, de továbbra is fontos részét képezik a művészeti részlegnek. Karakter: speciális 3D modellező, akinek jó érzéke van ehhez. Textúrázó: 2x-3x lassabb folyamat a modellezésnél. Az elkészült modellt kell kifesteni. Animáció: karakter és egyéb animáció. Az egyéb egyszerű (pl. szélmalomkerék). Karakterek: kulcskeret animáció vagy/és MOCAP. Lassú folyamat, nagy gyakorlatot igényel. Storyboarder: kisfilmek (cinematik) készítésénél játszanak szerepet, sokszor concept artist-ok.
Hang részleg Szinkron Hang effektek Zene Kezdetben csak hang effektek voltak: sípolás, prüttyögés, brummolás.... Manapság már 5.1-es dolby surround hangzás, fimliparban is tevékenykedő zeneszerzők művei, és hivatásos szinkronszínészek szólalnak meg. A jó szinkron fontos része egy játéknak, életet lehel bele. Szinkronrendezővel érdemes dolgozni, tudni fogja honnan szerezze be a megfelelő színészeket, gondoskodik arról, hogy minden időben és a megfelelő formátumban, minőségben kerüljön a fejlesztőkhöz. A hengeffektekért felelős hangmérnökök igazi varázslói annak, hogy mely hangmintákat kell hogyan torzítani, nyújtani, csavarni, hogy pontosan olyan hangot kapjunk, mint amilyet szerettünk volna. Tipikus outsourcing lehetőség. Zene: fontos érzelmi hátteret ad. Akár egy ember is elvégezheti a synthy zenét... Outsourcing
Management Line producer Associate producer Studio Head A legkritikusabb komponens. Hatalmas fejlesztési feladat egy játék elkészítése. Általában a vezetés megoszlik több ember között, akiknek megvan a saját területük. Line producer: apró feladatok tömkelegét végzi, a dokumentumok összeállításától, elküldésétől akár az ételrendelésig... Associate producer: a studio vezető alatt helyezkedik el a hierarchiában. Egy csapatot koordinál, határidőkre figyel, jelentéseket ír ilyesmi.. Head: azért felel, hogy a projekt profit-orientáltan fusson, ennek megfelelően tervezi és irányítja. Szinte kivétel nélkül veteránok, alapítók, akik egyszerre játék tervezők, szoftver fejlesztők és üzletemberek.
Minőségbiztosítás Kiadó minőségbiztosítási részlege Béta tesztelés 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 Kritikus komponens. A legtöbb cégnek saját módszere van. Csak nagy cégeknél van értelme teljes munkaidőben foglalkoztatni ilyen embereket. Kis cégeknél gyakran a line és associate producereknak juthat ez a szerep. Minden jelentősebb játék átesik a kiadó saját belső tesztelési fázisain. Megfelelően rendezett hiba listát továbbítanak a fejlesztők felé. QA vezető: egy korábbi tesztelő, aki megfelelő képességekkel és tapasztalattal rendelkezik, ahhoz, hogy a tesztelési folyamatot irányítsa. Begyűjti a hibalistákat, rendszerezi, szortírozza, visszaküldi pontosításra. Fő csapat: elejétől a végéig jelen van. Friss csapat: szükség van friss szemekre, főleg a játék kiadása előtt. Béta teszt: fizetetlen vállalkozók, rajongók tesztje. Masszív multiplayer esetén különösen indokolt. Program manager: általában egy line v. associate producer veszi fel ezt a szerepet. A tesztelőkkel kommunikálni kell, stresszes munka.
Üzleti részleg Üzletfejlesztés Licenszelés Eladás/Marketing Kézikönyv Üzletfejlesztési igazgató(business developement executive) Studió vezető Ügyvédek Licenszelés Eladás/Marketing Kézikönyv Gyártás A játékfejlesztés nagy üzlet. Több bevétel származik belőle, mint a filmiparból, annak ellenére, hogy a fejlesztések nagy része nem nyereséges. Biz. Dev.: figyeli mi történik az iparban, melyek fejlesztés alatt álló játékok (melyek esetleg kiadót keresnek). Gyártás: CD sokszorosítás, nyomtatás, dobozolás
Egyébb Hardver gyártók Utóélet Hardver gyártók: folyamatos kapcsolat kell a hardver gyártókkal pl. NVidia Utóélet: javítások, forumok, support. MMO: folyamatos felügyelet, új tartalom, frissítések, külön fejlesztő csapatot igényel.
Ismétlés
Számítógépes grafika feladata illúzió modellezés számok Virtuális világ modell képszintézis
Modellezés feladatai Geometria megadása Transzformációk pont, görbe, terület, felület, test, fraktálok Transzformációk lokális modellezési és világkoordináta rendszer Színek, felületi optikai tulajdonságok
Koordináta rendszerek Yh 1 y 1 r f w Xh x Descartes Polár Baricentrikus Homogén
Descartes koordináták x, y, z: tengelyek mentén elmozdulás kitüntetett origó x, y, z irányok Miért hasznos? eltolás: összeadás irány: 1 hosszú vektor közbezárt szög cosinusa: skalárszorzat (dot) merőleges: vektoriális szorzat (cross) y 1 x 1
Baricentrikus koordináták súlypont a, b, c súlyok: pont a síkon kitüntetett 3 csúcs Miért hasznos? mind pozitív: pont a háromszögön belül a súlyok használhatók a csúcsokhoz rendelt értékek közötti interpolációra homogén 2x súly: ugyanaz a pont 1 3 1
Felületmodellezők Test = határfelületek gyűjteménye Topológiai ellenőrzés (Euler tétel): csúcs + lap = él + 2
B-rep: Euler operátorok
Poligon modellezés Alapelemek modellezési példa1 : házikó modellezési példa2 : asztal
CSG Operátorok Modellezési példa : fogaskerék
Szabadformájú görbék Definíció kontrolpontokkal Polinom: x(t) = S ai ti, y(t) = S bi ti A polinomegyütthatók származtatása: Interpoláció Approximáció
Szabadformájú felületek: r(u,v) Definíció kontrolpontokkal r(u,v) = rv(u) = S Bi (u) ri (v) ri (v) = S Bj(v) ri,j r(u,v) = S S Bi (u) Bj(v) ri,j
Szabadformájú felületek 2D kontrolpont sereg: szorzatfelületek r(u,v) = S S Bi,j (u,v) ri, j = S S Bi(u) Bj(v) ri, j Súlyfüggények: Interpoláció, Approximáció
2.5 dimenziós módszerek Kihúzás: extrude Forgatás: rotate
Elemi affin transzformációk Eltolás: r = r + p Skálázás: x’= Sx x; y’= Sy y; Forgatás: Sx 0 0 Sy Fix pont: origó [x’,y’] = [x,y] r’ r cos f sin f -sin f cos f r’ = r Fix pont: origó
Összetett transzformáció Affin transzformáció: r’ = r A + p A: lineáris transzformáció forgatás, skálázás, tükrözés, nyírás, stb. p: eltolás Amíg lineáris transzformáció: konkatenáció r’ = (...(r A1) A2)... An) = r (A1A2... An )
Homogén koordináták legyen a 3 pont: [0,0], [0,1] és [1,0] (Descartes koordinátákban megadva) ekkora súlyok kellenek [x,y]-hoz Xh = x Yh = y w = 1 - Xh - Yh ha a súlyösszeg 1, különben ezek valahányszorosa (≠0) Yh w Xh
Homogén koordináták w helyett inkább adjuk meg h súlyösszeget homogén koordináták a síkon [Xh, Yh, h] ugyanez a pont 1 összsúllyal (/h): [Xh/h, Yh/h, 1] Descartesban: [Xh/h, Yh/h]
Mennyivel tud többet? szemléletesen h lehet 0 is! Xh, Yh pont irányában, 1/h-szoros távolságra h lehet 0 is! ideális pont végtelen távol Descartesban nem ábrázolható [0,0,0] pont nincs! eltolás, középpontos vetítés lineáris transzformáció [2. előadás]
Homogén koordinátás transzformációk Eltolás nem fér bele a 2x2-es mátrixba Dolgozzunk 3x3-as mátrixokkal A a11 a12 0 a21 a22 0 p1 p2 1 [r’, 1] = [r, 1] = [r A + p, 1] p [r’,1] = (...([r,1] T1) T2)... Tn) = [r,1] (T1T2... Tn)
Képszintézis = valós világ illuziója Tone mapping pixel Virtuális világ színérzet Valós világ Sugársűrűség = egységnyi látható felület egységnyi térszögbe kisugárzott teljesítménye
Irányok, irány halmazok: 2D 2D eset Irány: szög egy referencia iránytól Irány halmaz: szög [rad] egység kör íve Méret: ívhossz Teljes halmaz: 2
Irányok, irány halmazok : 3D , szögek 2 referencia iránytól Irány halmaz: térszög [sr] tartomány az egységgömbön Méret: tartomány területe Teljes halmaz: 4
Sugársűrűség (Radiancia): I(x,w) Egy egységnyi látható felület által egységnyi térszög alatt kibocsátott teljesítmény [Watt/ sr/ m2] w dw dF I(x,w) = dF / (dA cos dw) dA
Fény-felület kölcsönhatás w dw w’ x Visszaverődés valószínűség sűrűségfüggvénye: w(w’,x,w) dw = Pr{foton w dw -ba megy | w’-ből jön} w(’,x,) cos BRDF: fr (’,x,) [1/sr] = fr (’,x,)
Rendering egyenlet I(x,w)=Ie(x,w)+I(h(x,-w’),w’) fr(’,x,) cos’dw’ I(h(x,-w),w) h(x,-w) I(x,w) ’ ’ w x fr (’,x,) I = Ie + t I
Absztrakt fényforrások I(x,w)=Ie(x,w)+I(h(x,-w’),w’) fr(’,x,) cos’dw’ mezei jelöléssel Iout=Iin fr cos’dw’ ha csak egy irányból jön be fény, nem kell az integrál pontfényforrás irányfényforrás Iout=Iin fr cos’
Mért BRDF adatok reprezentálása 1 2 1 2 BRDF 5-változós függvény: 1 , 1 , 2 , 2 , Tábla méret: 100x100x100x100x10 = 109
Matematikai BRDF modellek Anyagcsaládra jellemző matematikai képlet 1 1 2 2 fr , BRDF paraméterek
BRDF tulajdonságok 1. Pozitív 2. Szimmetrikus (reciprok) - Helmholtz 3. Energia megmaradást nem sértő: a visszavert energia kisebb mint a beérkező a visszaverési valószínűség 1-nél kisebb fr (’,x,) = fr (,x,’)
Diffúz visszaverődés (Lambert) Radiancia a nézeti iránytól független Helmholtz: BRDF a megvilágítástól is független A BRDF konstans: q’ ’ fr (’,x,) = kd(l)
Lambert árnyalás Iout=Iin fr cos’ Iout=Iin kd cos’
Ideális visszaverődés Visszaverődés a tükörirányba A BRDF Dirac-delta: itt nem a fényforrás, hanem a BRDF miatt nem kell integrálni q’ Iout=Ireflect kr q’ w’ wr fr (’,x,) = d(w-wr ) kr /cos’
Spekuláris visszaverődés: Phong modell y q’ q’ = diffúz + Kell egy függvény, ami nagy y=0 -ra és gyorsan csökken Iout=Iin kscosny
Diffúz+Phong anyagok diffúz Phong diffúz + Phong n= 5 10 20 50
Árnyalásról még bővebben, később…
Textúra interpretációk kép a memóriában ugyanolyan mint a frame buffer pixel helyett texel adatok tömbje 1D, 2D, 3D tömb pl. RGB rekordok függvény diszkrét mintapontjai rácson rekonstrukció: szűrés függvény a 3D felületi pontok felett? R G B R G B R G B R G B R G B R G B
Textúra leképezés 3D felületi pont → 2D textúratérbeli pont u = T(x) tetszőleges f(x) tárolható textúrában f(x) = f(u) = f(T(x)) megkeressük a pont textúrakoordinátáját értéket kiolvassuk a textúra megfelelő texeléből árnyaláshoz a felületi jellemzőket tárolhatjuk BRDF paraméterek: kd, ks, shininess, kr normálvektor: bump map, normal map
Textúra leképezés T(x) legyen könnyen számítható csúcsokban adott modellezéskor u,v koordinátákat rendelünk a vertexekhez háromszögeken interpoláljuk a felületen NEM a képernyőn
Perspektív helyes interpoláció ha a világban lineáris, akkor a képernyőn nem textúráknál látszik persp. helyes textúrázás de ma már mélység szín
Textúrákról még bővebben, később…
Ismétlés vége