Hybrid Computational Voxelization using the Graphics Pipeline
Randall Rauwendaal Michael J. Bailey
Sunday, April 6, 14
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)
Sunday, April 6, 14
Mar 14, 2014
2
Original Image
Sunday, April 6, 14
Mar 14, 2014
3
Sunday, April 6, 14
Mar 14, 2014
4
Sunday, April 6, 14
Mar 14, 2014
5
Sunday, April 6, 14
Mar 14, 2014
6
Sunday, April 6, 14
Mar 14, 2014
7
Sunday, April 6, 14
Mar 14, 2014
8
Sunday, April 6, 14
Mar 14, 2014
9
Sunday, April 6, 14
Mar 14, 2014
10
Mar 14, 2014
11
Sunday, April 6, 14
Mar 14, 2014
12
Mar 14, 2014
13
Sunday, April 6, 14
Mar 14, 2014
14
Sunday, April 6, 14
15
Sunday, April 6, 14
16
Sunday, April 6, 14
Mar 14, 2014
17
Sunday, April 6, 14
Mar 14, 2014
18
Sunday, April 6, 14
Mar 14, 2014
19
Sunday, April 6, 14
Mar 14, 2014
20
Sunday, April 6, 14
Mar 14, 2014
21
Sunday, April 6, 14
Mar 14, 2014
22
Sunday, April 6, 14
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
Mar 14, 2014
25
Mar 14, 2014
26
Mar 14, 2014
27
Hasselgren (B) Hertel et al.
Sunday, April 6, 14
Mar 14, 2014
28
Sunday, April 6, 14
Mar 14, 2014
29
Sunday, April 6, 14
Mar 14, 2014
30
Sunday, April 6, 14
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
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
0, nXY
ei,y
ei ⌦
nYZ
ei , vi,yz
↵
+ max 0, nYZ
ei,x
0, nYZ
ei,y
ei ⌦
nZX
ei , vi,zx
↵
+ max 0, nZX
ei,x
0, nZX
ei,y
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
Mar 14, 2014
32
Sunday, April 6, 14
Mar 14, 2014
33
Sunday, April 6, 14
Mar 14, 2014
34
Sunday, April 6, 14
Mar 14, 2014
35
Sunday, April 6, 14
Mar 14, 2014
36
Original Image
Sunday, April 6, 14
Mar 14, 2014
37
Sunday, April 6, 14
Mar 14, 2014
38
Sunday, April 6, 14
Mar 14, 2014
39
Sunday, April 6, 14
Mar 14, 2014
40
Sunday, April 6, 14
Mar 14, 2014
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