Hybrid Computational Voxelization using the Graphics Pipeline - - PowerPoint PPT Presentation

hybrid computational voxelization using the graphics
SMART_READER_LITE
LIVE PREVIEW

Hybrid Computational Voxelization using the Graphics Pipeline - - PowerPoint PPT Presentation

Hybrid Computational Voxelization using the Graphics Pipeline Randall Rauwendaal Michael J. Bailey Sunday, April 6, 14 Voxelization Conversion of input geometry (triangles) into a regular 3D discretized representation (voxels)


slide-1
SLIDE 1

Hybrid Computational Voxelization using the Graphics Pipeline

Randall Rauwendaal Michael J. Bailey

Sunday, April 6, 14

slide-2
SLIDE 2

Mar 14, 2014

Voxelization

  • Conversion of input geometry (triangles) into a

regular 3D discretized representation (voxels)

  • Analogous to rasterization in 3D

2

Original Image

Sunday, April 6, 14

slide-3
SLIDE 3

Mar 14, 2014

Motivation

  • Voxels are useful in many applications (global

illumination, collision detection, fluid sim, etc...)

  • Voxelization can enable these efgects for traditional

triangle based scenes

  • Fast voxelization can enable these efgects for

dynamic scenes

3

Sunday, April 6, 14

slide-4
SLIDE 4

Mar 14, 2014

Triangle vs Fragment Parallel

Triangle Parallel

  • Threads per triangle
  • Can sufger from uneven triangle size distributions

Fragment Parallel

  • Threads per triangle fragment
  • Can sufger from oversubscription and poor thread

utilization

4

Sunday, April 6, 14

slide-5
SLIDE 5

Mar 14, 2014

Triangle-Parallel Performance

5

Sunday, April 6, 14

slide-6
SLIDE 6

Mar 14, 2014

Triangle-Parallel Analysis

  • Performs well on scenes with many small evenly

sized triangles

  • Performs poorly on any scene with large triangles
  • Performance degrades as voxel resolution increases

6

Sunday, April 6, 14

slide-7
SLIDE 7

Mar 14, 2014

Fragment-Parallel Performance

7

Sunday, April 6, 14

slide-8
SLIDE 8

Mar 14, 2014

Fragment-Parallel Analysis

  • Performs well on scenes with large triangles
  • Performs poorly on scenes with many small triangles
  • Performance degrades as voxel resolution decreases
  • Poor “quad-utilization” on small triangles

8

Sunday, April 6, 14

slide-9
SLIDE 9

Mar 14, 2014

Fragment vs Triangle parallel @2563

9

Sunday, April 6, 14

slide-10
SLIDE 10

Mar 14, 2014

Hybrid Voxelization

  • Introduce a hybrid pipeline that splits the workload

between “small” and “large” triangles

10

  • Sunday, April 6, 14
slide-11
SLIDE 11

Mar 14, 2014

Details

  • Creates a “two-pass” approach
  • Avoids poor thread utilization and oversubscription

caused by rasterizing small triangles

  • Avoids idle threads waiting on large triangles
  • Efgectively classified scenes take longer

11

Sunday, April 6, 14

slide-12
SLIDE 12

Mar 14, 2014

Optimized Hybrid Voxelization

  • Immediately voxelize small triangles, defer only large

triangles

12

  • Sunday, April 6, 14
slide-13
SLIDE 13

Mar 14, 2014

Benefits

  • Less overhead for small triangle voxelization
  • Reduce under-utilized threads
  • Reduces output of classification stage
  • More of a “just over one-pass” approach, as typically
  • nly a small subset of triangles are processed twice

13

Sunday, April 6, 14

slide-14
SLIDE 14

Mar 14, 2014

“Small” vs “Large” Triangles

  • Classify triangles based on the maximal 2D projected

area of triangle in voxel units

  • Triangles are classified as large or small according to

a cutofg value

14

Sunday, April 6, 14

slide-15
SLIDE 15
  • Mar 14, 2014

Hybrid Performance (Sponza)

15

Sunday, April 6, 14

slide-16
SLIDE 16
  • Mar 14, 2014

Hybrid Performance (zoomed)

16

Sunday, April 6, 14

slide-17
SLIDE 17

Mar 14, 2014

Implementation Details

  • Surface Voxelization
  • OpenGL 4.2
  • Computational Intersection

17

Sunday, April 6, 14

slide-18
SLIDE 18

Mar 14, 2014

Surface Voxelization

  • Conservative voxelization (26-separable)
  • Thin voxelization (6-separable)

18

Thin Conservative

Sunday, April 6, 14

slide-19
SLIDE 19

Mar 14, 2014

Triangle/Voxel Overlap

  • Reduce the set of potential voxel intersections to
  • nly those that overlap the axis-aligned bounding

volume of the triangle

  • Iterate over this reduced set of voxels and discard

any that do not intersect the triangle's plane

  • If the triangle plane divides the voxels test all three
  • f its 2D planar projections to confirm overlap

19

Sunday, April 6, 14

slide-20
SLIDE 20

Mar 14, 2014

3D Voxel Overlap

20

  • Thin

Conservative

Sunday, April 6, 14

slide-21
SLIDE 21

Mar 14, 2014

2D Box Overlap

21

  • Thin

Conservative

Sunday, April 6, 14

slide-22
SLIDE 22

Mar 14, 2014

Optimization

  • Pre-compute all per-triangle variables
  • Determine the dominant normal direction
  • select the orthogonal plane of maximal projection (XY, YZ, or ZX)
  • iterate over the component axes
  • Test the 2D projected overlap with the orthogonal

plane of maximal projection first

  • Depth intersection test to determine the minimal

necessary range to iterate over

  • Test the remaining two planar projections for
  • verlap

22

Sunday, April 6, 14

slide-23
SLIDE 23

Mar 14, 2014

Pseudocode

23

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true Sunday, April 6, 14

slide-24
SLIDE 24

Mar 14, 2014

Pseudocode

23

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true

Precompute Variables

Sunday, April 6, 14

slide-25
SLIDE 25

Mar 14, 2014

Pseudocode

23

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true Sunday, April 6, 14

slide-26
SLIDE 26

Mar 14, 2014

Pseudocode

23

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true

Iterate over maximal plane

Sunday, April 6, 14

slide-27
SLIDE 27

Mar 14, 2014

Pseudocode

23

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true Sunday, April 6, 14

slide-28
SLIDE 28

Mar 14, 2014

Pseudocode

23

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true

maximal plane test

Sunday, April 6, 14

slide-29
SLIDE 29

Mar 14, 2014

Pseudocode

23

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true Sunday, April 6, 14

slide-30
SLIDE 30

Mar 14, 2014

Pseudocode

23

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true

Z-range calc and iterate

Sunday, April 6, 14

slide-31
SLIDE 31

Mar 14, 2014

Pseudocode

23

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true Sunday, April 6, 14

slide-32
SLIDE 32

Mar 14, 2014

Pseudocode

23

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true

remaining plane tests

Sunday, April 6, 14

slide-33
SLIDE 33

Mar 14, 2014

Pseudocode

23

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true Sunday, April 6, 14

slide-34
SLIDE 34

Mar 14, 2014

Pseudocode

23

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true

unswizzle and store

Sunday, April 6, 14

slide-35
SLIDE 35

Mar 14, 2014

Pseudocode

23

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true Sunday, April 6, 14

slide-36
SLIDE 36

Mar 14, 2014

Fragment-Parallel Voxelization

  • Improve parallelism by breaking up large triangles
  • Use the existing rasterization based pipeline to

accomplish this

  • 2 potential problems to overcome

1) Gaps within triangles caused by an overly oblique camera angle 2) Gaps between triangles caused OpenGL’s rasterization rules

24

Sunday, April 6, 14

slide-37
SLIDE 37

Mar 14, 2014

(1) Projection

  • Can solve the first problem by projecting the input

geometry onto the dominant plane

25

  • Sunday, April 6, 14
slide-38
SLIDE 38

Mar 14, 2014

3D Projection

  • The appropriate projection plane is selected by the

dominant normal direction

26

  • Sunday, April 6, 14
slide-39
SLIDE 39

Mar 14, 2014

(2) Conservative Rasterization

27

  • Can solve the second problem with “conservative

rasterization”

  • Hasselgren (A)

Hasselgren (B) Hertel et al.

Sunday, April 6, 14

slide-40
SLIDE 40

Mar 14, 2014

Conservative Rasterization

  • Conservative rasterization dilates the input triangles

such that if any part of a pixel is covered by the

  • riginal triangle the pixel center is covered by the

dilated triangle

28

v0

i = vi + l

✓ ei1 ei1 · nei + ei ei · nei−1 ◆

Sunday, April 6, 14

slide-41
SLIDE 41

Mar 14, 2014

Quad Utilization

  • Pixels actually processed in batches of 2x2 “quads”

to provide derivative information

  • A sub-voxel sized triangle may utilize only 25% of

threads allocated

  • Worse when triangle dilation is taken into account

29

Sunday, April 6, 14

slide-42
SLIDE 42

Mar 14, 2014

Dilated Triangle Utilization

  • This triangle exhibits only 8.33% thread utilization

30

Sunday, April 6, 14

slide-43
SLIDE 43

Mar 14, 2014

Pseudocode

31

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true Sunday, April 6, 14

slide-44
SLIDE 44

Mar 14, 2014

Pseudocode

31

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true

Geometry Shader flat -> fragment shader

Sunday, April 6, 14

slide-45
SLIDE 45

Mar 14, 2014

Pseudocode

31

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true Sunday, April 6, 14

slide-46
SLIDE 46

Mar 14, 2014

Pseudocode

31

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true

handled implicitly

Sunday, April 6, 14

slide-47
SLIDE 47

Mar 14, 2014

Pseudocode

31

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true Sunday, April 6, 14

slide-48
SLIDE 48

Mar 14, 2014

Pseudocode

31

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true

fragment shader

Sunday, April 6, 14

slide-49
SLIDE 49

Mar 14, 2014

Pseudocode

31

(v0, v1, v2, bmin, bmax, unswizzle) ei v(i+1)mod3 vi n cross (e0, e1) nXY

ei

sign (nz) · (ei,y, ei,x)T nYZ

ei sign (nx) · (ei,z, ei,y)T

nZX

ei sign (ny) · (ei,x, ei,z)T

dXY

ei

⌦ nXY

ei , vi,xy

+ max 0, nXY

ei,x

  • + max

0, nXY

ei,y

  • dYZ

ei ⌦

nYZ

ei , vi,yz

+ max 0, nYZ

ei,x

  • + max

0, nYZ

ei,y

  • dZX

ei ⌦

nZX

ei , vi,zx

+ max 0, nZX

ei,x

  • + max

0, nZX

ei,y

  • n sign (nz) · n

zmin < zmax dmin hn, v0i max(0, nx) max(0, ny) dmax hn, v0i min(0, nx) min(0, ny) px bmin,x, . . . , bmax,x py bmin,y, . . . , bmax,y 82

i=0

nXY

ei , pxy

+ dXY

ei

zmin max bmin,z,⌅ ( hnxy, pxyi + dmin)

1 nz

zmax min bmax,z,⌃ ( hnxy, pxyi + dmax)

1 nz

pz zmin, . . . , zmax 82

i=0

nYZ

ei , pxy

+ dYZ

ei 0 ^ ⌦

nZX

ei , pxy

+ dZX

ei 0

V [unswizzle · p] true Sunday, April 6, 14

slide-50
SLIDE 50

Mar 14, 2014

Computational v. Raster Intersection

  • Triangle dilation can produce overly conservative

results leading to false positives during voxelization

  • Maintaining a computational intersection test

eliminates false positives

32

Sunday, April 6, 14

slide-51
SLIDE 51

Mar 14, 2014

Computational v. Raster Intersection

  • Red voxels indicate false positives

33

Sunday, April 6, 14

slide-52
SLIDE 52

Mar 14, 2014

Full Pipeline

34

Sunday, April 6, 14

slide-53
SLIDE 53

Mar 14, 2014

Attribute Interpolation

  • Calculate barycentric coordinates of dilated triangle
  • Apply to the attributes of the original triangle to

calculate dilated attributes

35

λi (v0

i) = area (v0 i, vi+1, vi+2)

area (v0, v1, v2) a0

i = λ0 (v0 i) a0 + λ1 (v0 i) a1 + λ2 (v0 i) a2

Sunday, April 6, 14

slide-54
SLIDE 54

Mar 14, 2014

Color Voxelization (Sponza)

36

Original Image

Sunday, April 6, 14

slide-55
SLIDE 55

Mar 14, 2014

Results

37

Sunday, April 6, 14

slide-56
SLIDE 56

Mar 14, 2014

Results

38

Sunday, April 6, 14

slide-57
SLIDE 57

Mar 14, 2014

Conclusion

  • Fastest available voxelization, even on less than state
  • f the art hardware
  • Easy to implement in current graphics APIs, avoids

complex tiling assignments, sorting stages, and work/load balancing schemes

  • Does not sacrifice quality of the voxelization in order

to utilize the graphics pipeline, i.e. maintains robust computational intersection at all stages

39

Sunday, April 6, 14

slide-58
SLIDE 58

Mar 14, 2014

Questions?

40

Sunday, April 6, 14

slide-59
SLIDE 59

Mar 14, 2014

Results

41

@voxels2 1283 2563 5123 1283 2563 5123 1283 2563 5123 1283 2563 5123 1283 2563 5123 1283 2563 5123 1283 2563 5123 Sunday, April 6, 14