Ray Tracing with Rasterization

Download Report

Transcript Ray Tracing with Rasterization

Ray Tracing with
Existing Graphics
Systems
Jeremy Sugerman,
FLASHG 31 January 2006
1
Why Consider Tracing Rays?

Some techniques are hard to mimic with
rasterization.
Shadows (arbitrary view visibility)
 Reflection, Refraction effects
 Global, Indirect Illumination

2
Why Now?
Raytracing is getting fast enough to use
interactively.
 New architectures seem potentially suited
or not too far from being suited.

3
“Interactive”, Really?

Intel MLTRA (SIGGRAPH 2005)
 20-36
fps (20-36 MRays/sec) on one 3.2 GHz
 Without MLTRA, still 7-12 fps / MRays/sec

My toy SSE raytracer
 About

2 MRays/sec (primary rays)
‘Quick Hack’ Cell system at SIGGRAPH
 Claims
20-25 fps / MRays/sec (unreviewed)
4
What about Rasterization?
60+ fps over 1024x768 on $99 GPUs
 Ray tracing would need 50+ MRays/sec
casting primary rays alone.
 GPUs are getting faster at a phenomenal
rate.


Ray tracing is DOOMED!
5
It’s Not About Rasterization
The vast majority of render time is actually
shading in most 3D apps.
 True for offline rendering too.
 Whether fragments are rasterized or ray
traced, shading is the same…


To the extent the fragments are the same
6
And Who Traces Primary Rays?




We want ray tracing for shadows,
reflection/refraction, and indirect illumination.
Those are all applications of secondary rays.
The rasterizer already produces (x, y, z),
normals, etc. from primary hits.
Might as well rasterize them if you have a fast
existing mechanism. It doesn’t matter.
7
Synthesis (Thesis + Antithesis)




Bolt a ray tracer onto a conventional
rasterization based system.
Add a bit of ray tracer friendliness to a GPU.
Or, wire together a Cell and a GPU (don’t tell
Sony).
Window systems (2D), text are rasterization
tasks fundamentally (plus optional compositing)
8
“Ray Tracer Friendliness”?
Ray tracing strongly favours threaded
architectures over SIMD.
 Packet tracing leverages bandwidth at the
cost of very simple horizontal
communication.
 Being able to use queues / write buffers
seems critical.

9
How Would It Work?

Operate on ‘hits’
 Analogous

to fragments, plus weights
Each hit feeds any of three (independent)
shading choices
 Gather
rays
 Shadowing and local lighting contribution
 Secondary rays

Each produces a colour and a weight which are
accumulated into a final pixel colour
10
Shadowing And Local Lighting

Effectively runs:
Interpolate shading data (BRDF, Normal, etc.)
 Generate as many shadow rays as are desired
 Foreach shadow ray {

If (shadow ray hits light) {
Compute local light contribution from the light
}
Fits in the same per-fragment storage
 Shadow computations are indepedent

11
Gather and Secondary Rays
Gather rays just perform a weighted
lookup in a data structure (e.g. photon
map)
 Secondary rays are generated based on
the surface shading information (BRDF,
Normal, …)

 Hits
are fed back into the same pipeline
 Once generated, independent of parent
12
Kinda Like a GPU (If you squint)




GPU shading just does the weighted local
lighting calculation.
But a fragment program can generate and trace
shadow rays to mask local lighting
And a fragment program can generate rays for
final gathers.
All this formulation does is expose parallelism
and offer natural places to optimize hardware
13
I Saw You Palm That Card!

Secondary rays are a bit harder to cram into a
fragment program.
 No
 No

variable output buffers
recursion
Once generated, secondary rays are completely
independent.
 Only
need an unordered write buffer
 No state, so recursion becomes iteration

So start with only shadow and gather rays
 Exact
same system supports them, though
14
What About Coherence?


Rasterization lie: Rasterization systems exploit
coherence vastly better than ray tracing.
Really means shading coherence
 Coherence
between fragments in texture lookups
 Can bind a single material shader and rasterize only
relevant geometry
 Can perform (expensive!) shading math at a different
resolution than visibility math.
15
Ray Tracing Is Coherent Too
Packet tracing is useful because of
visibility coherence.
 The same coherence is also somewhat
relevant for local shading and lighting.
 Even, render only objects with the same
material in each pass and z-cull.

 Just
as coherent as rasterization
16
Ray Tracing Is Coherent Too
Packet tracing literature demonstrates ray
coherence helps visibility most, but also
shadow / secondary rays and shading.
 Rasterization systems save overdraw by
rendering a depth-only pass before
material shading with z-culling.
 The same technique works with rays!

17
Global Effects Are Incoherent

Nearly by definition, indirect and interobject shading effects are incoherent.
 In
rasterization or ray-traced systems!
Packet tracing literature indicates
secondary rays retain some coherence.
 Geometry level of detail can regain
coherence.

18
Coherence: Bottom Line
Without secondary rays, ray tracing shares
the coherence characteristics of
rasterization (modulo implementation).
 With secondary rays, ray tracing offers
natural mechanisms for effects that are
only awkwardly kludged via rasterization.
 Let the developer / director pick the
tradeoff.

19
What Needs To Be Done?



Persuade Pat to get a PS3 dev kit?
Get a good ray tracer running on Cell and/or a
GPU.
Simulate various extensions
 Cram
code in fragment programs
 Readback to the CPU for now
 Readback to a Cell
 Talk to the Smart Memories folks?
 Talk to GPU vendors (unlikely, they’re busy folks)
20
What’s Behind the Curtain?

K-d tree building and updates
 But,


Rasterization systems do this today
K-d tree storage and bandwidth needs
Hardware changes for traversing k-d trees or
intersecting triangles
 Unclear


if it’s even necessary initially
Level of detail with secondary rays
Decoupling visibility and shading resolutions
21
Contributions and Inspirations
Tim, Pat
 Gordon Stoll
 Bill Mark
 Phil Slusallek and the Saarland crew
 Tim Purcell, John Nickolls (NVIDIA)

22
Rasterization Lies



Rasterization has coherence Ray tracing lacks.
The rasterization argument goes: rasterize all
the geometry of a given material and there’s
excellent coherence of shading samples.
Without secondary rays, ray tracing is the same.
With secondary rays, you get better pictures.
The programmer gets to choose.
23