A program a „Tudáshasznosulást, tudástranszfert segítő eszköz-, és feltételrendszer kialakítása, fejlesztése a Műegyetemen” (TÁMOP /1/KMR ) és a „Minőségorientált, összehangolt oktatási és K+F+I stratégia, valamint működési modell kidolgozása a Műegyetemen” (TÁMOP-4.2.1/B-09/1/KMR ) című projektek támogatásával valósul meg. Játékfejlesztés Windows Phone platformra Rajacsics Tamás (BME-AAIT) Budapesti Műszaki és Gazdaságtudományi Egyetem Automatizálási és Alkalmazott Informatikai Tanszék
Tartalom 3D hardver XNA+Silverlight architektúra Virtuális világ felépítése Content Pipeline Sebesség és optimalizálás
Hardver képességek Grafikus csővezeték IA VS HS Tess DS GS Ras PS OM CS DirectX 11 csővezeték XNA csővezeték – Xbox 360 és PC IA VS Ras PS OM DX11DX10DX11 IA:Input Assembler VS:Vertex shader HS:Hull shader Tess:Tessellator DS:Domain shader GS:Geometry shader Ras:Rasterizer PS:Pixel shader OM:Output Merger CS:Compute shader XNA csővezeték – Phone 7 IAVSRasPSOM
Hardver képességek GPU sebesség Nokia Lumia Mtri/s, 245 Mpixel/s 800x480 pixel Csak egyszerűbb hatások Memória sebesség ok ATI Radeon HD Mtri/s, 24,8 Gpixel/s 1920x1080 pixel (+FSAA) 1000 soros HLSL kód Memória sebesség a szűk keresztmetszet 1 pixelt 4-5-ször lehet felülírni
Silverlight + XNA 7.5-től működik Új projekt típus van hozzá XNA alkalmazás, ami tud renderelni Silverlight felületet Nekünk kell meghívni RenderTarget megoldás Fel tudom használni a textúrát máshogyan is
Silverlight + XNA Új projekt típus 3 projekt Content – A szokásos XNA Content Pipeline Lib – Az XNA projekt, ami kezeli a Content-et App – A Silverlight alkalmazás, amiben referenciát adunk a Lib- re Az App-ba mehet XNA kód és Silverlight is De a Lib-be csak XNA
Silverlight + XNA Architektúra Hasonló XNA-hoz Konstruktor (Initialize) OnNavigatedTo (LoadContent) OnNavigatedFrom (UnloadContent) OnUpdate OnDraw KonstruktorOnNavigatedTo OnUpdate OnNavigatedFrom OnDraw 30 FPS
Silverlight + XNA SharedGraphicsDeviceManager Az eszköz nem áll rendelkezésünkre kizárólagosan SharedGraphicsDeviceManager.Current Konstruktorban a méret PreferredBackBufferWidth = 800; PreferredBackBufferHeight = 480; Betöltéskor GraphicsDevice.SetSharingMode( true );
DEMO XNA+Silverlight
Világ felépítése Amit renderelünk Terep / belső tér Ég Víz Növényzet Karakter Statikus objektumok Volumetrikus hatások UI – akár Silverlight is lehet
Virtuális világ megteremtése Koordináta rendszer derékszögű, jobbkezes (XNA-ban alap) Tipikus tengely kiosztások X,Y sík a képernyő, Z felénk mutat X,Y sík a világ síkja, Z a magasság Számábrázolás float: lebegőpontos 32 bit Elvileg lehetne más is
Transzformációk 4x4 mátrixok Csontmodell: animációs alrendszer része Helyi: Ha a grafikus rosszul modellezte Ez nincs XNA-ban, betöltéskor transzformáljuk Világ: helyi – világ Nézet: világ – kamera Vetítés: kamera – képernyő
Beépített árnyalók Csak ez az 5 fajta van Windows Phone nem támogatja saját effekt írását, sem HLSL-t BasicEffectSkinnedEffectEnvironmentMapEffectAlphaTestEffectDualTextureEffect
Terep / belső tér Lehetőségek +- Textúra1 textúraMax 1 textúra Nincs HLSL, így atlasz, stb. kiesnek Fényszámítás1 fényNincs normal map MéretNagyKevés vertex, de erre vannak megoldások KomplexitásElfogadhatóVertex szám és overdraw
Terep / belső tér Árnyaló BasicEffect 0-3 fényforrás Vertex, vagy pixel árnyalás Textúra Köd Vertex szín
Ég és víz Lehetőségek +- SkyBox és SkySphereVanRészecske rendszer alapú felhőzet / víz nem jöhet szóba Környezet leképezésVanNincs normal map HullámzásLehetPixel alapú megoldás nem lehetséges Tükröződés és FresnelCube map vanTörés, vízköd, caustics nincs
Ég és víz Árnyaló EnvironmentMapEffect Környezet leképezés Fresnel Lightmap Cube map A-ban
Növényzet és részecske rendszer Lehetőségek +- Billboard és alfa tesztVanDinamikusan generált lehetne, de kevés a memória Mint objektumLehetHLSL generált nem AnimációElvileg lehetKöltséges, nem érdemes
Növényzet és részecske rendszer Árnyaló AlphaTestEffect Billboard rendereléshez Ahol nem látszik, ott nem is rajzol Nem gyorsabb Phone 7-en, mert alpha ingyen van (jelenlegi hardverrel) Z-buffert megőrzi
Karakterek Lehetőségek +- Model, textúra, submesh VanVertex számra figyelni kell, nincs normal map AnimációVan FényszámításPerpixel, alphaAmbiens térkép nincs ÁrnyékVanShadowmap nincs
Karakterek Árnyaló SkinnedEffect Karakter animációhoz Az animáció a CPU-n fut Skinning a GPU-n Max 72 csont 1, 2, vagy 4 súly
Statikus objektumok Lehetőségek +- Model, textúra, submesh VanVertex számra figyelni kell, nincs normal map FényszámításPerpixel, alpha, lightmap Ha mozog, akkor ambiens térkép nincs ÁrnyékVanShadowmap nincs
Statikus objektum Árnyaló DualTextureEffect Tipikusan Lightmap-hez Az alaptextúra és a lightmap együtt Külön textúra koordináták Modulate 2X (A*B*2) Világosít, vagy sötétít 0.5 helyben hagy
DEMO Autó
XNA Content Pipeline Speciális projekt típus, amibe médiát tudunk berakni Textúra Hang Modell (X és FXB) Font XML – nem tetszőleges XML fájl Videó Tetszőleges egyéb fájl Lefordul XNB-re
XNA Content Pipeline Fordítás folyamata ContentImporter – ez tudja beolvasni a fájlt (parser) Kimenete Content DOM (XNA-ban lévő, vagy saját) ContentProcessor – Content DOM-ból készít futásidejű objektumot ContentTypeLoader – Sorosító betöltő része ContentTypeWriter – Sorosító kimentő része
XNA Content Pipeline A beépítetteket lehet használni Lehet sajátot írni Csak importer-t a fájlformátumokhoz Mind a négyet Ki is lehet kapcsolni (Content-re állítani) Ekkor a fájl teljesen kimarad Vagy "Copy if newer", így belekerül az XAP-be
Optimalizálás.NET keretrendszer Keretrendszer sebessége PC: gyors, jó GC, dinamikus kód jó Xbox: elfogadható, GC nem ok, dinamikus kód nem jó Phone: elfogadható, GC ok, dinamikus kód jó GC Phone-on 1MB foglalásonként indul el Az utolsó gyűjtéstől számítva Ne induljon el renderelés közben! GC.Collect() pályabetöltés után
Optimalizálás Overdraw Mennyiszer van egy pixel kirajzolva 1 jó, 2 ok, 10 elfogadhatatlan Létező algoritmusok a takart objektumok eldobására (occlusion culling) Nem igazán használhatjuk őket, mert lassú Tervezés időben már jól kell csinálni Z-buffer ugyanúgy eldob, mint PC-n Előröl hátra kell rajzolni De persze törölni kell a Z-t
Optimalizálás Vertex – pixel arány Alaptétel: annyira lehet komplex a modell, amennyi pixelen látszik Könnyű túlzásba esni vertex-es modellel tele van a net Jó arány 1 vertex : 50 pixel Ég, víz, terep mind mehet ez alá bőven
Optimalizálás Felbontás Alapban 800x480 Lehet bármekkora Nagyobb is… Kisebb is! Nem csak a 400x240 jó, mert a hardverben van dedikált és jól működő skálázó: 611x413 is jól néz ki Lehet más oldalarány is A kamerát is át kell állítani ebben az esetben