GDC 2005 - PowerPoint PPT Presentation

1 / 37
About This Presentation
Title:

GDC 2005

Description:

Building a Dynamic Lighting Engine for Velvet Assassin. Christian Sch ler. Velvet Assassin. 3rd person stealth game. Formerly known as 'Sabotage 1943' ... – PowerPoint PPT presentation

Number of Views:34
Avg rating:3.0/5.0
Slides: 38
Provided by: jami115
Category:
Tags: gdc | velvet

less

Transcript and Presenter's Notes

Title: GDC 2005


1
(No Transcript)
2
Building a Dynamic Lighting Engine for Velvet
Assassin
  • Christian Schüler

3
Velvet Assassin
  • 3rd person stealth game
  • Formerly known as Sabotage 1943
  • First concepts late 2000
  • Release April 2009
  • Platforms PC, X360
  • My role tech. dir. plus lead engine programmer

4
Engine Goals
  • Must look great!
  • (of course)
  • Everything is dynamically lit
  • Cannot use Lightmaps
  • Lighting is part of gameplay
  • If it looks dark, the player should be hidden!
  • Light sources become game entites.

5
Engine Goals?
  • So, what about ...
  • scene visibility
  • light influence
  • indirect lighting (like radiosity)
  • if every object can possibly move,
  • even light sources?

6
First Engine (2003)
7
Axioms (2003)
  • World is a loose octree of objects
  • Objects are OBB trees of triangles
  • Multi-pass lighting with stencil shadows
  • Occlusion culling for visibility
  • Indirect illumination via bounce lights

8
Shipping Engine (2009)
9
Axioms (2009)
  • World is a loose octree of objects
  • Objects are OBB trees of triangles
  • Hybrid single/multi-pass lighting with shadow
    maps
  • Portals for visibility
  • Indirect illumination via bounce lights
  • XBox 360 specific optimizations

10
Loose Octrees
  • Thatcher Ulrich (2001)
  • Cells are overlapping (loose)
  • Insertion is efficient
  • No need to rebuild the whole octree if an element
    moves!
  • ? Perfect as spatial index of a dynamic scene!

11
Loose Octrees contd.
Extended volume
Base cell
12
Loose Octrees contd.
Object inserted if inside extended volume ? O(1)
insertion
13
Loose Octrees contd.
  • Used in finding out
  • Objects in a view frustum
  • Objects influenced by a light
  • Lights influencing an object
  • Broad phase for ray tests
  • Gameplay objects in range
  • And everything can be dynamic!

14
OBB Trees
  • Oriented Bounding Box Tree
  • S. Gottschalk et al (1995)
  • Used on the polygon level
  • Build as a pre-process over mesh data
  • Allows efficient ray-mesh and mesh-mesh
    interference tests

15
OBB Trees contd.
Axis aligned
vs oriented!
16
OBB Trees contd.
  • Construction
  • Principal axes (gaussian point distribution)
  • Minimize Box volume
  • (possibly iterative)

eigenvectors of covariance matrix
17
Hybrid Lighting
  • A hybrid between multi-pass
  • and single-pass forward renderer
  • One pass for each primary light
  • One pass for all secondary lights combined

18
Hybrid Lighting contd.
  • Primary lights
  • Classic multi-pass (Doom 3 style)
  • One pass per primary light
  • Can cast shadows
  • The light queries for surrounding geometry

19
Hybrid Lighting contd.
  • Secondary lights
  • Classic single-pass (HL2 style)
  • Lights collected into one pass
  • (shader variation based on count)
  • Can not cast shadows
  • The geometry queries for surrounding lights
  • (up to a maximum amount)

20
Hybrid Lighting contd.
secondarypoints
primary spot
21
Hybrid Lighting contd.
primary directional
secondarypoints
22
Bounce Light
Gives appearance of first bounce indirect light
from a surface. Must not illuminate the surface
it is placed on. Has a half-sphere influence
radius determined by axis.
N
L
axis
(NL) f(axisL)
23
Bounce Light contd.
primary spot
secondarybounce
24
Bounce Light contd.
2 secondaryambients
primaryspot
25
Bounce Light contd.
... and even back in 2003 (its not rocket
science)
26
So, for each frame
  • Get all primary lights in view
  • Distribute shadow map pool
  • Render shadow maps, for each
  • Render all objects contained in light frustum
  • Get all objects in view
  • Render base pass
  • For each object, collect nearest N secondary
    lights (sorted by importance) for the shader
  • Render additive passes for each
  • primary light for each object that is in the
    view and also in the light frustum.
  • That is why you need an efficient spatial
  • index data structure.

27
Fog Zones
  • A.k.a. There has to be at least
  • one benefit for manual
  • portalization!
  • Here it is Fog Zones!

28
Fog Zones contd.
portal separates fog environments
29
Fog Zones contd.
from the other side
30
Fog Zones contd.
  • Multiply-Add is your friend!
  • (instead of lerping against a constant fog
    color)
  • C C0 T S
  • C0 original color
  • T fog transmittance
  • S fog in-scatter
  • (1-T) CFog traditionally

31
Fog Zones contd.
  • C ( C0 TB SB ) TA SA

A
B
portal
C C0 ( TB TA ) ( SB TA SA )
32
Fog Zones contd.
  • Modify T and S of the new environment with T and
    S from the portal polygon
  • Calculate fog from the distance of the portal
  • Repeat recusively

33
Fill Optimization
  • Only done for XBox 360
  • Selected particle effects rendered into
    off-screen render target at half resolution to
    save fill rate
  • (against half resolution depth buffer)
  • Composited over the final image

34
Fill Optimization contd.
35
Fill Optimization contd.
  • Again, multiply-add solves the math
  • (in the form of pre-multiplied alpha)
  • Off-screen target
  • CTarget (1-AParticle) CTarget CParticle
  • ATarget (1-AParticle) ATarget AParticle
  • Compositing
  • CFrame (1-ATarget) CFrame CTarget

36
Multi-threading
  • XBox 360 needed it a dual-core PC at least
    benefits
  • First thread performs all spatial queries and
    compiles a drawlist
  • Second thread sets shader registers, render
    states and submits batches
  • Most scenes from 300 to 1200 batches/frame

37
The End
  • Questions?
Write a Comment
User Comments (0)
About PowerShow.com