1 of 30

Real-time Voxelization for Complex Models

Zhao Dong, Wei Chen, Hujun Bao, Hongxin Zhang, Qunsheng Peng

State Key Lab of CAD&CG

Zhejiang University, P.R.China

State Key Lab of CAD&CG, Zhejiang University

2 of 30

Outline

  • Introduction
  • New voxelization algorithm
  • Hardware implementation
  • Results and applications
  • Future work

3 of 30

Introduction

  • Surface Graphics: Geometric rendering of Continuous Spatial Models (CSM)

  • Volume Graphics: Volumetric Model (VM)

Voxelization

CSM

VM

4 of 30

Introduction

  • Voxelization: A process of approximating a continuous geometric primitive in the 3D discrete space.
  • The result of this process:
    • Binary voxelization ( )
    • Non-binary voxelization (densities, color, etc.)

5 of 30

Introduction

  • Voxelization Algorithm
    • Quality-oriented algorithm
      • Aliasing Filtering Design [Wang 93, Wang 94]
    • Performance-oriented algorithm
      • Depth Buffer Based Voxelization [Aggeliki 99]
      • Slice-based Voxelization [Fang 99, Fang 00]

6 of 30

Introduction

  • The size and complexity of the models are becoming even larger

69,451 triangles

1,132,830 triangles

28,055,742 triangles

Performance has become the main challenge, we focus on it!

7 of 30

Introduction

Convexity

requirement

8 of 30

Introduction

  • Slice-based Voxelization [Fang 99, Fang 00]

Original Model

Render Model

Set Clipping Plane

Get ith Slice

Write to ith 3D texture

Z-plane(i+1)

Z-plane(i)

If i < N

(N=Z-resolution)

else

Final Volume dataset

9 of 30

Introduction

    • Slice-based Voxelization algorithm
      • One slice each time, render model N times
        • Scene complexity↑, volume resolution↑, performance ↓
      • High video memory cost
        • For binary voxeliztion, One voxel 🡪 One byte
      • Special hardware requirement
        • Write slice to 3D texture memory

10 of 30

Introduction

  • Our Challenge
    • More slices each time, render model at times as less as possible
    • Lower video memory cost
      • For binary voxelization, one voxel 🡪 one bit
    • GPU on PC platform to support real-time voxelization

11 of 30

New Voxelization Algorithm

GPU work

CPU work

Original Model

Z-oriented

Y-oriented

X-oriented

Sorting geometry by surface normal

Slab

voxelization

Texture

encoding

Final Volume Dataset

Slab

voxelization

Texture

encoding

Slab

voxelization

Texture

encoding

Illustration of new voxelization algorithm stages

Composite three intermediate textures

12 of 30

New Voxelization Algorithm

  • A problem of rasterization by graphics hardware

Projection plane

Volume information will be lost

So we need sort geometry according to

surface orientation

13 of 30

New Voxelization Algorithm

  • Slab voxelization
  • An example of binary voxelization at volume resolution 5123
    • One bit(0 or 1) to represent One voxel
    • Use 512x512 32bits 2D texture to

record a slab

    • If one bit 🡨🡪 one voxel then

512x512x512 = 512x512x32x16

GPU support 4 Render targets simultaneously☺

So we need render models only 4 times

14 of 30

New Voxelization Algorithm

  • Texture encoding
    • After slab voxelization, we get 16 slabs(512x512 2D textures).
    • Encode them into a single 2048x2048 2D textures

Clipping Plane i

Clipping Plane i+1

Slab3

Slab2

Slab1

Slab0

3

2

1

0

7

6

5

4

11

10

9

8

15

14

13

12

2048x2048 intermediate texture

‘0’ represents Z-nearest

‘15’ represents Z-furthest

Slab4

Slab5

Slab6

Slab7

Slab11

Slab10

Slab9

Slab8

Slab15

Slab14

Slab13

Slab12

Clipping Plane i

Clipping Plane i+1

Clipping Plane i

Clipping Plane i+1

Clipping Plane i

Clipping Plane i+1

15 of 30

New Voxelization Algorithm

  • Teapot Example

Slab voxelization

Texture encoding

16 of 30

New Voxelization Algorithm

  • Composite three parts into one

O

x

y

z

O

z

x

y

(All are left-hand coordinates)

(x1,y1,z1)

(x3,y3,z3)

x1 = z3

y1 = x3

z1 = y3

O

y

z

x

3D coordinates

for Y-oriented patches

(x2,y2,z2)

y2 = x1

z2 = y1

x2 = z1

We integrate the voxelization results of Y-oriented and X-oriented

patches into that of Z-oriented patches

3D coordinates

for Z-oriented patches

3D coordinates

for X-oriented patches

17 of 30

New Voxelization Algorithm

  • Composition of three intermediate textures

Y-oriented patches

X-oriented patches

Coordinates

Transform

Patches1 in

z-oriented space

Patches2 in

z-oriented space

Original z-oriented

patches

Patches0 in

z-oriented space

18 of 30

Hardware Implementation

  • Related Techniques
    • Maximum Texture Size
    • Dynamic vertex and index buffers
    • Multiple render targets
    • Dependent texture fetching
    • Lookup Textures
      • Fetching one bit
      • Storing one bit
      • Intermediate textures composition

Efficient bit operation in pixel shader

19 of 30

Hardware Implementation

  • Use of the Resultant Volume
    • Deferred video memory
    • Read back to main memory
      • But AGP is an asymmetric bus, read back from video memory will reduce the efficiency
      • PCI-express may offer potential solution

20 of 30

Applications of Algorithm

  • Voxelization of Surface of Other Forms
    • Implicit Surface
    • Parametric Surface
    • CSG Models

Implicit Surface:

volume resolution is 1283

21 of 30

Applications of Algorithm

  • Transparent Illustration

Interactive hybrid volume rendering

22 of 30

Applications of Algorithm

  • Collision Detection

23 of 30

Applications of Algorithm

  • Solid Voxelization
    • 3D scan-filling similar to 2D scanning

Surface Voxelization

Solid Voxelization

24 of 30

Results

  • Performance

Dragon

871,326 Triangles

439,370 Vertices

Resolution 2563

Voxelization 57ms

Buddha

1,087,514 Triangles

550,868 Vertices

Resolution 2563

Voxelization 64.8ms

Blade

1,765,388 Triangles

898,796 Vertices

Resolution 2563

Voxelization 95ms

25 of 30

Results

Model

#Triangles

#Vertices

Slab

Voxelization

Texture

encoding

Composition

Total

Time

Buck

1,254

947

9.0ms

8.0ms

10ms

27ms

Bugo

16,928

8,634

9.7ms

8.3ms

10ms

28ms

Bunny

69,451

34,834

12.0ms

8.0ms

11ms

31ms

Dragon

871,326

439,370

38.0ms

8.0ms

11ms

57ms

Buddha

1,087,514

550,868

47.0ms

7.8ms

10ms

64.8ms

Blade

1,765,388

898,796

75.0ms

8.0ms

12ms

95ms

Table 1. Voxelization timings for different model sizes.

Volume resolution: 2563, bit-depth: 8.

26 of 30

Results

27 of 30

Results

  • Comparisons
    • Two algorithms were implemented on the same hardware platform
      • CPU: Intel P4 2.4GHz
      • Memory: 512M
      • GPU: ATI Radeon 9800Pro with 256M video memory

65ms

5,263ms

550,868

1,087,514

Buddha

57ms

3,751ms

439,370

871,326

Dragon

31ms

336ms

34,843

69,451

Bunny

30ms

320ms

30,215

60,246

Wagner

Our Method

Slice-based Method

#Vertices

#Triangles

Model

Table 3. Comparisons between Slice-based method

and our method

28 of 30

Results

Bunny

Wagner

Dragon

Buddha

29 of 30

Future work

  • Improvement of the voxelization quality
  • Video cards that support the blending operation for floating point textures.
    • Now Nvidia Geforce 6800 has supported the blending operation for16bit floating point textures
  • Shade Mode 3.0 has been supported. We can use dynamic judgement in shader program, so sorting geometry can also be finished in GPU
  • Integration of the voxelization engine 🡪 mature software product for market

30 of 30

Questions and Answers

  • Thanks a lot for your attention