presentation - AUEB Graphics Group

Download Report

Transcript presentation - AUEB Graphics Group

Introduction | Crepuscular rays and Caustics
• Caustics are high intensity highlights due to convergence of light via
different paths
• Crepuscular rays (godrays) are formed by the in-scattering of light in
dense participating media, like water
• Why are godrays and caustics important?
– Both phenomena present in shallow water environments
– They convey the presence of a dense volume
– Define the proximity and direction of surface and lighting
Introduction | Offline rendering
• Caustics:
– Bidirectional ray tracing
– Particle tracing from light source (sun)
• Local contribution to shading (no gathering step)
• Godrays:
– Ray marching - Integration of in/out-scattering functions over the
line of sight in view direction.
• Monte Carlo integration
• Stratified sampling with constant jittering
Moving to Real Time | Early Approaches
• Caustics
– Render the caustics as an animated
texture
– Projective texturing
– Inverse tracing of rays to a light map
above water using surface vertex data
– Intersect geometric light shafts
(polyhedra) with receiving geometry
• Godrays
– Render godrays as geometry “shafts”
(polyhedra)
– Sample a variable density function on
planes parallel to the view plane.
Moving to Real Time | Particle Tracing?
• Generic GPU-based particle tracing:
– Fully captures the effects
– Unsuitable for real-time rendering (too slow)
• Point-based particle tracing (splatting)
– Can effectively model caustics
– Replaces near-sample search (particle tracing) by point
accumulation
– The approach:
• Considers light-space line segments
• Intersects segments with Z-buffer
• Accumulates point samples in frame buffer
– Does not account for godrays
Our Method | Introduction
• Specialized particle tracing
• Traces particles from the light through the water surface to the
underwater part of the scene
• Handles both caustics and godrays
• Compatible with both direct and deferred rendering schemes
Our Method | Overview
•
•
•
•
•
•
•
•
Render the scene (camera view)  depth buffer
Render the scene (light view)  shadow map
Create photon mask
Cast photons:
– Generate coarse light-space point grid
– Tesselate the grid
– Cast photons and create refracted trajectories
– Intersect trajectories with depth buffer  photon
positions
– Produce underwater godray line segments
Draw (image space splatted) photons  caustics
Draw (image space weighted) godrays
Filter caustics and godrays
Combine results
Mask
Frame Preparation
• Rendering:
– The scene is normally rendered
– We record the frame buffer (in FBO)
– The shadow map of the “sun” light source is
captured
• The above steps are standard to any rendering
engine
• Photon (shadow) mask:
– The shadow map is compared with the water
level
– No photons will be cast for lit points above
water level (outside the water volume)
– Saves on calculations
– Ensures proper shadowing for floating props
Depth buffer
Shadow map
Mask
Photon Tracing | Photon generation
(in light space)
• Render a coarse grid of points
• In a geometry shader:
– Tesselate grid
– Generate primary ray
– Produce refracted ray
– Calculate intersection point
between refracted ray and
shadow map
Photon Tracing | Intersection estimation
• Uses an Newton-Rhapson-like image space (shadow map) estimator
• Approximates the intersection point in two iterations:
A
Water surface
intersection
B
Initial estimate
Water surface
intersection
d
second estimate
Water surface
intersection
Initial estimate
d
projection
projection
final point
Rendering the Caustics | Splatting
• Splatting replaces the photon storage and search stage of
conventional photon mapping
• Photons are transformed to screen space and rendered as points
• We splat the photons by perspectively varying the point primitive size:
– Account for perspective foreshortening
– Ensure adequate blending for photons near view plane
– Avoid excessive overlap for distant photons
• Points are attenuated according to distance from water surface
(absorption)
γ = 9.2W/sr
Rendering the Caustics | Splatting
Rendering the Godrays
• Godrays are rendered as line primitives in screen space
• They are attenuated per fragment accounting for:
– Fragment-to-eye absorption (out-scattering)
– Surface-to-fragment absorption (out-scattering)
– Light-to-viewing direction contribution (in-scattering)
dfromViewer
Line
frags
• Mie scattering is modeled by the Henyey-Greenstein phase function
Post-Filtering
•
•
•
•
In low-intensity areas (poor photon concentration), aliasing may occur
The same goes for the godrays
Both buffers are post-filtered to spread the intensity
We use a rotating-kernel joint bilateral gaussian filter
– Kernel size is modulated by depth
skernel  z  smin  (1  z ) smax , z  [0,1]
Post-Filtering | Caustics
Unfiltered
Filtered
Post-Filtering | Godrays
Unfiltered
Filtered
Putting it All Together
•
•
Godrays + caustics + filtering + SSAO + shadows: 1440X850 @ 60+ fps
800X600 @ 110+ fps
Thank you!
The work presented in this paper is funded by the Athens University of
Economics and Business Special Account for Research Grants (EP-160010/00-1)