Gå til hovedindhold
Version2 it for professionelle
Forsiden

Hovedmenu

  • It-nyheder
  • Blogs
  • It-job
  • It-firmaer
  • Whitepapers
  • Opret bruger
  • Log ind
Du kan logge ind med din e-mail-adresse
Der er forskel på store og små bogstaver i adgangskoden.
Glemt adgangskode?
Se kommentarer (4)
Emner Spiludvikling

5 gode råd til optimering af grafikydelsen i dit spil

Af Anders Tankred Holm 28. november 2012 kl. 17:30

Et godt spil har for mig en fængende historie, spændende gameplay og en fed grafisk stil, men alt dette er dog hurtigt ødelagt hvis spillet ikke kører optimalt.

Grafik-rendering, specielt i 3D spil, er et af de områder som virkelig presser dit system, så jeg vil her give mine 5 gode råd, der kan hjælpe med at maksimere ydelsen.

Model geometri

Den første optimering starter med selve 3D-modellen. Det er vigtigt at holde antallet af polygoner så lavt som muligt, da GPUen skal processere hver enkelt. Overvej derfor konteksten for din model i spilverdenen. Det kan være, at spilleren aldrig ser bagsiden eller bunden af modellen, så hvorfor bygge den. Derudover bør man benytte teknikker som f.eks. normal mapping til at fake detaljer i modellen uden at tilføje ekstra polygoner.

Hold styr på antallet af draw calls

Det er ikke kun din GPU der arbejder, når der renderes objekter på skærmen. Din CPU sørger bl.a. for at holde styr på, hvilke lyskilder der påvirker dit objekt, opsætning af shaders og sender instruktioner til grafikdriveren. Alt dette sker for hvert objekt i din scene som skal renderes, og kaldes for draw calls.

Hvis du f.eks. har en model af en stol, som er delt op i seks separate modeller (ryg, sæde, og ben), så vil CPUen være nødt til at forholde sig til hver del. Det vil derfor være langt billigere at kombinere de seks dele til en model, hvilket kun vil ses som et objekt for CPUen.

At kombinere objekter sammen kan både gøres manuelt af enten en grafiker eller programmør, men mange engines har også funktionalitet til at gøre det automatisk på runtime.

Når man kombinerer objekter på den måde, er det vigtigt at huske, at disse så også kun deler et materiale. Hvis du har et materiale for hvert ben, stol og ryg, så vil du ikke opleve nogen optimering i ydelsen, selvom du har kombineret objekterne til et.

Lys er dyrt!

Tænk derfor over om du kan skifte dit dynamiske lys ud med et ”bagt” lightmap i stedet for. Der er mange fordele ved at bruge et lightmap fremfor dynamisk lys. Det er bl.a. langt billigere og så ser det også bedre ud.

De fleste engines har et lighmapping-værktøj integreret, Unity benytter f.eks. Beast fra Autodest.

Ulempen ved lightmapping er, at det giver et statisk lys, og det vil derfor være nødvendigt at indsætte et dynamisk lys, hvis du ønsker at kaste en skygge fra f.eks. din spilkarakter.

Hvad kan spilleren egentlig se?

Din spilverden kan være stor og indeholde mange objekter, og det er derfor vigtigt at overveje, hvad din spiller egentlig kan se. Culling er en teknik, der sørger for at sortere de objekter fra, som spilleren alligevel ikke kan se fra en given vinkel, og derved sparer du GPU og CPU til at processere disse.

En anden teknik, som også benyttes i forhold til, hvad spilleren kan se, er et Level of Detail(LOD) system. Her laver man to-tre forskellige kvalitetsversioner af sine 3D-modeller, og LOD systemet sørger for at skifte mellem de forskellige modeller i forhold til spillerens position.

Når spilleren er tæt på objektet, vil systemet vælge højkvalitetsversionen af modellen, men når spilleren går væk fra modellen, vil den skifte til en lavere version, da spilleren alligevel er for langt væk til at se detaljerne.

Ligesom med lightmapping, så har de fleste engines værktøjer integreret til at hjælpe med at opsætte et korrekt culling- og LOD-system for dit spil.

Brug en profiler

Der er rigtig mange faktorer, der kan give en dårlig ydelse for dit spil, og mit sidste råd er derfor at bruge en profiler til at finde frem til de steder, hvor du kan få mest ud af at optimere.

Her kan du bl.a. se udviklingen af antal draw calls, hukommelsesforbrug, og hvor meget tid din CPU bruger på rendering.

Send Tweet
Udskriv
Billede af Anders Tankred HolmOm Anders Tankred Holm

Anders er teknisk forretningsudvikler hos virksomheden Unity Studios, som udvikler spil og 3D applikationer. Han blogger om de tekniske udfordringer man møder i en spilproduktion, samt kommentere på nyheder og nye teknikker der mødes i den unge branche.

Follow @atholm

Kommentarer (4)

Opret en konto eller log ind for at følge indhold på Version2 - og bliv opdateret via e-mail eller rss

Følg kommentarer
Nicolai Willems 29. nov. 2012 - 00.47
 
Tak for en god artikel.

Hej Anders.

Først og fremmest tak for en god artikel, med udvikler relevant indhold.
Jeg er selv web udvikler, og ser mange af lignende ting. Jeg tror spil verdenen kan lære os andre mange ting om performance.

Jeg blev lidt fanget af dit screenshot, hvilken profiler er det?

Mvh Nicolai Willems

  • Stem op 0
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Torben Mogensens billede
Torben Mogensen 29. nov. 2012 - 09.17
 
Forside/bagside og raytracing

En anden meget brugt teknik er, at udnytte, at mange polygoner kun kan ses fra den ene side, idet den anden side vender ind i en lukket figur. Hvis man f.eks. bygger en terning af seks kvadrater, så vil de allesammen kun kunne ses fra ydersiden af terningen.

Hvis man sætter en normalvektor på hver polygon, kan man se om den vender mod seeren eller væk fra. Hvis den vender væk fra, behøver man ikke at tegne polygonen, da den alligevel ikke kan ses.

Det klassiske spil Elite brugte dette som dels optimering og dels til at undgå at vise kanter, der ellers ville være skjult, i sin wireframe rendering. Af samme årsag var alle objekter i spillet konvekse, så en kant enten var helt synlig eller slet ikke synlig. Det forenklede renderingen betragteligt. Man kunne se, at der blve brugt en forenklet model, når to objekter passerede hinanden, da man kunne se det bageste igennem det forreste.

Flere (blandt andet Intel) har argumenteret for, at man i stedet for polygonrendering burde gå over til raytracing. Pointen er, at når antallet af objekter bliver meget stort, så overhaler raytracing polygonrendering i hastighed. Desuden er mange lys- og spejlingseffekter langt enklere at lave med raytracing, og raytracing håndterer ikke-flade objekter (kugler, cylindre, kegler, bezierkurver osv.) meget bedre end polygonsystemer, der skal f.eks. skal opdele en kugle i mange polygoner, før den ser troværdig ud. Derudover er level of detail og objekter bag seeren mere eller mindre automatisk håndteret.

Nutidens grafikprocessorer er optimeret til polygonrendering, så der skal nok nye grafikprocessorer til, før det kan betale sig. Men det kommer nok.

  • Stem op 4
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Anders Tankred Holms billede
Anders Tankred Holm 29. nov. 2012 - 09.33
 
Re: Tak for en god artikel.

Hej Nicolai,

Glad for du kunne bruge mit indlæg. Screenshot er fra spilmotoren Unity's indbyggede profiler.

  • Stem op 0
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer
Michael Peters 29. nov. 2012 - 11.17
 
Velkommen til Unity

Tak Anders for dit indlæg.

En stor del af vores business handler om 3D modeller og denne artikel er hvad vi til dagligt slås med, men det er rart at Unity er med her på denne blog, for Unity spilmotoren er rigtig spændende når man som vi, skal udvikle mobiltelefon spil.

  • Stem op 0
  • Stem ned 0
  • anmeld
  • Log ind eller opret en konto for at skrive kommentarer

Tilføj kommentar

Opret en konto eller log ind for at følge indhold på Version2 - og bliv opdateret via e-mail eller rss

Følg kommentarer
Log ind herunder eller opret en bruger for at skrive kommentarer
Du kan logge ind med din e-mail-adresse
Der er forskel på store og små bogstaver i adgangskoden.
Glemt adgangskode?

Seneste nyt

Ethernet fylder 40: Fra datacenter til F16-fly

Udgivet 24. maj 15.55Opdateret 24. maj 15.55

Rygte: 48 millioner Xbox Live-konti hacket

Udgivet 24. maj 14.40Opdateret 24. maj 14.40

Shopamok: 41 domæner fra konkursbo sat til salg for 500 kroner

Udgivet 24. maj 14.08Opdateret 24. maj 14.08

300.000 cloud-servere giver ny Xbox supermuskler

Udgivet 24. maj 11.31Opdateret 24. maj 11.31

Yousee: Vi ville ikke skræmme kunderne

Udgivet 24. maj 10.44Opdateret 24. maj 11.32

Flere it-nyheder »

Tilmeld dig Version2's it-nyhedsbrev og vind den nye iPad.

Seneste debat

  1. Enhedslisten har misforstået softwarepatenter i EU

    10 comments.
    Last update 4 timer 42 minutter
    Skrevet af Kim Garsdal Nielsen
  2. Shopamok: 41 domæner fra konkursbo sat til salg for 500 kroner

    8 comments.
    Last update 6 timer 19 minutter
    Skrevet af Johnnie Hougaard Nielsen
  3. 300.000 cloud-servere giver ny Xbox supermuskler

    5 comments.
    Last update 6 timer 20 minutter
    Skrevet af Mikkel Krøigård
  4. Yousees routere har gigantisk sikkerhedshul - fire måneder efter advarsel

    28 comments.
    Last update 7 timer 57 minutter
    Skrevet af Jesper Lund
  5. Haves: Skod ADSL linje. Ønskes: Virtuel server

    89 comments.
    Last update 8 timer 48 minutter
    Skrevet af Peter Toft
  6. Fagforeninger: It-virksomheder må tage deres egen udfordring op

    18 comments.
    Last update 10 timer 43 minutter
    Skrevet af Martin Andersen
  7. Yousee: Vi ville ikke skræmme kunderne

    6 comments.
    Last update 10 timer 59 minutter
    Skrevet af Mikkel Tobiasen
  8. Twitters nye tofaktor-sikkerhed kan være ubrugelig

    1 comment.
    Last update 12 timer 54 minutter
    Skrevet af Klaus Seistrup

Mere debat »

It-virksomheder

Presswire
|
CFN People A/S
|
Computerfriend.DK
|
Simitu
|
Adapt
|
Atomic Software ApS
|
Planahead
|
Dubex
|
Rasby
|
Kartel
|
Praktisk IT
|
Secu
 

Information

  • Kontakt redaktionen
  • Job- og annoncesalg
  • Teknisk support
  • Om Version2
  • Brugerbetingelser
  • Cookie- & privatlivspolitik

Aktuelle emner

  • Agil udvikling
  • Business Intelligence
  • Cloud computing
  • Intranet
  • It-sikkerhed
  • NemID
  • Open source CMS
  • Projektledelse
  • Scrum
  • Sharepoint intranet
  • Storage
  • Ubuntu
  • Virtualisering
  • Windows 8
  • Windows Server 2012
  • iOS 6
  • iPhone 5

Tjenester

  • iPhone-app
  • RSS-feeds
Følg @version2dk
Tilmeld dig Version2's it-nyhedsbrev og vind den nye iPad.

Version2 udgives af

  • Mediehuset Ingeniøren A/S work Trekronergade 26 2500 Valby
  • Tlf. work 33265300