summer games university - day 3

48

Upload: clemens-kern

Post on 13-Jan-2015

1.964 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Summer Games University - Day 3
Page 2: Summer Games University - Day 3

Summer Games University

Day 3: Graphics

Page 3: Summer Games University - Day 3

10.04.2023 3Summer Games University 2010

Now in color and realtime

Image sources: Vergemce, Crytek

Page 4: Summer Games University - Day 3

10.04.2023 4Summer Games University 2010

Connecting the Engine

Let’s take a look on the interface an engine might have and find some good patterns on how to model them.

Read-only

Write-only

Communication

Create a manager instance in the engine, which translates incoming data(Player Input, ..)

Use a renderer to create a representation of required information(Graphics, Sound, ..)

No generic pattern. You will have to integrate it into the architecture(Physics, ..)

Page 5: Summer Games University - Day 3

10.04.2023 5Summer Games University 2010

Connecting the Graphics

First idea:

Every gameobject has a Render() method

This is your architecture then

Image source: marcinchady GDC Canada Behavior presentation

Page 6: Summer Games University - Day 3

10.04.2023 6Summer Games University 2010

Multithreading

Gameobject

Gameobject

Gameobject

HUH?!!!

Render(…)

Render(…)

Render(…)

Thread

Thread

Thread

Page 7: Summer Games University - Day 3

10.04.2023 7Summer Games University 2010

Multithreading

Rendering is a pipelined process

Random order results in many state changes

Only one Renderer

Defined Order

Page 8: Summer Games University - Day 3

10.04.2023 8Summer Games University 2010

Scene

Connecting the Graphics

Better: data driven architecture

Gameobject

Gameobject Extractor Rendererdata data

Camera

Page 9: Summer Games University - Day 3

10.04.2023 9Summer Games University 2010

Connecting the Graphics

Render Part

material

geometry

next

Material

Geometry Part

Vertex Buffer

transformation

next

Matrix ListRender Part

Geometry Part

Page 10: Summer Games University - Day 3

10.04.2023 10Summer Games University 2010

Scene

Connecting the Graphics

Multithreaded version

Gameobject

Gameobject

Extractor

Renderer

Camera

Buffer 1

Buffer 2

Main thread Render thread

Page 11: Summer Games University - Day 3

10.04.2023 11Summer Games University 2010

Connecting the Graphics

Resource Handles: Make them double buffered as well!

Resource Handle

Resource 1

Resource 2

Renderer

Active resource

Resource Loader

Writes to

Can be in its own thread to do resource streaming

Page 12: Summer Games University - Day 3

10.04.2023 12Summer Games University 2010

Let’s leave the architecture for a while…

Image source: Mumbai, Elphinstone Mills Tower, skyscraperpage.com

Page 13: Summer Games University - Day 3

10.04.2023 13Summer Games University 2010

…let’s do some graphics

Geometry Light

Material

X?

Page 14: Summer Games University - Day 3

10.04.2023 14Summer Games University 2010

Geometry

Engine3d modeling tool

Page 15: Summer Games University - Day 3

10.04.2023 15Summer Games University 2010

Lighting Overview

DynamicStatic

Image sources (left to right): “Half Life 2” Valve, “Unreal Tournament 3” Epic Games, “GTA4” Rockstar, “Crysis 2” Crytek

Page 16: Summer Games University - Day 3

10.04.2023 16Summer Games University 2010

Static Lighting

Prerendered lightmaps stored in textures

Page 17: Summer Games University - Day 3

10.04.2023 17Summer Games University 2010

Static Lighting

What about normalmaps and moving objects?

Source: “Half Life 2 Shading Paper” Valve (http://www.valvesoftware.com/publications/2004/GDC2004_Half-Life2_Shading.pdf)

You need special tools to do this!

Page 18: Summer Games University - Day 3

10.04.2023 18Summer Games University 2010

Static Lighting

Simple solution for moving objects: Hemispherical ambient

Looks great! (except for the missing shadows…) Huh, radioactive teapots?

Page 19: Summer Games University - Day 3

10.04.2023 19Summer Games University 2010

Dynamic Lighting

Forward Shading / Rendering

Vertex Shader Rasterizer Pixel Shader

Page 20: Summer Games University - Day 3

10.04.2023 20Summer Games University 2010

Forward Shading / Rendering

Problems?

Vertex Shader Rasterizer Pixel Shader

10…100….

Page 21: Summer Games University - Day 3

10.04.2023 21Summer Games University 2010

Forward Shading / Rendering

Vertex Shader Rasterizer Pixel Shader

4…8

+

Page 22: Summer Games University - Day 3

10.04.2023 22Summer Games University 2010

Forward Shading / Rendering

Problems?

geometry overhead

complexity O(G*L)

material-light combinations

unpredictable performance

Page 23: Summer Games University - Day 3

10.04.2023 23Summer Games University 2010

Dynamic Lighting

Deferred Shading / Rendering

pass 1:geometry

pass 2:light

G-Buffer

Page 24: Summer Games University - Day 3

10.04.2023 24Summer Games University 2010

Deferred Shading / Rendering

Page 25: Summer Games University - Day 3

10.04.2023 25Summer Games University 2010

Deferred Shading / Rendering

*Depth and Normals are stored in Viewspace

Depth Glossiness R16G16F

Normal ZNormal YNormal X R10G10B10A2

Diffuse Color Self Illum R8G8B8A8

Velocity Specular ID R8G8B8A8

Page 26: Summer Games University - Day 3

10.04.2023 26Summer Games University 2010

Deferred Shading / Rendering

Starcraft 2

Emissive R16G16B16A16F

Specular R16G16B16A16F

Diffuse Color AO R16G16B16A16F

Normal Depth R16G16B16A16F

optional

Source: StarCraftII Effects & Techniques

Page 27: Summer Games University - Day 3

10.04.2023 27Summer Games University 2010

Deferred Shading / Rendering

Advantage

no geometry overhead

complexity O(G+L)

no need for “ubershader”

Page 28: Summer Games University - Day 3

10.04.2023 28Summer Games University 2010

Deferred Shading / Rendering

Disadvantage

high memory bandwidth

no transparent geometry

no native anti-aliasing

restricted to one shading-type (phong)

Page 29: Summer Games University - Day 3

10.04.2023 29Summer Games University 2010

Light Prepass Rendering

pass 1:geometry

pass 3:material

pass 2:light

Page 30: Summer Games University - Day 3

10.04.2023 30Summer Games University 2010

Light Prepass Rendering

Advantage

less memory bandwidth

any possible shading type

native anti-aliasing

Page 31: Summer Games University - Day 3

10.04.2023 31Summer Games University 2010

Light Prepass Rendering

Disadvantage

render geometry twice

again no transparent geometry

Page 32: Summer Games University - Day 3

10.04.2023 32Summer Games University 2010

Who uses it?

Forward Shading Light PrepassDeferred

Shading

Image sources (left to right): “Doom 3” id Software, “Crysis” Crytek, “Stalker” GSC, “Starcraft 2” Blizzard, “GTA4” Rockstar, “Crysis 2” Crytek

Page 33: Summer Games University - Day 3

10.04.2023 33Summer Games University 2010

Going one step further…

Deferred

+ no geometry overhead- high memory bandwidth- no transparent geometry- no anti-aliasing- only one shading type

Light Prepass

- render geometry twice+ less memory bandwidth- no transparent geometry+ anti-aliasing+ any possible shading type

Take the advantages and mix both approaches together

Page 34: Summer Games University - Day 3

10.04.2023 34Summer Games University 2010

Going one step further…

Depth Glossiness R16G16

Normal ZNormal YNormal X R10G10B10A2

Diffuse Color Self Illum R8G8B8A8

Velocity Specular ID R8G8B8A8

minimal G-Buffer as used for a light prepass renderer

Page 35: Summer Games University - Day 3

10.04.2023 35Summer Games University 2010

Renderpipeline

G-Buffer Pass Light Pass Final Light Pass

Depth/Glossiness

Normal

Color/Self Illum

Velocity/Spec/ID

L-Buffer (Final) Image

+ less memory bandwith+ all objects using phong shading in one geometry pass+ can do other shading types, because we have a Light Buffer (need to be renderer twice)

- anti-aliasing (can be done as post process)

- transparent geometry

Page 36: Summer Games University - Day 3

10.04.2023 36Summer Games University 2010

Demo

Page 37: Summer Games University - Day 3

10.04.2023 37Summer Games University 2010

Transparent Geometry

Fallback to forward shading -> difficult to keep lighting consistent

Dithering only in L-Buffer

Image sources: “GTA4” Rockstar, “Inferred Lighting” Paper Scott Kircher, Alan Lawrance

Dithering

Page 38: Summer Games University - Day 3

10.04.2023 38Summer Games University 2010

We still have no architecture for the renderer itself

Image source: www.okhistory.org

Page 39: Summer Games University - Day 3

10.04.2023 39Summer Games University 2010

Renderer Architecture

Render Pipeline

DX9 Render Device

Wrapper

DX11 Render Device

Wrapper

PS3 Render Device

Wrapper

device.Draw(…)

Page 40: Summer Games University - Day 3

10.04.2023 40Summer Games University 2010

Renderer Architecture

Render Pipeline

foreach (…){ PrepareRenderTargets(); pass.Execute(renderTargets); }

GBuffer Pass

Light Pass

HDR Pass

Screen Pass

Pass List

RenderTarget List

Page 41: Summer Games University - Day 3

10.04.2023 41Summer Games University 2010

Renderer Architecture

Data driven again:

Render Pipeline Configuration File

Page 42: Summer Games University - Day 3

10.04.2023 42Summer Games University 2010

Renderer Architecture

{rendertargets: [

{rw:1, rh:1, f:10},{rw:1, rh:1, f:3},{rw:1, rh:1, f:1},{rw:1, rh:1, f:1},…

],passes: {

GBufferPass: {rt: [0, 1, 2, 3]

},AmbientOcclusionPass: {

rt: [0, 4, 5, 6]},LightPass: {

rt: [0, 1, 2, 3, 6, 7, 8]},…

}}

Page 43: Summer Games University - Day 3

10.04.2023 43Summer Games University 2010

Material

Shader

Page 44: Summer Games University - Day 3

10.04.2023 44Summer Games University 2010

Material

<material> <shader> <diffuse> <map> <source>materials/metal/base03.dds</source> </map> </diffuse> <reflection fresnel="1.5"> <map> <source>materials/metal/env.dds</source> <type>cube</type> <amount>1.0</amount> <saturation>0.2</saturation> </map> <map> <source>materials/metal/base03.dds</source> <channels>alpha</channels> <type>mask</type> </map> </reflection> </shader></material>

…float4 CombineStages(VS_OUTPUT Input){ float3 vColor = (float3) 0; float fOpacity = 1.0;

// Diffuse stage #ifdef DIFFUSE float3 vDiffuse = GetDiffuse(Input); #ifdef DIFFUSE_TINT vDiffuse *= DIFFUSE_TINT; #endif vColor = vDiffuse; #endif

// Diffuse lighting stage #ifdef LIGHTING_LIGHTMAP float3 vLighting = GetStaticLighting(Input); vColor *= vLighting; #else #ifdef LIGHTING_DYNAMIC_LIGHTING float3 vLighting = GetDynamicLighting(Input); vColor *= vLighting; #endif #endif….

Shader Generation

Page 45: Summer Games University - Day 3

10.04.2023 45Summer Games University 2010

Material

Shader Generation

Page 46: Summer Games University - Day 3

10.04.2023 46Summer Games University 2010

Demo

Page 47: Summer Games University - Day 3

10.04.2023 47Summer Games University 2010

Optimizations

Minimize State-Changes

Culling

Instancing

Shader optimizations

Draw front-to-back

Page 48: Summer Games University - Day 3

10.04.2023 48Summer Games University 2010

?questions

clemenskern.de