Preface |
|
xiii | |
|
|
1 | (10) |
|
|
1 | (2) |
|
|
2 | (1) |
|
1.1.2 Use of External Libraries |
|
|
3 | (1) |
|
|
3 | (2) |
|
|
5 | (6) |
|
|
11 | (62) |
|
|
13 | (20) |
|
|
13 | (5) |
|
|
15 | (1) |
|
|
16 | (2) |
|
|
18 | (2) |
|
2.2.1 Camera Coordinate Spaces |
|
|
19 | (1) |
|
|
20 | (4) |
|
|
20 | (1) |
|
2.3.2 The Particles Class |
|
|
21 | (1) |
|
|
22 | (1) |
|
|
23 | (1) |
|
|
24 | (1) |
|
|
25 | (4) |
|
|
28 | (1) |
|
|
29 | (1) |
|
|
29 | (4) |
|
|
33 | (28) |
|
3.1 Introduction to Voxel Buffers |
|
|
33 | (4) |
|
|
34 | (1) |
|
3.1.2 Extents and Data Window |
|
|
34 | (1) |
|
3.1.3 Coordinate Spaces and Mappings |
|
|
35 | (1) |
|
3.1.4 What Are the Coordinates of a Voxel? |
|
|
36 | (1) |
|
3.2 Implementing a Simple Voxel Buffer |
|
|
37 | (1) |
|
|
38 | (5) |
|
3.3.1 The DenseField Class |
|
|
39 | (1) |
|
3.3.2 The SparseField Class |
|
|
40 | (3) |
|
3.4 Transformations and Mappings |
|
|
43 | (2) |
|
|
43 | (1) |
|
|
44 | (1) |
|
3.5 Interpolating Voxel Data |
|
|
45 | (10) |
|
3.5.1 Nearest-Neighbor Interpolation |
|
|
46 | (1) |
|
3.5.2 Linear Interpolation |
|
|
47 | (2) |
|
3.5.3 Cubic Interpolation |
|
|
49 | (4) |
|
3.5.4 Monotonic Cubic Interpolation |
|
|
53 | (2) |
|
|
55 | (6) |
|
|
55 | (2) |
|
3.6.2 Mitchell-Netravali Filter |
|
|
57 | (2) |
|
3.6.3 Performance Comparison |
|
|
59 | (2) |
|
|
61 | (12) |
|
|
61 | (1) |
|
|
62 | (1) |
|
|
63 | (1) |
|
|
64 | (2) |
|
4.5 The Fractal Base Class |
|
|
66 | (1) |
|
4.6 Fractional Brownian Motion: fBm |
|
|
66 | (7) |
|
|
67 | (1) |
|
|
67 | (2) |
|
|
69 | (1) |
|
|
70 | (1) |
|
4.6.5 Value Range of Fractal Functions |
|
|
70 | (3) |
|
|
73 | (92) |
|
5 Fundamentals of Volume Modeling |
|
|
75 | (16) |
|
5.1 Volume Modeling and Voxel Buffers |
|
|
75 | (1) |
|
5.2 Defining the Voxel Buffer |
|
|
76 | (1) |
|
5.2.1 Bounding Primitives |
|
|
76 | (1) |
|
5.2.2 Boundless Voxel Buffers |
|
|
77 | (1) |
|
5.3 Volume-Modeling Strategies |
|
|
77 | (2) |
|
5.3.1 Direct Voxel Access |
|
|
78 | (1) |
|
|
78 | (1) |
|
|
78 | (1) |
|
|
79 | (1) |
|
5.4 Rasterization Primitives |
|
|
79 | (1) |
|
5.5 Instantiation Primitives |
|
|
80 | (2) |
|
5.6 Using Geometry to Guide Volumetric Primitives |
|
|
82 | (3) |
|
|
82 | (1) |
|
5.6.2 Local-to-World versus World-to-Local |
|
|
83 | (2) |
|
5.7 Common Coordinate Systems |
|
|
85 | (3) |
|
|
85 | (1) |
|
|
86 | (1) |
|
|
87 | (1) |
|
5.8 Procedural Noise and Fractal Functions |
|
|
88 | (3) |
|
|
88 | (1) |
|
|
88 | (2) |
|
5.8.3 Impact on Primitive Bounds |
|
|
90 | (1) |
|
6 PVR's Modeling Pipeline |
|
|
91 | (16) |
|
|
91 | (1) |
|
|
92 | (5) |
|
|
94 | (1) |
|
6.2.2 Building a Uniform Mapping |
|
|
94 | (1) |
|
6.2.3 Building a Frustum Mapping |
|
|
95 | (1) |
|
6.2.4 Executing the Modeling Process |
|
|
96 | (1) |
|
6.2.5 Accessing the Voxel Buffer |
|
|
97 | (1) |
|
6.3 Inputs to the Modeler |
|
|
97 | (1) |
|
6.4 Handling User Parameters |
|
|
98 | (1) |
|
6.4.1 The ParamMap struct |
|
|
98 | (1) |
|
6.5 The Primitive Base Class |
|
|
99 | (2) |
|
6.5.1 Volumetric Primitive versus Underlying Primitive |
|
|
100 | (1) |
|
6.6 Splatting Data to Voxel Buffers |
|
|
101 | (6) |
|
|
101 | (1) |
|
6.6.2 Splatting an Antialiased Point |
|
|
102 | (2) |
|
6.6.3 Splatting and Motion Blur |
|
|
104 | (3) |
|
7 Rasterization Primitives in PVR |
|
|
107 | (38) |
|
7.1 The RasterizationPrim Base Class |
|
|
107 | (4) |
|
7.1.1 The Rasterization Loop |
|
|
108 | (1) |
|
7.1.2 Sampling Density from the Subclass |
|
|
109 | (1) |
|
|
110 | (1) |
|
7.1.4 Rasterization and Motion Blur |
|
|
110 | (1) |
|
7.2 Implementing Primitives |
|
|
111 | (3) |
|
|
111 | (1) |
|
7.2.2 A Design Pattern for Handling Attributes |
|
|
112 | (2) |
|
7.3 Sphere-Based Primitives |
|
|
114 | (2) |
|
7.3.1 Bounding the Primitive |
|
|
115 | (1) |
|
|
116 | (6) |
|
7.4.1 Executing the Primitive |
|
|
117 | (4) |
|
|
121 | (1) |
|
7.4.3 Bounding a Single Point |
|
|
122 | (1) |
|
7.5 The PyroclasticPoint Primitive |
|
|
122 | (6) |
|
7.5.1 Executing the Primitive |
|
|
124 | (1) |
|
|
125 | (3) |
|
7.5.3 Bounding a Single Pyroclastic Point |
|
|
128 | (1) |
|
7.6 Line-Based Primitives |
|
|
128 | (7) |
|
|
130 | (1) |
|
7.6.2 Executing the Primitive |
|
|
131 | (1) |
|
7.6.3 Updating the Acceleration Data Structure |
|
|
132 | (1) |
|
7.6.4 Finding the Closest Point on a Line |
|
|
133 | (1) |
|
7.6.5 Displacement Bounds |
|
|
134 | (1) |
|
7.6.6 Interpolating Attributes along the Line |
|
|
135 | (1) |
|
|
135 | (1) |
|
|
136 | (1) |
|
7.8 The PyroclasticLine Primitive |
|
|
136 | (9) |
|
|
138 | (3) |
|
7.8.2 Transforming from World to Local Space |
|
|
141 | (1) |
|
7.8.3 Updating Per-Polygon Attributes |
|
|
141 | (1) |
|
7.8.4 Updating Per-Point Attributes |
|
|
142 | (1) |
|
7.8.5 Displacement Bounds |
|
|
142 | (3) |
|
8 Instantiation Primitives in PVR |
|
|
145 | (20) |
|
8.1 The InstantiationPrim Base Class |
|
|
145 | (1) |
|
|
146 | (1) |
|
8.2.1 Number of Points to Instance |
|
|
146 | (1) |
|
8.2.2 Local Coordinate Space |
|
|
146 | (1) |
|
8.2.3 Output from Point-Based Instantiation Primitives |
|
|
146 | (1) |
|
8.3 The Sphere Instantiation Primitive |
|
|
146 | (6) |
|
8.3.1 Executing the Primitive |
|
|
148 | (4) |
|
8.4 The Line Instantiation Primitive |
|
|
152 | (6) |
|
8.4.1 Executing the Primitive |
|
|
154 | (4) |
|
8.5 The Surface Instantiation Primitive |
|
|
158 | (7) |
|
8.5.1 Executing the Primitive |
|
|
160 | (3) |
|
|
163 | (2) |
|
|
165 | (168) |
|
|
167 | (14) |
|
9.1 Lighting Fundamentals |
|
|
167 | (2) |
|
|
169 | (2) |
|
|
171 | (1) |
|
|
171 | (1) |
|
|
172 | (2) |
|
9.6 Optical Thickness and Transmittance |
|
|
174 | (5) |
|
9.7 Wavelength Dependency |
|
|
179 | (1) |
|
9.8 Other Approaches to Volume Rendering |
|
|
179 | (2) |
|
|
181 | (22) |
|
10.1 An Introduction to Raymarching |
|
|
181 | (4) |
|
10.2 Lighting and Raymarching |
|
|
185 | (2) |
|
10.3 Integration Intervals |
|
|
187 | (1) |
|
10.4 Integration Intervals for Multiple Volumes |
|
|
188 | (2) |
|
10.5 Integration Intervals for Overlapping Volumes |
|
|
190 | (1) |
|
|
191 | (1) |
|
10.7 Empty-Space Optimization |
|
|
192 | (2) |
|
|
194 | (9) |
|
11 PVR's Rendering Pipeline |
|
|
203 | (30) |
|
|
203 | (1) |
|
|
204 | (9) |
|
|
205 | (2) |
|
11.2.2 Firing and Integrating Rays |
|
|
207 | (1) |
|
11.2.3 Executing the Render |
|
|
208 | (2) |
|
11.2.4 The RayState Struct |
|
|
210 | (2) |
|
11.2.5 The RenderGlobals Class |
|
|
212 | (1) |
|
11.3 The Camera Base Class |
|
|
213 | (7) |
|
11.3.1 Camera Transformations |
|
|
216 | (2) |
|
11.3.2 Transforming Points |
|
|
218 | (2) |
|
11.4 The PerspectiveCamera Class |
|
|
220 | (6) |
|
11.5 The SphericalCamera Class |
|
|
226 | (4) |
|
|
230 | (3) |
|
|
233 | (34) |
|
|
233 | (5) |
|
12.1.1 Volume Properties and Attributes |
|
|
235 | (2) |
|
12.1.2 The VolumeSampleState Struct |
|
|
237 | (1) |
|
12.1.3 The VolumeSample Struct |
|
|
237 | (1) |
|
12.2 The ConstantVolume Class |
|
|
238 | (5) |
|
12.3 The VoxelVolume Class |
|
|
243 | (19) |
|
12.3.1 Attribute Handling |
|
|
244 | (1) |
|
12.3.2 Ray Intersection Testing |
|
|
244 | (1) |
|
12.3.3 Intersecting Uniform Buffers |
|
|
245 | (3) |
|
12.3.4 Intersecting Frustum Buffers |
|
|
248 | (2) |
|
12.3.5 Empty-Space Optimization |
|
|
250 | (1) |
|
12.3.6 Optimizing Sparse Uniform Buffers |
|
|
251 | (6) |
|
12.3.7 Optimizing Sparse Frustum Buffers |
|
|
257 | (3) |
|
12.3.8 Sampling the Buffer |
|
|
260 | (2) |
|
12.4 The CompositeVolume Class |
|
|
262 | (5) |
|
|
267 | (18) |
|
|
267 | (1) |
|
13.2 The Raymarcher Base Class |
|
|
268 | (2) |
|
13.2.1 The IntegrationResult Struct |
|
|
269 | (1) |
|
13.3 The UniformRaymarcher Class |
|
|
270 | (11) |
|
|
270 | (6) |
|
13.3.2 Updating Transmittance and Luminance |
|
|
276 | (5) |
|
13.4 Integration Intervals |
|
|
281 | (4) |
|
13.4.1 Splitting Intervals |
|
|
281 | (4) |
|
|
285 | (30) |
|
|
285 | (1) |
|
14.1.1 The RaymarchSample Struct |
|
|
286 | (1) |
|
14.2 The DensitySampler Class |
|
|
286 | (2) |
|
14.3 The PhysicalSampler Class |
|
|
288 | (4) |
|
14.4 The Light Base Class |
|
|
292 | (4) |
|
|
294 | (1) |
|
|
295 | (1) |
|
|
296 | (2) |
|
|
298 | (2) |
|
14.7 Phase Functions in PVR |
|
|
300 | (11) |
|
14.7.1 The PhaseFunction Base Class |
|
|
300 | (1) |
|
14.7.2 The Isotropic Phase Function |
|
|
301 | (1) |
|
14.7.3 The Henyey-Greenstein Phase Function |
|
|
301 | (4) |
|
14.7.4 The Double Henyey-Greenstein Phase Function |
|
|
305 | (1) |
|
14.7.5 Composite Phase Functions |
|
|
306 | (5) |
|
|
311 | (4) |
|
14.8.1 The Occluder Base Class |
|
|
311 | (1) |
|
14.8.2 The OcclusionSampleState Struct |
|
|
311 | (2) |
|
14.8.3 The RaymarchOccluder Class |
|
|
313 | (2) |
|
|
315 | (18) |
|
|
315 | (1) |
|
|
316 | (1) |
|
15.3 Strategies for Precomputation |
|
|
317 | (1) |
|
15.4 The VoxelOccluder Class |
|
|
318 | (3) |
|
15.5 The OtfVoxelOccluder Class |
|
|
321 | (2) |
|
|
323 | (1) |
|
15.7 The TransmittanceMapOccluder Class |
|
|
324 | (3) |
|
15.8 The OtfTransmittanceMapOccluder Class |
|
|
327 | (6) |
Bibliography |
|
333 | (2) |
Index |
|
335 | (4) |
Class Index |
|
339 | |