Spelutveckling - Scenegrafer Scenegrafer Optimeringar Culling
Scenegraf vad och varför? En hierkisk representation av en 3d-värld Directed acyclic Graph (DAG) Består av noder med med barn/föräldrar Gör det möjligt att hantera element i en 3dvärld som objekt på en högre nivå Återanvända, gruppera och generalisera Bygg komplexa objekt genom att sätta ihop enklare Lättare att få en översikt över sitt data Jämfört med tex ren OpenGL Underlättar ett flertal optimeringar Culling, via bounds, är det främsta exemplet
Scenegraf viktiga termer Rotnoden Den unika roten för hela scenen (A) Scenegrafsträd Det träd som utgörs av hela scenegrafen med sitt ursprung i rotnoden (alla noderna i figuren) Sub-tree/del-träd Ett delträd med roten i valfri nod (de skuggade noderna med roten i E) Sibling/syskon-nod Noder som har samma förälder, tex (F,G,H,I) och (D,E,J) Ancestor/förfäder En nod som ligger ovanför en annan i samma del-träd (C är förfäder till H)
Scenegraf viktiga termer Parent/förälder En nod som ligger direkt ovanför i samma del-träd (C är förälder till J) En nod kan ha flera förlädrar pga delning av data (exempel senare) Child/barn En nod direkt under en annan (E är barn till C) Traversal order/traverseringsordning Den ordning i vilken alla noder besöks när trädet traverseras bokstavsordningen i figuren Descendant/ ättling En nod längre ner i ett del-träd (E är ättling till A) Leaf node/lövnod En nod utan några barn, slutet på en kedja från rot till löv, (B,D,F,G,H,I,J) Predecessor/föregångare En nod som besöks före en annan, tex C före D
Lövnoder och traversering Traverseras vanligen med djupet först Transformationer och states samlas ihop från de noder som passeras på vägen Lövnoder innehåller vanligen geometrier Själva målet att definiera vad som skall ritas Ibland lampor och kameror, mer komplicerat När en lövnod nås vet man var och hur den skall ritas ut States kan vara tex material och textur
Återanvändning av data Exempel på delad geometri Motsvarande möjligt för tex material och texturer parent1 root 1. Group *root = new Group 2. Group *parent1 = new Group 3. root->addchild(parent1) transform 4. Geometry *geom = new Cylinder(1,1) 5. Transform *transform = new Transform 6. parent1->addchild(transform) 7. transform->addchild(geom) 8. parent1->addchild(geom) geom
Exempel Lösa geometrier/delar Grupperade med föräldrar Slutlig scen Scengrafen
Mer om states States i en scengraf kan användas för att ange vilka lampor som skall ha effekt Tex förr att begränsa till ett rum ange att ett delträd skall ritas som wireframe eller med flat/smooth shading ange att vissa objekt aldrig skall cullas applicera en shader på en del av scengrafen
Mer optimeringar Culling Med hjälp av bounding volumes Kanske den största vinsten med scengrafer Sortera och organisera En annan huvudpoäng med scengrafer Några viktiga specialare Level of Detail Billboards Skybox
Culling Försök avgöra vad som skall ritas Utan culling ritar man allt, oavsett om det egentligen syns från kamerans position Backface culling Rita inte ut polygoner baksidan av polygoner Frustum culling Portal culling specialfall Bounding volumes är viktigt! Occlusion culling Contribution culling / small feature culling
Bounding volumes Omslutande volym En enklare volym som omsluter ett objekt... eller valfritt del-träd av en scengraf Finns ett flertal olika metoder Två faktorer att väga mot varandra Hur väl sluter volymen om objektet? Hur enkel/snabb är den att räkna med? Syftet är trots allt att optimera! Tre vanliga varianter...
Bounding volumes Bounding sphere omslutande sfär/klot Det enklaste och minst exakta Väldigt enkel att transformera Bounding box omslutande box Finns i två vanliga varianter Axis aligned bounding box (AABB) Oriented bounding box (OBB) AABB är enklast en väldigt vanlig variant Vanligt att det går att kombinera dessa
Frustum culling View frustum kamerans synfält Ta reda på vilka objekt som ligger i detta Vill inte göra detta för varje punkt! Använd bounding volumes Om en omslutande volym ligger utanför behöver vi inte undersöka dess innehåll vidare En scengraf med hiearkier av bounding volumes gör detta smidigt
Portal culling En vidareutveckling av frustum culling Lämplig för inomhusmiljöer med dörrar Varje dörr utgör en frustum för vad man kan se i rummet på andra sidan Testa ett rum i taget och gå vidare med dörrar som är inom synhåll så långt
Occlusion culling Motsatsen till portal culling Vad blockeras av ett hus? Det kan vara mycket som inte behöver ritas! Svårt att optimera i en dynamisk miljö Fortfarande ovanligt
Sortera och organisera Sortering kräver uppdelning av traversering och rendrering Passar väl ihop med culling CullVisitor + RenderList istället för RenderVisitor State-sorting Att byta state när man rendrerar kostar, rita objekt med samma state efter varandra Depth-sorting Behövs för transparenta objekt Ofta har man en kombination av flera render-listor med olika sorteringar
Sortera och organisera Organisation kan underlätta optimering Spatial uppdelning för frustum culling Det tydligaste exemplet Organisera scengrafen så att så stora delar som möjligt kan cullas samtidigt Tre vanliga metoder BSP-trees, binary space partitioning Octrees Bounding volumes hiearkier
Spatial uppdelning BSP, binary space pratitioning Delar upp 3d-rymden hiearkiskt längs med plan Planen beror på var objekten finns Octree, oct-tree Delar upp 3d-rymden i åtta mindre del-boxar Djupet beror av objekten... men inte uppdelningen i övrigt
Level of Detail Varierande detaljnivåer Justera komplexiteten på ett objekt beroende på... avståndet det klart vanligaste... storleken på skärmen bättre men svårare... prestandan hur mycket datorn klarar av Vanligt som en statisk inställning men det finns även implementationer som justerar detta dynamiskt
Billboards Ersätt 3d-objekt med 2d-bilder Klassiskt en bild som vrider sig mot kameran Träd hör till den vanligaste användningen Kan även bestå av flera bilder i olika vinklar Kors-träd Impostors En avancerad dynamisk variant Ett riktigt 3d-objekt rendreras till en bild och ersätts av en billboard som uppdateras vid behov
Skybox Ett enkelt sätt att få en snygg omgivning Man ritar en stor box omkring kameran Se till att den alltid följer med kameran Bilder på himmel och horizont läggs på insidan Rita alltid ut den först, bakom allt annat
Slut?