• No results found

Optimering av Karaktärer mot Unity EXAMENSARBETE

N/A
N/A
Protected

Academic year: 2021

Share "Optimering av Karaktärer mot Unity EXAMENSARBETE"

Copied!
33
0
0

Loading.... (view fulltext now)

Full text

(1)

EXAMENSARBETE

Optimering av Karaktärer mot Unity

Andreas Rånman 2013

Teknologie kandidatexamen Datorgrafik

Luleå tekniska universitet

(2)

Optimering av Karaktärer mot Unity

Andreas Rånman

Teknologie Kandidatexamen

Datorgrafik

(3)

Sammanfattning

Examensarbetet undersöker prestandakostnader och flaskhalsar för spelgrafik samt beskiver vanliga optimerings tekniker som tillämpas i industrin. Rapporten ger sig på uppgiften att visa exempel på prestandakostnad. Det framgår att dagens spelgrafik är för komplex och situationsberoende för att komma med annat än enkla abstraktioner man kan använda sig att göra en estimation på prestanda.

Abstract

This report studies performance and bottlenecks in todays game graphics, and show techniques used by the industry. The report tries to find a more precise number on performance costs but finds it is far too complex and situational to descibre anything but simpler abstractions of what the estimated performance loss might be.

(4)

Innehållsförteckning

1.

Introduktion 1.1 Bakgrund

1.2 Syfte & frågeställning 1.3 Avgränsningar

1.4 Free Lunch Design 1.5 Ordlista

2.

Teoretisk Bakgrund 2.1 Grafiska arbetsflödet

2.1.1 Modellering 2.1.2 Texturering 2.1.3 Riggning 2.1.4 Animation

2.2 Tekniskt flöde 2.3 Optimering 2.4 Spelmotorer

2.4.1 Unity

2.4.2 Unreal Development Kit

2.4.3 Val av motor

(5)

3.

Genomförande

3.1 Optimerings tekniker

3.1.1 Modellen 3.1.2 Textur

3.1.3 Rigg & animation

4.

Resultat

4.1 Transformbunden 4.2 Fillrate

4.3 Data 4.4 CPU 5. Diskussion

Referenser Källor

Figurer & Tabeller

Appendix A - Hårdvara

(6)

1. Introduktion 1.1 Bakgrund

Optimering är något som utförs i både spel och film. I en större utsträckning mot spel då man vill hålla spelupplevelsen så mjuk som möjligt. Det gäller att göra så mycket som möjligt av så lite som möjligt.

Jag fick en praktikplats på Free Lunch Design där jag hade som uppgift att producera trailers till deras spel. Min arbetsuppgift bestod i mångt och mycket av att klippa samt redigera redan färdigtställt material så som inspelat material från deras produkter, samt grafiskt material som de hade färdigställt i form av Sprites och Flash Scener.

De på Free Lunch Design arbetar mycket med spel-motorn Unity, och jag såg där att i deras optimering använde de sig av ett verktyg kallat Unity Profiler som medföljer programmet Unity Pro. Detta verktyg tillät användaren kontrollera vad i scenen som tog mest prestanda - även mer specifikt hur mycket minne, GPU samt CPU allt i scenen nyttjade.

1.2 Syfte & frågeställning

Examensarbetets syfte är att komma med konkreta exempel på tredimensionella karaktärers prestandabehov som minnesåtgång, CPU samt GPU användning i spelmotorn Unity, detta för att ge läsaren en djupare förståelse kring behovet av optimering och var fokus bör läggas. Läsaren ska därmed få svar på hur stor effekt optimering inom de olika områdena kring karaktären kan ge.

1.3 Avgränsningar

Arbetet kommer enbart att utföras på en hårdvara på grund av ekonomiska och

juridiska skäl. Med student versioner av programmen Autodesk Maya, Adobe Photoshop CS4, samt en Trial version av Unity Pro 3.5 till Windows.

(7)

1.4 Free Lunch Design

fig 1. Free Lunch Design logotyp.

Free Lunch Design, är ett framgångsrikt spelföretag baserat i Göteborg, de har sju fast anställda och står bakom titlarna Icy Tower, Warp Rush, Happyland Adventure och Dark Nebula. De lanserar deras spel till ett stort utbud av plattformar och har

producerat över 70 spel som laddats ned av flertals miljoner. Det grundades 1998 av Johan Peitz och köptes 2007 upp av Muskedunder Interactive AB.

Företaget har tidigare samarbetat med stora partners såsom Disney, Marvel och Paramount. Men sedan 2012 har företaget beslutat att de numera ska fokusera på att skapa egna titlar och spel de själva gillar att spela.1

1http :// www . freelunchdesign . com / about /

(8)

1.5 Ordförklaring

CPU - Kort för Central Processing Unit. Är hårdvaran som utför instruktioner för

mjukvaror i datorer genom att utföra aritmetik, logik samt input/output operationer av system. Kan liknas vid hjärnan för en dator.1

Component - komponenterna man fyller sitt GameObject med. Till exempel geometri, rigg, ljus, skript eller partikel effekt.

Draw call - Funktions anrop till GPU via ett API (OpenGL, Direct3D) som renderaren kallar för att rita upp scenen.

FK - Forward kinematics, då manpåverkar slutpositionen av Joints lägre i hierarkin genom att manipulera de över.

GameObject - Är en container i Unity för komponenter, vare sig det är din karaktär, en aktiv ljuskälla eller ett skript.2

GPU - Står för Graphical Processing Unit och är en mikro processor optimerad för just beräkningar i datorgrafik. Den kan sköta parallella beräkningar och är mer effektiv än CPU då det kommer till att räkna stora mängder data.3

HDR - High Dynamic Range, teknik där man använder sig av olika exponeringar för att få ett bredare färgdjup.

IK - Inverse kinematics, man låter en joints position påverka de som är över i hierarkin för att hamna på den valda slutpositionen.

Joint - Artikulationspunkter i 3D miljön Maya, låter en att deformera en Mesh. Mellan joints skapas det abstrakta objektet kallat Bone (ben) som enbart agerar visuell förtydligare till hur Joint hierarkin ser ut.

Light Probes - Realtids teknik för att åstadkomma effekten av Lightmapping av rörliga objekt. Man definerar då upp punkter i rymden som ska skapa en Light Probe.

Punkternas ljussättning kan då interpolera emellan dessa punkter.

LOD - Level Of Detail, man använder sig av flera versioner av en modell, de lägre vertex- täta nivåerna kan kallas då de befinner sig längre bort ifrån kameravyn.

1http :// en . wikipedia . org / wiki / Central _ processing _ unit

2http :// unity 3 d . com / support / documentation / Manual / GameObjects . html

3http :// en . wikipedia . org / wiki / Graphics _ processing _ unit

(9)

Mesh - Geometri, polygon.

MIP maps - När man har flera nivåer av en textur för att beroende på Pixel-Texel relationen kalla på lägre nivåer av texturerna när det är möjligt.1

Opak Geometri - Geometri som inte använder sig av den prestandakrävande Alpha kanalen i texurerna.

Prefab - ett GameObject som är återanvändningsbart, för att underlätta modifiering då modifiering av Prefab sker i alla dess instanser

Profiler - Ett verktyg till Unity Pro för att undersöka prestanda.

Rigg - gruppnamn för animatörernas verktyg att förflytta karaktärer och objekt,

bestående oftast av Joints med olika kopplingar samt eventuella skript för att driva mer komplicerade funktioner av rörelse.

Real-Time Shadows - Realtids beräkning på kastskuggor.

Scen (Unity) - 3D miljön man arbeter i Unity med, här placeras GameObjects för att bygga spelet.

Scen (Maya) - Är 3D miljön man arbetar i programmet Maya.

Smoothing Groups - I Maya finns valet mellan Smoothing Groups under menyn;

Normals>Soften Edge/Harden Edge.2

Tri - Förkortning av Triangel, polygonell yta som bildas mellan vertices.

Unity - Spelmotor.

UV - koordinater i en tvådimensionell rymd syftande till texturer.

Vert - Förkortning av Vertex. En definerad punkt i en 3D rymd.

Vertices - plural av Vertex.

1 http://docs.unity3d.com/Documentation/Manual/Textures.html#mipmaps

2 http://download.autodesk.com/global/docs/maya2013/en_us/index.html?

url=files/Editing_polygons_Edit_the_vertex_normals_to_affect_polygon_shading.htm,topicNumber=d3 0e150162

(10)

VBO - Vertex Buffer Object är det unika antalet geometrier som laddas upp till grafikkortet. Varje modell kommer skapa en ny VBO - och i vissa fall kan en geometri skapa fler än en VBO.

VRAM - Video RAM

(11)

2. Teoretisk Bakgrund 2.1 Grafiska arbetsflödet

Inom all tredimensionell spelproduktion skapar man det jag nu framöver kommer att kalla speltillgångar. Man börjar med modellering av speltillgången som skall skapas, vilket kan göras i valfritt verktygs program såsom Blender, Autodesk Maya eller 3Dstudio Max. Här arbetar man då med att forma polygoner till formen man strävar mot, sedan texturerar man dessa för att sedan kunna exportera dem till spelet. Detta är en iterativ process som man arbetar på tills produktionen är över.

2.1.1 Modellering

Modellering är det första steget i det grafiska arbetsflödet för tredimensionella spel.

Oavsett vilket verktyg man använder sig av är det nästan alltid samma komponenter man har att använda sig av för att bilda en modell. Man skapar verticer som definierar hörnen till en triangel, som är den minsta möjliga polygonen samt vanligaste mätningen av modellens komplexitet. Dessa verticer är även kopplade till UV koordinater för att kunna applicera en tvådimensionell bild på modellens yta.1

fig 2. Modellens komponenter.

1 http :// en . wikipedia . org / wiki /3 D _ modeling

(12)

Verticen kan innehålla mycket data, men brukar oftast hålla sig till att representera position, färg, UV-koordinat, normal och tangent.

Då man inom spelgrafik alltid strävar efter optimering inom alla områden försöker man hålla nere antalet verticer som uppgör modellen. Det brukar finnas en gräns på

grafikkortet för antalet verticer som klaras att renderas samtidigt. Denna mängd polygoner har ökat kraftigt för varje år som gått och år 2003 klarade NVIDIAs GeForce FX 200 miljoner trianglar.1

Det finns bara en riktig regel för att optimera en modell och det är att använda så få verticer som möjligt.

2.1.2 Texturering

Med modellen klar kan man gå vidare med att projicera en tvådimensionell bild på ytan.

Man kan även med hjälp av en Normal Map ge illusionen av en mer komplex yta. Då enbart pixlarna inom modellers UV rasteriseras gör man bäst i att utnyttja så mycket yta som möjligt av texturer man kallar på.

fig 3. UV-karta och resultat av projicerad textur.

1 http :// http . developer . nvidia . com / CgTutorial / cg _ tutorial _ chapter 01. html

(13)

2.1.3 Riggning

För karaktärer tar man vanligast och bygger upp ett skelett med artikulerande punkter i en hierarkisk kedja. Dessa binds samman med modellen man har skapat och låter

geometrin att deformeras då det ärver transformation från bundna artikulations punkter. De flesta motorer hanterar även Morph Targets eller Blendshapes som de kallas i Maya.

2.1.4 Animation

Efter att ett skelett är bildat kan man göra komplexa animationer för att ge liv i karaktärer. Dessa tar sig oftast formen som en graf för beskrivningen av tid och till exempel rotationsvärden.

(14)

2.2 Tekniskt Flöde

Dagens spel använder sig oftast inte enbart av CPU, utan använder även den mer grafikspecialiserade GPU. Kort sagt kan man säga att information om scenen, som textur, geometri, samt ljuskällor, skickas till GPU för att där rasteriseras och hamna som pixlar på skärmen. För att smidigt kunna få de två processorerna att samtala med varandra använder man sig av ett API, vilket ofta tenderar att vara OpenGL eller DirectX.1

fig 4. arbetsflöder förklarat i NVIDIAs GPU gems.2

1 http://www.cs.virginia.edu/~gfx/papers/pdfs/59_HowThingsWork.pdf

2 http://http.developer.nvidia.com/GPUGems/gpugems_ch28.html

(15)

2.3 Optimering

För att optimera behöver man förstå var flaskhalsen kan finnas. Flaskhals är ett begrepp som vi använder när det är något som sänker antalet bilder i sekunden vi kan rendera.

Om vi då säger att belastningen på GPU är för tung, medan den blixtsnabbt blir färdig på CPU sidan så kommer bilden fortfarande inte vara renderad innan den är klar på GPU.

Vilket leder till att vår CPU väntar tills dess att GPU är färdig med sina operationer.

I det grafiska arbetsflödet finns det fyra flaskhalsar:

1. Transformbunden, är då det är för många verticer att translera.

2. Fillrate-bunden, är då det finns för mycket att rastera ut.

3. Data-bunden, då mängden data är för stor att skeppa till GPU.

4. CPU-bunden, är att man bör se över utsorteringen av polygoner i sin scen, och eller annan spellogik relaterad anledning, som då programmerarna bör ta och se över.

För att ta reda på var flaskhalsen finns, måste man utföra många justeringar till dess man märker skillnad i bilder per sekund. Ett effektivt arbetsflöde för detta har sammanställts av NVIDIA i deras bok GPU Gems.1

fig 5. Ett flödesschema för att utröna var flaskhalsen finns.

1 http :// http . developer . nvidia . com / GPUGems / gpugems _ ch 28. html

(16)

Som utvecklare strävar man efter att framställa en produkt som är spelbar på så många plattformar som möjligt - det betyder att man får lov att hålla användningen av

processorer och minne så lågt som möjligt. Varje geometri, funktion och ljudfil använder sig av en del av den prestandan man har, och man kan därför inte alltid att

implementera allt det man önskar.

För utveckling mot desktop datorer, tenderar man att ha som prestanda mål en dator man vet att många har råd att uppgradera sig till, eller så håller man sig till en dator med prestanda de flesta redan har.

(17)

2.4 Spelmotorer

2.4.1 Unity

Unity är en spelmotor för tredimensionella spel och finns tillgänglig som gratis version och som betald licens. Unity finns tillgängligt för både Windows samt Mac OSx och låter en producera spel för ett brett utbud av plattformer, så som Windows, Mac OSx, Xbox 360, Playstation 3, Wii, iOs såväl som till Android plattformer. Med Unity kan man även utveckla spel för browser med Unity 3D’s web plug-in. Möjligheten att producera för så många plattformar är ett starkt argument för många företag att börja använda sig av denna spelmotor.

En annan av anledningarna till Unity’s popularitet är dess användarvänlighet, med en bra inlärningskurva och ett stort community stöd. Unity är oerhört visuellt och

lätthantereligt med dess drag-and-drop funktioner. Användare har även möjligheten att få direkt feedback av ändringar genom att testa spelet direkt. Detta låter användaren att snabbt arbeta ihop en spelprototyp som man kan arbeta vidare på.

Vid köp av en Unity Pro licens får användaren ta del av Realtime Shadows, HDR, Light Probes och mycket mer. Man får även tillgång till Unity’s Profiler. Den hjälper en finna olika problemområden då man försöker att optimera sin produkt. Genom att aktivera Profiler och sedan spela spelet så får man då reda på hur mycket tid som lades på att bearbeta element, tiden det tog att exekvera koden, att uppdatera en animation och så vidare.

Med Profilern kan utvecklare snabbt reda ut hur mycket tid i CPU som läggs åt att till exempel rendera byggnad A. Man får även information såsom hur många Draw Calls som utförs samt om något man glömt ta bort ligger kvar och tar prestanda.

Med Unity’s Profiler får utvecklaren en bra översikt över prestandan i scenen. Man kan till exempel gå in djupare och kolla hur många millisekunder det tog för all opak

geometri i scenen att renderas eller tiden det tog att uppdatera koden för karaktärers styrning. Man kan även se hur mycket minne som används för att läsa in alla texturer och modeller.

Man kan skilja på tiden det tar Unity att beräkna enbart själva funktionen, samt den totala tiden för alla under-funktioner som inkluderas i funktions anropet. Exempelvis, kamera funktionen som brukar stå för allt med rendering av geometri att göra. Själva funktionen för att beräkna kameran kanske bara står för 0.2% av tiden att beräkna hela scenen.

(18)

Unity Profiler är även den en bit kod som utförs och kommer att påverkan på

Processorer, men den kommer låta användaren snabbare finna områden att optimera.1

2.4.2 Unreal Development Kit

Unreal Development Kit eller UDK, utvecklad av Epic Games, är en annan oerhört populär miljö att utveckla spel i. Med den kan utvecklare liksom till Unity släppa sina produkter till en myriad av plattformar. UDK är först och främst utvecklad för FPS-spel men kan natuligtvis med arbete användas för att skapa allt ifrån platform-spel till visualisering av arkitektur.

En full UDK licens kan man använda kostnadsfritt för icke kommersiella syften, där användaren inte stöter på några nedsatta funktioner alls jämfört med Unity som har en light-version tillgänglig som inte inkluderar dess fulla potential.

Ska man därmot släppa spel i kommersiella syften betalar man en engångskostnad på 99$ och slipper betala royalty på de första 50.000$ man tjänar. Efter den gränsen är nådd betalar man 25% royalty till Epic Games.2

UDK kan skryta om att stå bakom en mängd stora titlar på marknaden såsom Gears of War serien.

Motorn kommer dock med en brantare inlärningskurva än dess konkurrent Unity, detta vägs upp av alla starka features såsom real-time shadows, och ett optimerat AI system.3

1http :// unity 3 d . com / support / documentation / Manual / Profiler . html

2http :// udk . com / licensing

3http :// www . unrealengine . com / features /

(19)

2.4.3 Val av motor

För examens arbetet valdes Unity att utföra experimenten i, då Unity var lättare att lära sig, och därför skulle ge mer tid åt själva experimenten i sig. Man fick även tillgång till Unitys Profiler som underlättade jämförandet av de olika experimenten. Valet av motor ska inte ha en så stor påverkan på optimerings metoder då de är motor överskridande.

Optimering för Unity kan med stor sannolikhet implementeras till såväl UDK som Nebula.

Då rapporten i stor utsträckning kommer använda sig av Unity så går vi här igenom termer inom spelmotorn för att underlätta för läsare att följa med i Metod och Resultat avsnitten. När man först öppnar Unity ser man dels en Viewer där man visuellt kan se allt som finns med i ens Scen. Unity har även scen hierarki, och en projekt katalog. I projekt katalogen ligger allt som finns i sökvägen “/Assets” för ditt projekt. Allt man sedan lagt in i scenen kommer dyka upp i scen hierarkin.

Den tidigare nämnda Assets katalogen innehåller alla skript, texturer, modeller samt Prefabs. En tillgång som underlättar för återanvändning av GameObjects. GameObjects är allting som bygger din scen, man kan se det som en container för allt man vill ha med i spelet. För att göra ett GameObject till en karaktär fyller man den då med Geometrin, skelett, material och skript som behövs, medan om man skapar ljus så fyller man lådan med komponenterna Lights.

Detta ska vara nog med information för att kunna ta del av arbetet som utförs i metoden, om så önskas finns all information att finna i Unitys egna dokumentation.1

1http :// unity 3 d . com / support / documentation / Manual / index . html

(20)

3. Genomförande

3.1 Tekniker för bättre prestanda

3.1.1 Modellen

En viktig sak att optimera är naturligtvis modellen. Att försöka använda så få trianglar som möjligt medan man fortfarande bibehåller silhuetten då ens GPU ofta har en gräns på antalet verticer.

Det man bör ta till sig innan man börjar göra sig av med verticer är att antalet i Maya och Unity oftast inte stämmer överens (se figurer nedanför stycket). Det sanna

Vertextalet får man efter alla uppdelningar i geometrin räknats. Två olika material kan inte dela på en vertex. Detsamma gäller för UV skal och Smoothing Groups.

fig 6. Skärmdump från Maya där man ser Vertex talet 8.

(21)

fig 7. Skärmdump från Unity av samma Geometri som tidigare figur. Nu med 24st Vertices. NB; samma som tidigare figurs UV antal.

Man gör därför bäst i att använda sig av UV verktyg för att skapa så få sömmar som möjligt, samt att använda sig av de olika shading grupperna så sparsamt man kan, bäst är om allting är mjuka normaler och man fuskar till utseendet i texturer. Man bör också hålla sig till så få material som möjligt, gärna enbart ett och använda sig av texturer för att återge önskad effekt.

LOD, Level of detail, är en effektiv metod man bör använda sig av för att reducera antalet trianglar som renderas. Om ett objekt är så långt ifrån kameran att det bara utgör ett fåtal pixlar, så bör det inte längre använda sig av allt för många trianglar.

Optimering av geometri påverkar för det mesta GPU. Effekten det har på CPU är Drawcalls och för att hålla nere det antalet kan man bland använda sig av färre ljuskällor.

(22)

3.1.2 Texturer

Om man finner att flaskhalsen ligger hos texturen finns det inte så många fler ‘fusk’ än MIP-mapping. Man bör ta sig en funderare och kolla hur stort utrymme av skärmen karaktären kommer använda sig av. Ett tredje-persons spel där man konstant ser en karaktärs rygg, som kanske använder 15% av skärmens yta bör inte använda sig av mycket mer än just då 15% av ytans pixelantal. Man bör även undvika 64-bit och 128- bit kartor om så inte är absolut nödvändigt.

Då enbart pixlar inom UV ytorna kommer rasteriseras bör man se till att använda sig av så mycket utrymme man kan också. Annars går man miste om många potentiella pixlar man likaväl förlorar prestanda för.

I regel ska man använda sig av MIP-mapping metoden, om inte karaktären kommer hålla samma avstånd till kameran. En MIP-mappad yta kan även hjälpa råda bot på anti- aliasing som figuren nedan visar.

fig 8. MIP-mappad textur till höger, utan genererade MIP-maps till vänster

(23)

3.1.3 Rigg & animation

Om man ser till dokumentationen för Unity så rekommenderas användare att mest hålla ett öga på antalet joints man binder karaktären till. Förhållandet för riggen och hur optimerad karaktären är naturligtvis mer komplex än så; man bör bland annat hålla så många animationskanaler tomma som möjligt. Det viktigaste av allt gäller de flesta motorer, och det är antalet influenser (joints) varje vertex har. Ett vanligt tal man inte bör använda sig mer än är 4st.1

En teknik att hålla antalet joints nere är precis som med geometrier att använda sig av LOD. Då en karaktär som befinner sig långt bort inte behöver fullt artikulerande händer eller mer än tre rotationer i ryggraden.

Modellen kan få ofantligt tunga ekvationer beroende på riggens komplexitet, och blir transformbunden. Varje vertex till modellen multipliceras med varje joint som påverkar den för att nå sin slutliga position i Screen Space.

Till mobil utveckling använder Unity CPU istället för mobilens GPU vid exempelvis mesh skinning.2

1 http://td-matt.blogspot.se/2010/11/skeleton-layout.html

2 http :// docs . unity 3 d . com / Documentation / Manual / MobileOptimisation . html

(24)

4. Resultat

4.1 Transformbunden

Flera källor kom med liknande förenklade ekvationer för hur man kan kan förutspå prestandan. Beräkningen för den Transformbundna ekvationen var;

Antal verticer * Komplexitet av transformation.1

Det vill säga, hur många beräkningar som krävs för vertexen att nå sin slutliga position i Screen-space. Ett statiskt objekt är med andra ord snabbare att räkna ut än en fullt riggad karaktär med Blendshapes/Morph Targets.

fig 9. Till höger; Skinnad mesh med 31 ben och 4 influencer per vertex.

Vänster; Statisk mesh. ~2500 fps vs. ~5000.

1http :// www . ericchadwick . com / examples / provost / byf 1. html

(25)

4.2 Fillrate

Fillrate är hastigheten pixlar ritas ut på grafikkortet. Det finns ofantliga variabler som påverkar fillrate, då det inte finns en gräns för vad utvecklare kan lägga till i deras shaderprogram. NVIDIA sammanfattar kort att man generellt kan anta det som;

Antal Pixel Operationer * Grafikkortets klockfrekvens1

I GPU Gems av NVIDIA så nämns två enkla test att utföra för att finna om flaskhalsen är fillrate bunden. Sänka upplösningen på applikationen för att se om framerate varierar, eller lägga till operationer som inte räknar något i de aktiva Fragmenshader

programmen man använder.

Guillaume Provost beskrev i en artikel å andra sidan att ekvationen till beräkning av fillrate kunde förenklas som;

Antal pixlar * Komplexitet av shader * Antal pixlar i textur2

Shaders komplexitet kan vara rätt hög, med normal och bump maps, samt flertalet pass som man kan använda sig av. Refraktion, alpha och liknande effekter. Sen om man inte tycker sig använda en alltför komplex shader, så kan fortfarande texturens storlek helt enkelt vara för mycket.

1 http :// en . wikipedia . org / wiki / Fillrate

2 http :// www . ericchadwick . com / examples / provost / byf 2. html

(26)

4.3 Data

Den här flaskhalsen beror enbart på mängden data man skeppar mellan CPU - GPU. Här kan man räkna ut mängden data bara att kolla filstorlekarna hos meshes och texturer.

PCI-express x16 klarar till exempel upp till 70.88 MB/Frame om man ska hålla 60 FPS, 4.42MB/Frame och port.1

Detta tenderar att inte att vara flaskhalsen då texturer och geometrier som skickats till GPU ligger där tills de uttryckligen ska bort, men om det råkar vara så bör man se över hur bit storleken hos verticer och texturer är. Andra alternativet är att använda färre texturer/verticer.

1 http :// sv . wikipedia . org / wiki / PCI _ Express

(27)

4.4 CPU

Draw Calls är det mest påtagliga då man talar om optimering mot CPU. Kostnaden för varje Draw Call är svår att avgöra då inte bara hårdvara spelar in, utan även hur polygonen är uppdelad. Det man klart kan säga är att varje Call oavsett mängd polygoner tar en relativt likgiltig tid att utföra.

fig 10. Två scener, båda med drawcall på 1000. En 50% ökning i CPU men notera att mängden polygoner skiljer sig markant; ~336 tusen mot ~12.2 miljoner.

Som bilden ovan visar så stegrar inte pressen på CPU som med mängden trianglar.

Scenen är detsamma och import och material inställningarna var likaså.

(28)

5. Diskussion

Med detta examensarbete har jag lärt mig mycket värdefullt om prestanda och var man kan förvänta sig flaskhalsar. Delvis genom att läsa dokumentation från program och hårdvara, samt egna studier i spelmotorn Unity som jag valde att fördjupa mig inom.

Under arbetets gång fick jag komma underfund med missuppfattningar jag haft sedan den grundläggande kursen Grafik i datorer. Jag lyckadess även få en djupare förståelse för hur modellerna är uppbyggda och det grafiska arbetsflödet. Det som förvånade mig mest från min tid på Free Lunch Design var lärdommen att antalet verticer var olika i Maya och i Unity (ska även gälla andra spelmototer som visar ett mer sanningsenligt värde).

Då dagens grafikkort kan hantera ofantliga mängder trianglar har detta slutat vara ett problem till utveckling mot konsoler och datorer. Det fortsätter däremot vara lätt att använda för många trianglar vid utveckling av mobila spel.

Något som jag förstod också var att det oftast är mer komplext än ett arbitärt värde, då modellens uppbyggnad kunde påverka prestanda kostnaden.

Skillnaden mellan statiska och dynamiska meshes var stor, detta hade att göra med hur komplexa beräkningar det tog för geometrins alla verticer att hamna på sin slutliga position i screen space. Oftast tenderar dock modeller med komplexa translationer vara karaktärer som man prioriterar för produktionen.

Spelstudion Naughty Dog använder sig av relativt höga polygon värden på sina karaktärer till spelserien Uncharted. Det nämns i deras bok; Uncharted 2: Among Thieves att ärkeskurken använder 37k trianglar.1 Jag skulle tro att det enbart är den högsta Level of Detail nivån som har så många polygoner.

Det jag uppfattade som det absolut viktigaste angående prestanda var Fillrate.

Användandet av texturer, att kombinera så många man kan till en och samma fil så det blir färre kartor att skeppa till GPU. Samt det kostsamma med att använda sig av alpha, speciellt då flera plan överlappar med varandra för den slutliga renderingen.

Ett bra exempel på flitigt användande av texturer är Tor Fricks’ Sci-fi lab scen. Han var vänlig nog att dela med sig av texturer och förklara tankarna kring textureringen. Det han gjorde var att använda varje kanal i texturkartan som en egen textur. Där färg istället kom ifrån materialet som användes och användes tillsammans med en av kanalerna från texuterfilen. 2

1 The Art Of Uncharted 2 Among Thieves

2 http :// www . torfrick . com / info / lab . html

(29)

Kostnaden på GPU för fillrate var även den oerhört komplex. Det beror på att varje pixel som ska renderas, kollar vilka ytor den hittar och kollar sedan materialet söker igenom texturen tills den hittar färgdatan den behöver.

Om man då använder ett flertal semitransperenta material som kan vara aktuellt i skogsmiljö där bladverk visas som alphaplan, så kommer den tunga processen att kolla upp informationen om textur och genomgå shader operationer att ske för varje pixel som har alpha.

En billigare lösning till alpha kan vara att använda sig att cutouts, nackdelen är då att man inte får semitransperense.

Optimering är en tidskrävande process, vars fokus skiftar projekt till projekt. Man kan undvika en hel del iterationer av scenen man arbetar på om man har en någorlunda bra plan och tänker på vad det kan komma att kosta i prestanda. Sen med hjälp av verktyg som Unity Profiler kan man komma åt flaskhalsarna utan större tidskrävande

experiment.

“Locating the bottleneck is half the battle in optimization...”1.

1 http://http.developer.nvidia.com/GPUGems/gpugems_ch28.html

(30)

Referenser

Källor

1. Free Lunch Design, About

http :// www . freelunchdesign . com / about / (hämtad 2012-09-05) 2. Wikipedia. CPU.

http :// en . wikipedia . org / wiki / Central _ processing _ unit (hämtad 2012-09-05) 3. Unity3d, Manual.

http :// docs . unity 3 d . com / Documentation / Manual / GameObjects . html (hämtad 2012-09-05) 4. Wikipedia, GPU. http :// en . wikipedia . org / wiki / Graphics _ processing _ unit (hämtad 2012-09-05)

5. Unity3d, Manual. Mipmaps. http :// docs . unity 3 d . com / Documentation / Manual / Textures . html # mipmaps (hämtad 2013-01-14)

6. Autodesk Manual. Edit Vertex Normal to affect polygon shading.

http :// download . autodesk . com / global / docs / maya 2013/ en _ us / index . html ? url

= files / Editing _ polygons _ Edit _ the _ vertex _ normals _ to _ affect _ polygon _ shading . htm , topicNumber = d 30 e 1501 62 (hämtad 2013-01-10)

7. Wikipedia. 3d Modelling.

http :// en . wikipedia . org / wiki /3 D _ modeling (hämtad 2013-01-09) 8. NVIDIA. CG tutorial.

http :// http . developer . nvidia . com / CgTutorial / cg _ tutorial _ chapter 01. html (hämtad 2013-01-08) 9. Luebke, David. NVIDIA Researcher. Humphreys, Greg. University of VIrginia. How GPU works.

http :// www . cs . virginia . edu /~ gfx / papers / pdfs /59_ HowThingsWork . pdf (hämtad 2013-01-10) 10. Cebenoyan, Cem. NVIDIA. GPU Gems.

http :// http . developer . nvidia . com / GPUGems / gpugems _ ch 28. html (hämtad 2013-01-10) 11. Cebenoyan, Cem. NVIDIA. GPU Gems.

http :// http . developer . nvidia . com / GPUGems / gpugems _ ch 28. html (hämtad 2013-01-10) 12. Unity - Profiler (Pro only)

http :// docs . unity 3 d . com / Documentation / Manual / Profiler . html (2012-09-05) 13. Licensing

http :// udk . com / licensing (2012-09-05)

14. Game Development Tools for Unreal Engine 3 http :// www . unrealengine . com / features / (2012-09-05)

(31)

15. Unity3d, Manual. http :// unity 3 d . com / support / documentation / Manual / index . html (hämtad 2012-05- 26)

16. TD-Matt. http :// td - matt . blogspot . se /2010/11/ skeleton - layout . html (hämtad 2013-01-10)

17. Unity3d, Manual. http :// docs . unity 3 d . com / Documentation / Manual / MobileOptimisation . html (hämtad 2013-01-14)

18. Provost, Guillaume. Beautiful Yet Friendly Part 1: Stop Hitting the Bottleneck.

http :// www . ericchadwick . com / examples / provost / byf 1. html (hämtad 2013-03-20) 19. WIkipedia, Fillrate. http :// en . wikipedia . org / wiki / Fillrate (hämtad 2013-04-05) 20. Provost, Guillaume. Beautiful, Yet Friendly Part 2: Maximixing Efficiency http :// www . ericchadwick . com / examples / provost / byf 2. html (hämtad 2013-03-20)

21. Wikipedia, PCI-express. http :// sv . wikipedia . org / wiki / PCI _ Express (hämtad 2013-01-10) 22. Ballistic Publishing. Naughty Dog, Inc. 2010. The Art Of Uncharted 2 Among Thieves.

ISBN: 978-1-921002-71-7 23. Frick, Tor. Sci-fi Lab.

http :// www . torfrick . com / info / lab . html (hämtad 2012-05-14 ) 24. Cebenoyan, Cem. NVIDIA. GPU Gems.

http :// http . developer . nvidia . com / GPUGems / gpugems _ ch 28. html (hämtad 2013-01-10)

(32)

Figurer & Tabeller

Fig 1. Free Lunch Design logotyp.

Fig 2. GPU pipline från NVIDIA.1 Fig 2. Skärndump från Unity Profiler.

Fig 3. Unreal Development Kit logotyp.

Fig 4. Skärmdump på lowpoly karaktären i Maya med 256 textur map applicerad.

Fig 5. Uv kartan för lågpoly modellen.

Fig 6. Den mellanstora texturen på 512x512 pixlar.

Tabell 1. Data hämtad från Unity Profiler relevant till geometri frågeställningen.

Tabell 2. Data hämtad från Unity Profiler relevant till textur frågeställningen.

Tabell 3. Data hämtad från Unity Profiler relevant till rigg frågeställningen

1 http://http.developer.nvidia.com/CgTutorial/elementLinks/fig1_3.jpg

(33)

Appendix. A - Hårdvara

Asus NS55SF-S1232V - Bärbar dator, intel core i7 - 2670 QM , 2.2GHz 8 GB Minne

OS: Windows 7 64bit

Grafikkort: Nvidia GeForce GT 555M

References

Related documents

(Undantag finns dock: Tage A urell vill räkna Kinck som »nordisk novellkonsts ypperste».) För svenska läsare är Beyers monografi emellertid inte enbart

Voltairestriden har dock brutits ut till ett specialkapitel: »Kellgren försvarar Voltaire i Stockholms-Posten.» K apitlet »Som fri och fattig littera­ tör» handlar

ståelse för psykoanalysen, är han också särskilt sysselsatt med striden mellan ande och natur i människans väsen, dessa krafter, som med hans egna ord alltid

Att tillämpa syskonförtur som urvalsgrund underlättar familjers vardag och kan utgöra en trygghet för framför allt yngre syskon att kunna gå på samma skola som äldre

The ETDRS letter chart (number of letters) was used for eyes planned for anti- VEGF treatment (Photocoagulation for diabetic macular edema: Early Treatment Diabetic Retinopathy

Unlike previous research where the focus is on various selections made by the media, this study’s interest will lie in how sports magazines decide to fashion the prototypical

Helt klart kan det konstateras att så inte är fallet och att hypotesen, om sjunkande prisvolatilitet över tiden i takt med en mognare marknad för de återvunna materialen, järn,

Eftersom man av allt att döma icke kan vänta sig några posi- tiva bidrag till framtidens tänkande från den nuvarande ledningen inom socialdemokratien - som fortsätter