A Practical Analytic Single Scattering Model for Real Time Rendering Bo Sun Columbia University Ravi Ramamoorthi Columbia University Srinivasa Narasimhan Carnegie Mellon University Shree Nayar Columbia University Sponsors: ONR, NSF
Light Transport in Scattering Media Scattered (glows) Point Source Direct Transmission Viewer Surface Point Clear Day Foggy Day Clear Day Foggy Day
Our Technical Contributions Explicit compact Airlight formula Explicit Surface Radiance formula - Accurate - Simple fragment shader - Fully interactive Assumptions: Isotropic point light sources Homogenous media Single scattering No volumetric shadows
The Airlight Integral : scattering coefficient of the medium Point Source, s Viewer, v Surface Point, p The Airlight Integral:
The Airlight Integral : scattering coefficient of the medium Point Source, s Viewer, v Surface Point, p The Airlight Integral:
The Airlight Integral : scattering coefficient of the medium Point Source, s Viewer, v Surface Point, p The Airlight Integral:
The Airlight Integral : scattering coefficient of the medium Point Source, s Viewer, v Surface Point, p The Airlight Integral:
The Airlight Integral : scattering coefficient of the medium Point Source, s Viewer, v Surface Point, p The Airlight Integral:
The Airlight Integral : scattering coefficient of the medium Point Source, s Viewer, v Surface Point, p The Airlight Integral:
The Airlight Integral : scattering coefficient of the medium Point Source, s Viewer, v Surface Point, p The Airlight Integral:
The Airlight Model Originally 4D: , , , Point Source, s Surface Point, p Viewer, v Originally 4D: , , ,
The Airlight Model Originally 4D: , , , Point Source, s Surface Point, p Viewer, v Originally 4D: , , ,
The Airlight Model Originally 4D: , , , Point Source, s Surface Point, p Viewer, v Originally 4D: , , ,
Special Function F Well behaved and purely numerical 2D function. Pre-computed once for all and stored as a 2D texture.
Shader Code for Airlight Model float AirLight( ) { float u = A1(beta, Dsv, gammasv); float v1 = 0.25*PI+0.5*atan((DvpDsv*cos(gammasv))/(Dsv*sin(gammasv))); float v2 = 0.5*gammasv; float4 f_1=texRECT(F, v1, u); float4 f_2=texRECT(F, v2, u); return A0(lightIntensity, beta, Dsv, gammasv)*(f_1.x-f_2.x); }
Shader Code for Airlight Model float AirLight( ) { float u = A1(beta, Dsv, gammasv); float v1 = 0.25*PI+0.5*atan((DvpDsv*cos(gammasv))/(Dsv*sin(gammasv))); float v2 = 0.5*gammasv; float4 f_1=texRECT(F, v1, u); float4 f_2=texRECT(F, v2, u); return A0(lightIntensity, beta, Dsv, gammasv)*(f_1.x-f_2.x); }
Shader Code for Airlight Model float AirLight( ) { float u = A1(beta, Dsv, gammasv); float v1 = 0.25*PI+0.5*atan((DvpDsv*cos(gammasv))/(Dsv*sin(gammasv))); float v2 = 0.5*gammasv; float4 f_1=texRECT(F, v1, u); float4 f_2=texRECT(F, v2, u); return A0(lightIntensity, beta, Dsv, gammasv)*(f_1.x-f_2.x); }
Shader Code for Airlight Model float AirLight( ) { float u = A1(beta, Dsv, gammasv); float v1 = 0.25*PI+0.5*atan((DvpDsv*cos(gammasv))/(Dsv*sin(gammasv))); float v2 = 0.5*gammasv; float4 f_1=texRECT(F, v1, u); float4 f_2=texRECT(F, v2, u); return A0(lightIntensity, beta, Dsv, gammasv)*(f_1.x-f_2.x); }
Shader Code for Airlight Model float AirLight( ) { float u = A1(beta, Dsv, gammasv); float v1 = 0.25*PI+0.5*atan((DvpDsv*cos(gammasv))/(Dsv*sin(gammasv))); float v2 = 0.5*gammasv; float4 f_1=texRECT(F, v1, u); float4 f_2=texRECT(F, v2, u); return A0(lightIntensity, beta, Dsv, gammasv)*(f_1.x-f_2.x); }
Implementation Choices for Airlight 64x64 floating point texture for F table Add a skybox to invoke vertex/pixel shader to compute Airlight. Nearest Neighbor Bilinear Interpolation
Airlight Demo Demo
The Surface Radiance Model Point Source, s BRDF Viewer, v Surface Point, p
The Surface Radiance Model Point Source, s BRDF Viewer, v Surface Point, p : Lambertian, Phong : , 1D function on 2D 2D:
Special Function G
Shader Code for Surface Radiance float SurfaceRadiance( ) { float4 G = texRECT(G_20, Tsp, thetas); return Ks*Io*beta/(2*Dsp*PI)*G; }
Shader Code for Surface Radiance float SurfaceRadiance( ) { float4 G = texRECT(G_20, Tsp, thetas); return Ks*Io*beta/(2*Dsp*PI)*G; }
Shader Code for Surface Radiance float SurfaceRadiance( ) { float4 G = texRECT(G_20, Tsp, thetas); return Ks*Io*beta/(2*Dsp*PI)*G; }
Implementation Choices for Surface Radiance Need to add radiance contribution from attenuated direct lighting. Attenuate the final radiance according to distance to the camera. Point Source, s BRDF Viewer, v Surface Point, p
Implementation Choices for Surface Radiance Need to add radiance contribution from attenuated direct lighting. Attenuate the final radiance according to distance to the camera. Point Source, s BRDF Viewer, v Surface Point, p
Lambertian and Phong Spheres Clear Day Lambertian Phong=10 Phong=20 Foggy Day
The Complete Model Surface Radiance Model Airlight Model 2 Lookups 2 Lookups and
The Complete Model Surface Radiance Model Airlight Model 2 Lookups 2 Lookups and Image size Lights Terms to approximate the phase function Texture lookups Analytic expression Maya Plug-in available from our website.
Demo: Complex Geometry
Complex Lighting and Material Rendering time is linear in the number of lights. Viewer, v BRDF Surface Point, p
Point Spread Function Assume equidistant point sources Scattering is essentially Point Spread Function (PSF). Angles Intensity Input Output Angles Intensity Angular Component Amplitude Component PSF
Point Spread Function Assume equidistant point sources Scattering is essentially Point Spread Function (PSF). Angles Intensity Input Output Angles Intensity Angular Component Amplitude Component PSF Tsv*exp[-Tsv] * Pre-convolved Environment Map
Convolution with PSF BRDF Environment Map Clear Day Foggy Day
Demo: PSF for Complex Lighting
Summary An OpenGL-Like Practical Real-Time Rendering Technique: Analytic Airlight Model 50fps 40fps
Summary An OpenGL-Like Practical Real-Time Rendering Technique: Analytic Airlight Model Analytic Surface Radiance Model 50fps 60fps
Summary An OpenGL-Like Practical Real-Time Rendering Technique: Analytic Airlight Model Analytic Surface Radiance Model PSF for Complex Lighting and Natural Material 100fps 20fps
Acknowledgement R. Wang, J. Tran and D. Luebke for the PRT code. S. Premoze for the Monte Carlo simulation code. P. Debevec for the light probes. W. Matusik for the tabulated BRDF. Supported by a Columbia University Presidential Fellowship, an ONR Grant, an NSF Grant, an NSF CAREER award, and equipment donations from Intel and NVIDIA.
Thanks for Listening! Maya Plug-in, 2D tables, and Shader code: http://www.cs.columbia.edu/~bosun/research.htm
The End
The End