Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der...

30
Go Parallel – Multicore Programming & Game Development “Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek” Martin Mittring Lead Graphics Programmer

Transcript of Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der...

Page 1: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Go Parallel –Multicore Programming & Game Development

“Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek”

Martin Mittring

Lead Graphics Programmer

Page 2: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Einer für alle, alle für einen

1894, Maurice Leloir (1851-1940)

“Die drei Musketiere” Alexandre Dumas, 1844

Page 3: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Crytek

• Hauptstudio in Frankfurt

• 3 weitere Studios (Kiev, Budapest, Sofia)

• Firmensprache Englisch

• 30+ Nationalitäten

• CryEngine 1: PC

• CryEngine 2: PC, XBox360, PS3

Page 4: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Crytek Spiele

Far Cry 2004UbisoftPC

2007Electronic Arts

PCCrysis*

* nun auch Crysis Wars und Crysis Warhead

Page 5: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Computer Spiele Industrie• Produktion:

– Game (Spiele spezifischer Quellcode)– Engine (Wieder verwendbarer Quellcode, Groß, Lizenzierbar)– Tools (Editor, Resource Compiler, Plug-ins)– Art, Design (3D Objekte, Texturen, Levels)

• Meilensteine (CXP, Demo, Konkurrenz, Technologie Fenster)• Real-time, mehrere Plattformen, Mehrspieler, Cheating• Technologie ist im schnellen Wandel:

– CPU, Fixed Function, Shaders, … , erneut CPU?• Marketing, Publisher, Die meisten Spiele werfen keinen Gewinn ab• Qualität gegen Performance• Wenige % Performance erfordern mehr und mehr Arbeit• Multithreading macht es nicht leichter [Sutter05]

Page 6: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Spiel-Engine Herausforderungen• Verschiedenste HW (x CPUs, GPU, Speicher)• Riesige Welten• Produktionsprobleme

(Kosten, Zeit, Termindruck)• Massen Mehrspieler• Qualitätserwartung (HDTV,

Anti-Aliasing, Stereo Darstellung,stabile Frame Rate,„Uncanny Valley“)

Page 7: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Multiprocessing in Game EnginesI. CPU

(z.B. Doom)

II. += Grafikkarten (Fixed Function)(z.B. Far Cry)

III. += GPU (Shaders)(z.B. Far Cry)

IV. += x CPU (MT performancekritische Teile)(z.B. Crysis)

V. Job basierend? Verteilt? Spezialsprache?

Page 8: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Warum Grafikkarten schnell sind?

• OpenGL/DirectX = Erfolgreichste Multiprocessing Sprache?

• SIMD, VLIW (nicht immer)• Optimiert für eine Anwendung (z.B. bi-linearer

Filter, Speicherorganisation)• Latenz wird versteckt durch

verschränktes abarbeitenvon Datenpakten

Page 9: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Kommen wir jetzt zu etwasvöllig anderem

Page 10: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Dreiecks Rasterisierung

• Fest verdrahtet in Grafikkarten• Softwarerendering wird weiterhin benötigt

(z.B. in CryEngine um Objekte auf Verdeckung zu testen)

• SW Rasterisierung hat ein Come-back (Larrabee)

• Gutes Beispiel wie ein Algorithmus parallelisiert werden kann

… nun im Detail

Page 11: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Dreiecks

Gegeben:

3 Eckpunkte float2

2D Bildraster

Rasterisierung

Page 12: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Wo soll

rasterisiert

Eine klare Definition ist

essenziell:

Pixelzentrum im Dreieck,

Pixels am Rand je nach

Kantenrichtung (Ganzzahl)

=> Keine Löcher

=> Kein Kanten überzeichnen

werden?

Page 13: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Klassischer

Ansatz

Scan-Line Algorithmus

Sonderfälle

Serieller Algorithmus

Page 14: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Halb-

Raum

Die drei Kanten

definieren drei Halb-Räume,

Im Dreieck wird zu

3 Halb-Raum Tests

Umschließendes Rechteck

wäre ineffizient

Page 15: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Halb-

Raum

Pakete

Paket von mehreren Pixeln

muß bearbeitet werden

wenn teilweise im Dreieck

Umschließendes Rechteck

ist effizient für kleine Dreiecke

Page 16: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Drei

Paket

Typen

• Vollständig außerhalb=> Paket verwerfen

• Vollständig innerhalb=> Alle Pixel bearbeiten

• Teilweise innerhalb=> Pixel Test nötig

Page 17: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Halb-

Raum

mit Paketen

• SIMD freundlich

• Ganzzahl Arithmetik(exakt, schnell)

• Vermeidet Verzweigungen

• Cache freundlich[Nicolas04]

Page 18: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Kommen wir jetzt zu etwasvöllig anderem

Page 19: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Drei Render Algorithmen

• Rasterisierung (keine Folie)

• Ray-tracing (vier Folien)

• REYES (drei Folien)

• Die drei Methoden im Vergleich (eine Folie)

(kein kompletter oder gerechter Vergleich)

Page 20: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Ray-tracing• Einfach auf CPU

(Stack Rekursion)• Raumunterteilung

um Strahltests zu beschleunigen

• Rechenintensiv• Elegante Lösung• Parallel aber nicht

cache freundlich• Real-time

problematisch

[Hauser02a]

Page 21: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Ray-tracing Generationen 1/3

RekursiveStrahl-verfolgung

Harte Schatten,perfekte Reflektionen /Lichtbrechung,Verdeckung gelöst, Adaptives AA

Page 22: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Ray-tracing Generationen 2/3 Verteilte

Strahl-verfolgung[Carp84]

mehr Integrations-Samples:

Bewegungsunschärfe,unscharfe Reflektionen,Weiche Schatten,DOF, IBL Integration

Page 23: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Ray-tracing Generationen 3/3

GlobaleBeleuchtung

mehr Integrations-Samples:

Indirekte Beleuchtung

© GNU Free Documentation Licensee

Page 24: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

REYES, Renderman

Lucasfilm Computer Graphics (jetzt Pixar)

Verwendet in Pixar und vielen anderen Filmen:

Wall-E, Ratatouille, Transformers, Cars, … [Pixar08]

1984

Page 25: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

REYES• Rekursive Aufteilung in

dice-able Primitiven• Sichtbare dice werden

grids von Mikropolygonen(~ Pixel Größe)

• Schattierung pro grid Mikropolygon oder Punkt(Farbe und Position)

• Renderman Shader Sprache (C ähnliche Syntax)

Page 26: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

REYES: Mikropolygon Abtastung

• Ein Pixel besteht aus vielen verteilten Abtastpunkten

• DOF, AA, Bewegungsunschärfe(effizienter, weil nach Shading)

• A-Buffer für OIT• Tiled Rendering

für bessere Speicher Lokalität,für weniger Speicherverbrauch,für Parallelverarbeitung

Page 27: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Die drei Methoden im Vergleich• Rasterisierung:

Aug-Strahlen, Dreiecke, Transparenzproblematik, GPU

• Ray-tracing:perfekte Reflektionen / Lichtbrechung, Dreiecke sind limitierend,weniger Real-time: Verteiltes Ray-tracing, Global Illumination

• REYES:Displacement Mapping, Level of Detail, Anti-Aliasing

• Shading / Beleuchtung ist orthogonal zur Methode [Hauser02b]• Film Realismus statt physikalischer Korrektheit• Ambient Occlusion, Hybride Lösungen

Page 28: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Fazit• “Die Bedeutung von Multicore in der Spieleentwicklung

bei Crytek”• PS3 (1*2+7 Cell)

XBox360 (3*2 PowerPC)Intel/AMD (1/2/4/?)

• Multi / Many Cores?• Diese Präsentation soll motivieren, dafür benutzte ich

mein Lieblingsthema: Computergrafik

Page 29: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.
Page 30: Go Parallel – Multicore Programming & Game Development Die Bedeutung von Multicore in der Spieleentwicklung bei Crytek Martin Mittring Lead Graphics Programmer.

Querverweise• [Nicolas04] Advanced Rasterization, DevMaster.net

www.devmaster.net/forums/showthread.php?t=1884

• [Carp84] Distributed Ray Tracing, Siggraph 1984http://www.csie.ntu.edu.tw/~cyy/courses/rendering/05fall/assignments/pres/slides/DRT.ppt

• [Hauser02a] CGR4- Raytracing (German)http://www.vrvis.at/vr/cgr4/slides/CGR4-2002-RayTracing.pdf

• [Hauser02b] CGR4- Beleuchtung (German)http://www.vrvis.at/vr/cgr4/slides/CGR4-2002-Beleuchtung.pdf

• [Sutter05] Herb Sutter, The Free Lunch Is OverDr. Dobb's Journal, 30(3), March 2005http://www.gotw.ca/publications/concurrency-ddj.htm

• [Pixar08] Renderman Movieshttps://renderman.pixar.com/products/whatsrenderman/movies.html

www.crytek.com/inside/presentations