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

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

Apr 05, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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