fast cascade vsm by zhang jian. dynamic shadow tech shadow volumeshadow map basic algorithm...

36
Fast Cascade VSM By Zhang Jian

Upload: cleopatra-tiffany-barker

Post on 13-Jan-2016

309 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

Fast Cascade VSM

By Zhang Jian

Page 2: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

Dynamic Shadow TechShadow Volume Shadow MapBasic Algorithm

PCF VSM CSM ESM

Per Object Shadow Deferred Shadow

Soft Shadow

Rendering Stage

Cascade Selection

Perspective Alias PSM LiPSM TSM CSM

PSSM 2D CSM 3D CSM

Page 3: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

Outline

1.Basic Shadow Map and problems

2.Variance Shadow Map

3.Cascade Shadow Map In Our Engine

4.Shadow Mask

Page 4: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

1. Shadow Map• Basic Idea: If a light can see a point, the

point will be lit by the light.

Page 5: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

1. Shadow Map

3. Done!

1.Render a texture by using light as a camera, that’s shadow map, the pixel value is depth value.

2. Transform the current position into shadow map space (light space), test if it’s occluded by corresponding shadow map pixel.

?

Page 6: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

1.Shadow Map

Peter panning

Perspective Alias

Page 7: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

1. Shadow Map

Peter panning

Self-shadow Acne

Page 8: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

1.Shadow Map

Peter Panning

Page 9: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

1.Shadow Map

Hard Edge

Page 10: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

1. Shadow Map

Dynamic Alias:

• Unstable resolution( PSM)• Edge swimming effect

Page 11: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

2.Variance Shadow Map

Soft Shadow

Page 12: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

2.Variance Shadow Map

• Probability theory• dr is the current receiver depth• d0 is the random variable to represent

the occluder depth.

ror dddf Pr)(

Our goal : define some states between shadow and lit.

Page 13: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

2.Variance Shadow Map

• Chebyshev’s inequality (when dr > μ)

22

2

max)Pr(r

rrod

dpdd

odE

222oo dEdE

Page 14: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

2.Variance Shadow Map

• Understand VSM by your way.

float d = ( vLightSpacePos.z ) - Depth;float p_Shadow = 1;if (d > 0) { float variance = ( DepthSquare ) - ( Depth * Depth );

p_Shadow = variance / ( variance + d*d );}

Page 15: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

VSM In Our Engine

• Render Z and Z2 into a 2 channels render target– G16R16 ( hardware filter, 1 cycle)– 4x MSAA on Xenon ( Free, No predict-tilling)– RGBA8 on PC ( may provide multiple

solutions for difference GPU)• Prefilter: 2 pass Gaussian blur• Generate Mipmaps on Xenon.• VSM shadow testing.

Page 16: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

2.Variance Shadow Map

• The good:– Very cheap Soft shadow: Support Pre-

filter, Blur == PCF.– Much Better self shadow quality ( solve

the shadow bias perfectly) – The ability to use high quality texture

filter( trilinear, anistropic filter)

Page 17: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

2.Variance Shadow Map• The Bad: Light leaking.

Page 18: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

2.Variance Shadow Map

• Light leaking.– Reduce Geometry complexity, use Low

Lod for shadow caster.– Tune parameters.(remapping the result)

Page 19: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

3. Cascaded Shadow Map

Resolution problem

Page 20: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

Cascaded Shadow Map

Page 21: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

Cacade Alignment

Page 22: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

Parallel Split Shadow Map

Page 23: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

2D CSM

Page 24: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

Z precision problem

3D CSM

Page 25: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

Cacade Coverage Optimization

Page 26: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

Cacade Transition

Page 27: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

Interlace updating

Page 28: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

4. Shadow Mask

Just an optimization

Page 29: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

4.Shadow Mask

Page 30: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

Shadow Mask

• Why?– Shadow calculation can increase shader

complexity a lot.– For most case, it can avoid overdraw.

• More aggressive, Postprocess shadow multiply

Page 31: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

Shadow solution

Page 32: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

Result

• Memory: ~5M( 3M Vsm + 2M shadow mask)• Performance(ShadowMap+shadowMask):

– 4 cascade: 2.3-4.5 ms– 3 cascade: 1.7-3.5 ms– 2 cascade: 1.4-2.5 ms– 1 cascade: 1.0~2.0 ms

Page 33: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow
Page 34: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

Future Works

• Optimization– Special Mesh LOD for shadow.– Unshadow sky Early out.– Shader optimization– Transparency shadow (e.g.. Smoke shadow)

Page 35: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

Q&A

Page 36: Fast Cascade VSM By Zhang Jian. Dynamic Shadow Tech Shadow VolumeShadow Map Basic Algorithm PCFVSMCSMESM Per Object ShadowDeferred Shadow Soft Shadow

Declaration

• This is from one of my internal presentations. I implemented the shadow tech in our game engine, and shared tips and explanations here. It’s not an official paper, So I don’t have a reference docs list here,