Prestanda Hos Realtidsväxande Träd Jämfört Med Statisk Mesh
Total Page:16
File Type:pdf, Size:1020Kb
PRESTANDA HOS REALTIDSVÄXANDE TRÄD JÄMFÖRT MED STATISK MESH PERFORMANCE OF REAL TIME GROWING TREES COMPARED TO STATIC MESH Examensarbete inom huvudområdet Datavetenskap Grundnivå 30 högskolepoäng Vårtermin 2016 Mattias Andersson Handledare: Erik Sjöstrand Examinator: Henrik Gustavsson Sammanfattning Detta arbete undersöker prestandakraven hos realtidsväxande procedurellt genererande träd baserade på L-systemet genom att jämföra dessa med identiska träd representerade i form av statisk mesh. Ett stokastiskt parametriskt kontextberoende L-system med hakparenteser har implementerats i en enkel testmiljö baserad på OpenGL (SGI 1997-2016), statisk mesh har implementerats i form av display list (SGI 1997-2016 kap. 5.4). Undersökningen har jämfört de två teknikerna baserat på renderingstid, minnesanvändning, och genereringstid av L- system, såväl som hur de båda teknikerna skalar med antal vertiser och L-systemslängd. Resultaten visar på att de L-systemsbaserade träden har längre renderingstid än de representerade med statisk mesh, utöver tid för att växa träden via L-systemet före var rendering. De L-systemsbaserade träden visade dock på lägre minnesanvändning än sin statiska motsvarighet. Resultaten visar även på att de tekniker som jämförts inte nödvändigtvis var optimalt implementerade, och arbetet avslutas med en diskussion om hur detta skulle kunna åtgärdas i framtida arbeten. Nyckelord: L-system, Lindenmayersystem, träd, växande, realtid. Innehållsförteckning 1 Introduktion............................................................................................................1 2 Bakgrund................................................................................................................2 2.1 Procedurellt material...................................................................................................2 2.2 Användning.................................................................................................................2 2.3 Motivation....................................................................................................................2 2.4 Lindenmayersystemet.................................................................................................3 2.5 Deterministiska kontextfria L-system...........................................................................3 2.6 Sköldpaddsgrafik........................................................................................................3 2.7 Stokastiska L-system..................................................................................................4 2.8 Kontextberoende L-system.........................................................................................4 2.9 Parametriska L-system...............................................................................................5 2.10 L-system med hakparenteser....................................................................................6 2.11 Växande modellerad växtlighet.................................................................................6 3 Problemformulering..............................................................................................9 3.1 Problem......................................................................................................................9 3.2 Metodbeskrivning........................................................................................................9 4 Genomförande.....................................................................................................11 4.1 Förstudie...................................................................................................................11 4.2 Iterativ process..........................................................................................................11 4.3 Programbibliotek.......................................................................................................17 4.4 Pilotstudie.................................................................................................................17 4.5 Användning av artefakt..............................................................................................19 5 Utvärdering...........................................................................................................20 5.1 Undersökning............................................................................................................20 5.2 Resultat och analys...................................................................................................20 6 Avslutande diskussion........................................................................................28 6.1 Sammanfattning........................................................................................................28 6.2 Diskussion.................................................................................................................28 6.3 Framtida arbete.........................................................................................................31 Referenser................................................................................................................36 1 Introduktion Procedurell generation av material i datorspel gör det möjligt att producera stora mängder unikt material på kort tid och används för att generera allt från terräng och städer till texturer (Talton et. al. 2011). Ett användningsområde som lämpar sig bra för procedurell generering är växtlighet, då denna uppvisar stor självrepetition med mindre variation mellan individer (Lindenmayer & Prusinkiewicz 1990). En av de mer välanvända teknikerna för att generera procedurell växtlighet är L-systemet (Talton et. al. 2011), skapat av Arisitid Lindenmayer år 1968 med syfte att modellera alger (Lindenmayer & Prusinkiewicz 1990). L-systemet är ett grammatiskt omskrivningssystem som skapar strängar av symboler baserat på ett axiom och produktionsregler. En grafisk representation av strängarna kan sedan skapas genom en teknik kallad sköldpaddsgrafik, där var tecken tolkas som en handling för en renderingsmekanism kallad för en sköldpadda. Senare arbeten har expanderat L-systemet till att även simulera växt hos stående växter (Lam & King 2005), såväl som att generera träd i realtidsapplikationer. Baele och Warzee (2005) har producerat ett av det senare nämnda arbetena, och de hävdar att det är rimligt att använda realtidsgenererade träd även i tyngre realtidsapplikationer som till exempel spel. Det här arbetet har strävat efter att undersöka en utvidgning av Baele och Warzees arbete inspirerat av Lam och Kings (2005) arbete om växande träd baserade på L-systemet. Målet har varit att applicera de viktigaste koncepten från Lam och Kings arbete på ett realtidssystem för att åstadkomma realtidsväxande L-systemsträd. Dessa har sedan utvärderats genom att jämföras med en av de vanligaste teknikerna för att representera träd i spel, det vill säga statisk mesh. För att åstadkomma detta har en testmiljö skapats baserad på OpenGL (SGI 1997-2016) och SDL (SDL Community 2016). Ett stokastiskt parametriskt kontextberoende L-system med hakparenteser har implementerats tillsammans med ett system för att utföra sköldpaddstolkning av strängar. L-systemet tillåter en parameter per trädsegment som kan modifieras med de fyra räknesätten, dessa parametrar används för att kontrollera storleken på trädsegment och således används för att kontrollera växt hos trädet. Då systemet är stokastiskt används slump för att generera en stor mängd unika träd, slumpen använder sig av ett seed (eng. frö) för att göra det möjligt att generera samma träd flera gånger för testning. Systemets kontextberoende innebär att segment kan vara beroende av varandra, vilket används för att kontrollera hur stora träden tillåts växa samt tillåter avsmalnande grenar. Hakparenteser används för att skapa förgreningar i trädstrukturen och innebär att sköldpaddstolkningen reveterar till ett tidigare tillstånd. Detta används till exempel för att flytta tillbaka sköldpaddan till stammen efter att en gren renderats. Genom att växelvis iterera och rendera L-systemet är träden kapabla till att växa. Statisk mesh har implementerats via OpenGLs display list (SGI 1997-2016 kap. 5.4), vilket är en teknik för att lagra en serie förkompilerade OpenGL-kommandon i grafikminne för snabb rendering. Applikationen genererar L-systemsbaserade träd baserat på ett seed (eng. frö). De träd representerade med statisk mesh skapas utifrån de L-systemsgenererade träden, för att på så vis tillåta en jämförelse mellan grafiskt identiska träd. Träden utgörs av kombinationer av simpel geometri i form av cylindrar, sfärer, och plan. 1 2 Bakgrund 2.1 Procedurellt material Att skapa grafiskt material är en tidskrävande process, som till stor del behöver utföras för hand. Vissa typer av material kan dock med stor framgång procedurellt genereras. Exempel är texturer (Rhoades et. al. 1992), träd, landskap, städer och byggnader (Talton et. al. 2011), då dessa vanligen består av helt eller delvis repeterande mönster och former med mindre variationer. Procedurellt genererat material har två huvudsakliga fördelar mot handgjort material. Först och främst tillåter det generering av stora mängder unikt material med lägre arbetsbörda än om det skapats för hand (Talton et. al. 2011). För det andra är det en möjlighet att utföra genereringen under körning av den användande applikationen, antingen i realtid eller under laddningstider, vilket kan resultera i lägre minnesanvändning både i primärminne och sekundärminne,