a 2.5d culling for forward+ (siggraph asia 2012)
TRANSCRIPT
![Page 1: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/1.jpg)
A 2.5D CULLING FOR FORWARD+
AMD Takahiro Harada
![Page 2: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/2.jpg)
2 | A 2.5D culling for Forward+ | Takahiro Harada
AGENDA
Forward+
– Forward, Deferred, Forward+ – Problem description
2.5D culling Results
![Page 3: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/3.jpg)
3 | A 2.5D culling for Forward+ | Takahiro Harada
FORWARD+
![Page 4: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/4.jpg)
4 | A 2.5D culling for Forward+ | Takahiro Harada
REAL-TIME SOLUTION COMPARISON
Rendering equation
Forward
Deferred
Forward+
![Page 5: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/5.jpg)
5 | A 2.5D culling for Forward+ | Takahiro Harada
FORWARD RENDERING PIPELINE
Depth prepass
– Fills z buffer Prevent overdraw for shading
Shading – Geometry is rendered
– Pixel shader Iterate through light list set for each object
Evaluates materials for the lights
![Page 6: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/6.jpg)
6 | A 2.5D culling for Forward+ | Takahiro Harada
FORWARD+ RENDERING PIPELINE
Depth prepass
– Fills z buffer Prevent overdraw for shading
Used for pixel position reconstruction for light culling
Light culling
– Culls light per tile basis – Input: z buffer, light buffer
– Output: light list per tile
Shading – Geometry is rendered
– Pixel shader Iterate through light list calculated in light culling
Evaluates materials for the lights
1 2
3
[1,2,3] [1] [2,3]
![Page 7: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/7.jpg)
7 | A 2.5D culling for Forward+ | Takahiro Harada
CREATING A FRUSTUM FOR A TILE
An edge @SS == A plane @VS
A tile (4 edges) @SS == 4 planes @VS – Open frustum (no bound in Z direction)
Max and min Z is used to cap
![Page 8: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/8.jpg)
8 | A 2.5D culling for Forward+ | Takahiro Harada
LONG FRUSTUM
Screen space culling is not always sufficient
– Create a frustum from max and min depth values – Edge of objects
– Captures a lot of unnecessary lights
![Page 9: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/9.jpg)
9 | A 2.5D culling for Forward+ | Takahiro Harada
LONG FRUSTUM
Screen space culling is not always sufficient
– Create a frustum from max and min depth values – Edge of objects
– Captures a lot of unnecessary lights ��0 lights ��25 lights � 50 lights
![Page 10: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/10.jpg)
10 | A 2.5D culling for Forward+ | Takahiro Harada
GET WORSE IN A COMPLEX SCENE
��0 lights � 100 lights ��200 lights
![Page 11: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/11.jpg)
11 | A 2.5D culling for Forward+ | Takahiro Harada
QUESTION
Want to reduce false positives
Can we improve the culling without adding much overhead?
– Computation time, memory – Culling itself is an optimization
– Spending a lot of resources for it does not make sense
Using a 3D grid is a natural extension – Uses too much memory
![Page 12: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/12.jpg)
12 | A 2.5D culling for Forward+ | Takahiro Harada
2.5D CULLING
![Page 13: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/13.jpg)
13 | A 2.5D culling for Forward+ | Takahiro Harada
2.5D CULLING
Additional memory usage
– 0B global memory – 4B local memory per WG (can compress more if you want)
Additional computation complexity
– A few bit and arithmetic instructions – A few lines of codes for light culling
– No changes for other stages
Additional runtime overhead – < 10% compared to the original light culling
![Page 14: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/14.jpg)
14 | A 2.5D culling for Forward+ | Takahiro Harada
IDEA
Split frustum in z direction
– Uniform split for a frustum – Varying split among frustums
(a) (b)
![Page 15: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/15.jpg)
15 | A 2.5D culling for Forward+ | Takahiro Harada
FRUSTUM CONSTRUCTION
Calculate depth bound
– max and min values of depth Split depth direction into 32 cells
– Min value and cell size Flag occupied cell
A 32bit depth mask per work group
A tile
![Page 16: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/16.jpg)
16 | A 2.5D culling for Forward+ | Takahiro Harada
FRUSTUM CONSTRUCTION
Calculate depth bound
– max and min values of depth Split depth direction into 32 cells
– Min value and cell size Flag occupied cell
A 32bit depth mask per work group
7 7 7 7
7 7 7 2
7 7 2 1
7 2 1 0
Depth mask = 11100001
A tile
0 1 2 3 4 5 6 7
![Page 17: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/17.jpg)
17 | A 2.5D culling for Forward+ | Takahiro Harada
LIGHT CULLING
If a light overlaps to the frustum
– Calculate depth mask for the light – Check overlap using the depth mask of the frustum
Depth mask & Depth mask
– 11100001 & 00011000 = 00000000
Depth mask = 11100001
Depth mask = 00011000
![Page 18: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/18.jpg)
18 | A 2.5D culling for Forward+ | Takahiro Harada
LIGHT CULLING
If a light overlaps to the frustum
– Calculate depth mask for the light – Check overlap using the depth mask of the frustum
Depth mask & Depth mask
– 11100001 & 00110000 = 00100000
Depth mask = 11100001
Depth mask = 00110000
![Page 19: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/19.jpg)
19 | A 2.5D culling for Forward+ | Takahiro Harada
CODE
Original With 2.5D culling
![Page 20: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/20.jpg)
20 | A 2.5D culling for Forward+ | Takahiro Harada
RESULTS
![Page 21: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/21.jpg)
21 | A 2.5D culling for Forward+ | Takahiro Harada
LIGHT CULLING
![Page 22: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/22.jpg)
22 | A 2.5D culling for Forward+ | Takahiro Harada
LIGHT CULLING + 2.5D CULLING
![Page 23: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/23.jpg)
23 | A 2.5D culling for Forward+ | Takahiro Harada
COMPARISON
1"
10"
100"
1000"
10000"
1" 2" 3" 4" 5" 6" 7" 8" 9" 10" 11" 12" 13" 14" 15" 16" 17" 18" 19" 20" 21" 22" 23"
Num
ber'o
f'*les'
Number'of'lights'(x10)'
With"2.5D"culling"
Without"2.5D"culling"
220 lights/frustum -> 120 lights/frustum
![Page 24: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/24.jpg)
24 | A 2.5D culling for Forward+ | Takahiro Harada
LIGHT CULLING
![Page 25: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/25.jpg)
25 | A 2.5D culling for Forward+ | Takahiro Harada
LIGHT CULLING + 2.5D CULLING
![Page 26: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/26.jpg)
26 | A 2.5D culling for Forward+ | Takahiro Harada
COMPARISON
1"
10"
100"
1000"
10000"
1" 2" 3" 4" 5" 6" 7" 8" 9" 10" 11" 12" 13" 14" 15" 16" 17"
Num
ber'o
f'*les'
Number'of'lights'(x10)'
With"2.5D"culling"
Without"2.5D"culling"
![Page 27: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/27.jpg)
27 | A 2.5D culling for Forward+ | Takahiro Harada
PERFORMANCE
0"
1"
2"
3"
4"
5"
6"
1024" 2048" 3072" 4096"
!me$(m
s)$
Number$of$lights$
Forward+"w."frustum"culling"Forward+"w."2.5D"Deferred"
![Page 28: A 2.5D Culling for Forward+ (SIGGRAPH ASIA 2012)](https://reader034.vdocument.in/reader034/viewer/2022042614/5584c59cd8b42af1138b47b8/html5/thumbnails/28.jpg)
28 | A 2.5D culling for Forward+ | Takahiro Harada
CONCLUSION
Proposed 2.5D culling which
– Additional memory usage 0B global memory
4B local memory per WG (can compress more if you want)
– Additional compute complexity 3 lines of pseudo codes for light culling
No changes for other stages
– Additional runtime overhead < 10% compared to the original light culling
Showed that 2.5D culling reduces false positives