IndireIndirecct Diffuse and Glossy t Diffuse and Glossy Illumination on the GPUIllumination on the GPU
István Lazányi László Szirmay-Kalos
TU Budapest
Environment mappingfor ideal reflections
[Blinn & Newel, 1976]
Environment map = Fast approximation of environmental effects
If the environment is very (or infinitely) far…
skybox
Environment mappingfor ideal reflections
(enlarged)
(original)
re-render environment map from the new reference
point
If the environment is "close"…
performance ?!
Environment mappingfor ideal reflections
Note: (classic) environment mapping cannot deal with "large" objects
[Approximate Ray-Tracing…, Eurographics 2005]
ray-traced
Environment mappingfor ideal reflections
storing depth information
in the environment map
Ideal reflection vs. indirect illumination:
Adding cosine-weighted contributions:
Environment mappingfor diffuse & glossy reflections - classical
many sampling rays
are necessary!
= convolution
Offline convolution:
preconvolved diffuse/specular map
1. Take an environment map (with depth info. in the alpha channel)
where Δωi (i=1..N) corresponds to the texels of the environment map
ωi = ? from a point x
Environment mappingfor diffuse & glossy reflections – our proposal
2. Evaluate the convolution integral on the fly
Environment mappingfor diffuse & glossy reflections – our proposal
solid angles Δωi can easily be calculated
(no information is necessary about the environment! )
For the reference point:
cosine value is approx. the same
as in the reference point
Environment mappingfor diffuse & glossy reflections – our proposal
distance r’ is known
but cosθ’ is unknown
For an arbitrary point x:
to calculate solid angle Δωi
Instead of storing orientation information about the environment,
assume that the movement is small
Thus, localization means multiplying solid angle with a factor for each texel
precalculation of the convolution integral is not possible
Environment mappingfor diffuse & glossy reflections – our proposal
How about the bunny …?
?
To allow real-time calculation the environment map is downsampled by averaging neighboring texels.
(e.g. 128 x 128 4 x 4)
≈ clustering the texels of the environment into larger area lights
Environment mappingfor diffuse & glossy reflections – our proposal
Results(Diffuse bunny)
classical our proposal (75FPS @ 2x2, 20FPS @ 4x4)
Results(Glossy bunny, s=10)
classical our proposal
Implementation
float4 Lin = texCUBE(LREnvMap, I) ;
float r = texCUBE(LREnvMap, I).a ;
float3 L = r * I – pos ;
float r’ = length(L);
float dw = dw_texel * r2 / r’2
//Illumination formula for N,V,L
L = L / |L|;
float a = kd * max(dot(N, L), 0)
(or texture lookup)
return Lin * a * dw;
Question time!
Top Related