Preface |
|
xvii | |
|
|
1 | (52) |
|
|
1 | (4) |
|
1.1.1 Indexing and Cross-Referencing |
|
|
4 | (1) |
|
1.2 Photorealistic Rendering and the Ray-Tracing Algorithm |
|
|
5 | (11) |
|
|
6 | (2) |
|
1.2.2 Ray-Object Intersections |
|
|
8 | (1) |
|
|
9 | (2) |
|
|
11 | (1) |
|
1.2.5 Light Scattering at Surfaces |
|
|
11 | (2) |
|
1.2.6 Indirect Light Transport |
|
|
13 | (2) |
|
|
15 | (1) |
|
1.3 Pbrt: System Overview |
|
|
16 | (20) |
|
1.3.1 Phases of Execution |
|
|
17 | (1) |
|
1.3.2 Pbrt's main() Function |
|
|
18 | (4) |
|
1.3.3 Integrator Interface |
|
|
22 | (2) |
|
1.3.4 ImageTileIntegrator and the Main Rendering Loop |
|
|
24 | (4) |
|
1.3.5 RayIntegrator Implementation |
|
|
28 | (3) |
|
1.3.6 Random Walk Integrator |
|
|
31 | (5) |
|
1.4 How to Proceed through This Book |
|
|
36 | (2) |
|
|
38 | (1) |
|
|
38 | (1) |
|
|
38 | (1) |
|
1.5 Using and Understanding the Code |
|
|
38 | (6) |
|
1.5.1 Source Code Organization |
|
|
39 | (1) |
|
|
39 | (1) |
|
1.5.3 Pointer or Reference? |
|
|
39 | (1) |
|
1.5.4 Abstraction versus Efficiency |
|
|
40 | (1) |
|
|
40 | (1) |
|
|
40 | (1) |
|
|
41 | (1) |
|
|
42 | (1) |
|
1.5.9 Debugging and Logging |
|
|
42 | (1) |
|
1.5.10 Parallelism and Thread Safety |
|
|
43 | (1) |
|
1.5.11 Extending the System |
|
|
44 | (1) |
|
|
44 | (1) |
|
1.6 A Brief History of Physically Based Rendering |
|
|
44 | (9) |
|
|
45 | (1) |
|
|
46 | (2) |
|
|
48 | (3) |
|
|
51 | (2) |
|
Chapter 02 Monte Carlo Integration |
|
|
53 | (28) |
|
|
54 | (6) |
|
2.1.1 Background and Probability Review |
|
|
54 | (2) |
|
|
56 | (1) |
|
2.1.3 The Monte Carlo Estimator |
|
|
56 | (2) |
|
2.1.4 Error in Monte Carlo Estimators |
|
|
58 | (2) |
|
|
60 | (9) |
|
2.2.1 Stratified Sampling |
|
|
60 | (3) |
|
2.2.2 Importance Sampling |
|
|
63 | (2) |
|
2.2.3 Multiple Importance Sampling |
|
|
65 | (2) |
|
|
67 | (1) |
|
|
68 | (1) |
|
2.3 Sampling Using the Inversion Method |
|
|
69 | (4) |
|
|
69 | (3) |
|
|
72 | (1) |
|
2.4 Transforming between Distributions |
|
|
73 | (8) |
|
2.4.1 Transformation in Multiple Dimensions |
|
|
74 | (1) |
|
2.4.2 Sampling with Multidimensional Transformations |
|
|
75 | (2) |
|
|
77 | (1) |
|
|
78 | (3) |
|
Chapter 03 Geometry and Transformations |
|
|
81 | (64) |
|
|
81 | (2) |
|
3.1.1 Coordinate System Handedness |
|
|
82 | (1) |
|
|
83 | (3) |
|
|
86 | (6) |
|
3.3.1 Normalization and Vector Length |
|
|
87 | (2) |
|
3.3.2 Dot and Cross Product |
|
|
89 | (2) |
|
3.3.3 Coordinate System from a Vector |
|
|
91 | (1) |
|
|
92 | (1) |
|
|
93 | (1) |
|
|
94 | (3) |
|
|
96 | (1) |
|
|
97 | (6) |
|
|
103 | (15) |
|
|
103 | (1) |
|
|
104 | (2) |
|
3.8.3 Spherical Parameterizations |
|
|
106 | (8) |
|
3.8.4 Bounding Directions |
|
|
114 | (4) |
|
|
118 | (11) |
|
3.9.1 Homogeneous Coordinates |
|
|
119 | (1) |
|
3.9.2 Transform Class Definition |
|
|
119 | (1) |
|
|
120 | (2) |
|
|
122 | (1) |
|
|
123 | (1) |
|
3.9.6 X, Y, and z Axis Rotations |
|
|
124 | (1) |
|
3.9.7 Rotation around an Arbitrary Axis |
|
|
125 | (2) |
|
3.9.8 Rotating One Vector to Another |
|
|
127 | (1) |
|
3.9.9 The Look-at Transformation |
|
|
128 | (1) |
|
3.10 Applying Transformations |
|
|
129 | (7) |
|
|
130 | (1) |
|
|
130 | (1) |
|
|
131 | (1) |
|
|
131 | (1) |
|
|
132 | (1) |
|
3.10.6 Composition of Transformations |
|
|
132 | (1) |
|
3.10.7 Transformations and Coordinate System Handedness |
|
|
133 | (1) |
|
|
133 | (2) |
|
3.10.9 Animating Transformations |
|
|
135 | (1) |
|
|
136 | (9) |
|
3.11.1 Surface Interaction |
|
|
138 | (3) |
|
3.11.2 Medium Interaction |
|
|
141 | (1) |
|
|
141 | (2) |
|
|
143 | (2) |
|
Chapter 04 Radiometry, Spectra, And Color |
|
|
145 | (60) |
|
|
146 | (7) |
|
|
147 | (3) |
|
4.1.2 Incident and Exitant Radiance Functions |
|
|
150 | (2) |
|
4.1.3 Radiometric Spectral Distributions |
|
|
152 | (1) |
|
4.1.4 Luminance and Photometry |
|
|
152 | (1) |
|
4.2 Working with Radiometric Integrals |
|
|
153 | (3) |
|
4.2.1 Integrals over Projected Solid Angle |
|
|
154 | (1) |
|
4.2.2 Integrals over Spherical Coordinates |
|
|
154 | (1) |
|
4.2.3 Integrals over Area |
|
|
155 | (1) |
|
|
156 | (4) |
|
4.3.1 The BRDF and the BTDF |
|
|
157 | (2) |
|
|
159 | (1) |
|
|
160 | (5) |
|
|
161 | (2) |
|
4.4.2 Standard Illuminants |
|
|
163 | (2) |
|
4.5 Representing Spectral Distributions |
|
|
165 | (10) |
|
|
165 | (1) |
|
4.5.2 General Spectral Distributions |
|
|
166 | (4) |
|
4.5.3 Embedded Spectral Data |
|
|
170 | (1) |
|
4.5.4 Sampled Spectral Distributions |
|
|
170 | (5) |
|
|
175 | (30) |
|
|
176 | (4) |
|
|
180 | (2) |
|
|
182 | (4) |
|
4.6.4 Why Spectral Rendering? |
|
|
186 | (1) |
|
4.6.5 Choosing the Number of Wavelength Samples |
|
|
187 | (2) |
|
4.6.6 From RGB to Spectra |
|
|
189 | (11) |
|
|
200 | (3) |
|
|
203 | (2) |
|
Chapter 05 Cameras and Film |
|
|
205 | (56) |
|
|
206 | (8) |
|
5.1.1 Camera Coordinate Spaces |
|
|
208 | (4) |
|
5.1.2 The Camera Base Class |
|
|
212 | (2) |
|
5.2 Projective Camera Models |
|
|
214 | (14) |
|
5.2.1 Orthographic Camera |
|
|
216 | (3) |
|
|
219 | (4) |
|
5.2.3 The Thin Lens Model and Depth of Field |
|
|
223 | (5) |
|
|
228 | (2) |
|
|
230 | (31) |
|
5.4.1 The Camera Measurement Equation |
|
|
231 | (1) |
|
5.4.2 Modeling Sensor Response |
|
|
232 | (10) |
|
5.4.3 Filtering Image Samples |
|
|
242 | (2) |
|
|
244 | (3) |
|
5.4.5 Common Film Functionality |
|
|
247 | (1) |
|
|
248 | (5) |
|
|
253 | (1) |
|
|
254 | (2) |
|
|
256 | (5) |
|
|
261 | (136) |
|
6.1 Basic Shape Interface |
|
|
261 | (8) |
|
|
261 | (1) |
|
6.1.2 Ray-Bounds Intersections |
|
|
262 | (3) |
|
|
265 | (1) |
|
6.1.4 Intersection Coordinate Spaces |
|
|
266 | (1) |
|
|
267 | (1) |
|
|
267 | (1) |
|
|
267 | (2) |
|
|
269 | (17) |
|
|
272 | (1) |
|
|
272 | (7) |
|
|
279 | (1) |
|
|
280 | (6) |
|
|
286 | (5) |
|
|
287 | (1) |
|
|
288 | (2) |
|
|
290 | (1) |
|
|
291 | (5) |
|
|
293 | (1) |
|
|
293 | (2) |
|
|
295 | (1) |
|
|
296 | (30) |
|
6.5.1 Mesh Representation and Storage |
|
|
297 | (4) |
|
|
301 | (2) |
|
6.5.3 Ray-Triangle Intersection |
|
|
303 | (10) |
|
|
313 | (13) |
|
|
326 | (19) |
|
|
331 | (7) |
|
|
338 | (7) |
|
|
345 | (12) |
|
|
348 | (1) |
|
|
349 | (8) |
|
*6.8 Managing Rounding Error |
|
|
357 | (40) |
|
6.8.1 Floating-Point Arithmetic |
|
|
358 | (11) |
|
6.8.2 Conservative Ray-Bounds Intersections |
|
|
369 | (1) |
|
6.8.3 Accurate Quadratic Discriminants |
|
|
370 | (2) |
|
6.8.4 Robust Triangle Intersections |
|
|
372 | (1) |
|
6.8.5 Bounding Intersection Point Error |
|
|
373 | (7) |
|
6.8.6 Robust Spawned Ray Origins |
|
|
380 | (3) |
|
6.8.7 Avoiding Intersections behind Ray Origins |
|
|
383 | (3) |
|
|
386 | (1) |
|
|
386 | (4) |
|
|
390 | (7) |
|
Chapter 07 Primitives And Intersection Acceleration |
|
|
397 | (48) |
|
7.1 Primitive Interface and Geometric Primitives |
|
|
398 | (7) |
|
7.1.1 Geometric Primitives |
|
|
398 | (4) |
|
7.1.2 Object Instancing and Primitives in Motion |
|
|
402 | (3) |
|
|
405 | (1) |
|
7.3 Bounding Volume Hierarchies |
|
|
406 | (39) |
|
|
408 | (7) |
|
7.3.2 The Surface Area Heuristic |
|
|
415 | (5) |
|
7.3.3 Linear Bounding Volume Hierarchies |
|
|
420 | (8) |
|
7.3.4 Compact BVH for Traversal |
|
|
428 | (2) |
|
7.3.5 Bounding and Intersection Tests |
|
|
430 | (4) |
|
|
434 | (7) |
|
|
441 | (4) |
|
Chapter 08 Sampling And Reconstruction |
|
|
445 | (90) |
|
|
445 | (15) |
|
8.1.1 The Frequency Domain and the Fourier Transform |
|
|
446 | (3) |
|
8.1.2 Ideal Sampling and Reconstruction |
|
|
449 | (3) |
|
|
452 | (2) |
|
8.1.4 Understanding Pixels |
|
|
454 | (1) |
|
8.1.5 Sampling and Aliasing in Rendering |
|
|
455 | (2) |
|
8.1.6 Spectral Analysis of Sampling Patterns |
|
|
457 | (3) |
|
8.2 Sampling and Integration |
|
|
460 | (7) |
|
*8.2.1 Fourier Analysis of Variance |
|
|
460 | (4) |
|
8.2.2 Low Discrepancy and Quasi Monte Carlo |
|
|
464 | (3) |
|
|
467 | (4) |
|
|
471 | (1) |
|
|
472 | (5) |
|
|
477 | (16) |
|
8.6.1 Hammersley and Halton Points |
|
|
477 | (3) |
|
8.6.2 Randomization via Scrambling |
|
|
480 | (5) |
|
8.6.3 Halton Sampler Implementation |
|
|
485 | (4) |
|
|
489 | (4) |
|
|
493 | (21) |
|
8.7.1 Stratification over Elementary Intervals |
|
|
495 | (1) |
|
8.7.2 Randomization and Scrambling |
|
|
496 | (2) |
|
8.7.3 Sobol' Sample Generation |
|
|
498 | (1) |
|
8.7.4 Global Sobol' Sampler |
|
|
499 | (3) |
|
8.7.5 Padded Sobol' Sampler |
|
|
502 | (3) |
|
8.7.6 Blue Noise Sobol' Sampler |
|
|
505 | (5) |
|
|
510 | (4) |
|
|
514 | (21) |
|
|
514 | (3) |
|
|
517 | (1) |
|
|
518 | (2) |
|
|
520 | (1) |
|
|
521 | (2) |
|
|
523 | (2) |
|
8.8.7 Windowed Sine Filter |
|
|
525 | (2) |
|
|
527 | (5) |
|
|
532 | (3) |
|
Chapter 09 Reflection Models |
|
|
535 | (98) |
|
|
537 | (9) |
|
9.1.1 Geometric Setting and Conventions |
|
|
537 | (1) |
|
|
538 | (3) |
|
9.1.3 Hemispherical Reflectance |
|
|
541 | (2) |
|
9.1.4 Delta Distributions in BSDFs |
|
|
543 | (1) |
|
|
543 | (3) |
|
|
546 | (2) |
|
9.3 Specular Reflection and Transmission |
|
|
548 | (12) |
|
9.3.1 Physical Principles |
|
|
548 | (1) |
|
9.3.2 The Index of Refraction |
|
|
549 | (1) |
|
9.3.3 The Law of Specular Reflection |
|
|
550 | (2) |
|
|
552 | (4) |
|
9.3.5 The Fresnel Equations |
|
|
556 | (1) |
|
9.3.6 The Fresnel Equations for Conductors |
|
|
557 | (3) |
|
|
560 | (3) |
|
|
563 | (8) |
|
9.5.1 Thin Dielectric BSDF |
|
|
566 | (3) |
|
*9.5.2 Non-Symmetric Scattering and Refraction |
|
|
569 | (2) |
|
9.6 Roughness Using Microfacet Theory |
|
|
571 | (16) |
|
9.6.1 The Microfacet Distribution |
|
|
573 | (2) |
|
9.6.2 The Masking Function |
|
|
575 | (3) |
|
9.6.3 The Masking-Shadowing Function |
|
|
578 | (1) |
|
9.6.4 Sampling the Distribution of Visible Normals |
|
|
579 | (3) |
|
9.6.5 The Torrance--Sparrow Model |
|
|
582 | (5) |
|
9.7 Rough Dielectric BSDF |
|
|
587 | (46) |
|
|
591 | (7) |
|
9.8.1 Basic Data Structures |
|
|
598 | (1) |
|
|
599 | (3) |
|
*9.9 Scattering from Hair |
|
|
602 | (1) |
|
|
602 | (2) |
|
9.9.2 Scattering from Hair |
|
|
604 | (3) |
|
9.9.3 Longitudinal Scattering |
|
|
607 | (2) |
|
9.9.4 Absorption in Fibers |
|
|
609 | (4) |
|
9.9.5 Azimuthal Scattering |
|
|
613 | (3) |
|
9.9.6 Scattering Model Evaluation |
|
|
616 | (2) |
|
|
618 | (2) |
|
9.9.8 Hair Absorption Coefficients |
|
|
620 | (1) |
|
|
621 | (8) |
|
|
629 | (4) |
|
Chapter 10 Textures And Materials |
|
|
633 | (64) |
|
10.1 Texture Sampling and Antialiasing |
|
|
634 | (15) |
|
10.1.1 Finding the Texture Sampling Rate |
|
|
635 | (7) |
|
10.1.2 Ray Differentials at Medium Transitions |
|
|
642 | (1) |
|
*10.1.3 Ray Differentials for Specular Reflection and Transmission |
|
|
643 | (4) |
|
10.1.4 Filtering Texture Functions |
|
|
647 | (2) |
|
10.2 Texture Coordinate Generation |
|
|
649 | (6) |
|
|
650 | (1) |
|
|
651 | (2) |
|
10.2.3 Cylindrical Mapping |
|
|
653 | (1) |
|
|
654 | (1) |
|
|
654 | (1) |
|
10.3 Texture Interface and Basic Textures |
|
|
655 | (5) |
|
|
656 | (1) |
|
|
657 | (1) |
|
|
657 | (3) |
|
|
660 | (14) |
|
10.4.1 Texture Memory Management |
|
|
662 | (1) |
|
10.4.2 Image Texture Evaluation |
|
|
663 | (1) |
|
|
664 | (3) |
|
10.4.4 Image Map Filtering |
|
|
667 | (7) |
|
10.5 Material Interface and Implementations |
|
|
674 | (23) |
|
10.5.1 Material Implementations |
|
|
678 | (4) |
|
10.5.2 Finding the BSDF at a Surface |
|
|
682 | (2) |
|
|
684 | (3) |
|
|
687 | (3) |
|
|
690 | (4) |
|
|
694 | (3) |
|
Chapter 11 Volume Scattering |
|
|
697 | (42) |
|
11.1 Volume Scattering Processes |
|
|
697 | (7) |
|
|
699 | (1) |
|
|
700 | (1) |
|
11.1.3 Out Scattering and Attenuation |
|
|
701 | (1) |
|
|
702 | (2) |
|
|
704 | (5) |
|
|
707 | (2) |
|
|
709 | (5) |
|
11.3.1 The Henyey--Greenstein Phase Function |
|
|
711 | (3) |
|
|
714 | (25) |
|
|
717 | (3) |
|
11.4.2 Homogeneous Medium |
|
|
720 | (1) |
|
11.4.3 DDA Majorant Iterator |
|
|
721 | (7) |
|
11.4.4 Uniform Grid Medium |
|
|
728 | (3) |
|
|
731 | (3) |
|
|
734 | (2) |
|
|
736 | (3) |
|
|
739 | (74) |
|
|
740 | (6) |
|
12.1.1 Photometric Light Specification |
|
|
744 | (1) |
|
12.1.2 The LightBase Class |
|
|
744 | (2) |
|
|
746 | (11) |
|
|
748 | (2) |
|
12.2.2 Texture Projection Lights |
|
|
750 | (5) |
|
12.2.3 Goniophotometric Diagram Lights |
|
|
755 | (2) |
|
|
757 | (2) |
|
|
759 | (5) |
|
12.5 Infinite Area Lights |
|
|
764 | (16) |
|
12.5.1 Uniform Infinite Lights |
|
|
765 | (1) |
|
12.5.2 Image Infinite Lights |
|
|
766 | (4) |
|
*12.5.3 Portal Image Infinite Lights |
|
|
770 | (10) |
|
|
780 | (33) |
|
12.6.1 Uniform Light Sampling |
|
|
782 | (1) |
|
12.6.2 Power Light Sampler |
|
|
783 | (2) |
|
*12.6.3 BVH Light Sampling |
|
|
785 | (21) |
|
|
806 | (4) |
|
|
810 | (3) |
|
Chapter 13 Light Transport I: Surface Reflection |
|
|
813 | (40) |
|
13.1 The Light Transport Equation |
|
|
813 | (8) |
|
|
814 | (1) |
|
13.1.2 Analytic Solutions to the LTE |
|
|
815 | (1) |
|
13.1.3 The Surface Form of the LTE |
|
|
816 | (1) |
|
13.1.4 Integral over Paths |
|
|
817 | (2) |
|
13.1.5 Delta Distributions in the Integrand |
|
|
819 | (1) |
|
13.1.6 Partitioning the Integrand |
|
|
820 | (1) |
|
|
821 | (4) |
|
|
822 | (1) |
|
|
822 | (2) |
|
13.2.3 Incremental Path Construction |
|
|
824 | (1) |
|
13.3 A Simple Path Tracer |
|
|
825 | (5) |
|
13.4 A Better Path Tracer |
|
|
830 | (23) |
|
13.4.1 Path Regularization |
|
|
841 | (2) |
|
|
843 | (6) |
|
|
849 | (4) |
|
Chapter 14 Light Transport II: Volume Rendering |
|
|
853 | (64) |
|
14.1 The Equation of Transfer |
|
|
853 | (14) |
|
14.1.1 Null-Scattering Extension |
|
|
855 | (1) |
|
14.1.2 Evaluating the Equation of Transfer |
|
|
856 | (1) |
|
14.1.3 Sampling the Majorant Transmittance |
|
|
857 | (6) |
|
*14.1.4 Generalized Path Space |
|
|
863 | (3) |
|
*14.1.5 Evaluating the Volumetric Path Integral |
|
|
866 | (1) |
|
14.2 Volume Scattering Integrators |
|
|
867 | (24) |
|
14.2.1 A Simple Volumetric Integrator |
|
|
867 | (6) |
|
*14.2.2 Improving the Sampling Techniques |
|
|
873 | (4) |
|
*14.2.3 Improved Volumetric Integrator |
|
|
877 | (14) |
|
14.3 Scattering from Layered Materials |
|
|
891 | (26) |
|
14.3.1 The One-Dimensional Equation of Transfer |
|
|
892 | (1) |
|
|
893 | (15) |
|
14.3.3 Coated Diffuse and Coated Conductor Materials |
|
|
908 | (1) |
|
|
909 | (5) |
|
|
914 | (3) |
|
*Chapter 15 Wavefront Rendering On Gpus |
|
|
917 | (60) |
|
15.1 Mapping Path Tracing to the GPU |
|
|
919 | (9) |
|
15.1.1 Basic GPU Architecture |
|
|
919 | (6) |
|
15.1.2 Structuring Rendering Computation |
|
|
925 | (1) |
|
|
926 | (2) |
|
15.2 Implementation Foundations |
|
|
928 | (10) |
|
15.2.1 Execution and Memory Space Specification |
|
|
928 | (1) |
|
15.2.2 Launching Kernels on the GPU |
|
|
929 | (1) |
|
15.2.3 Structure-of-Arrays Layout |
|
|
930 | (5) |
|
|
935 | (3) |
|
11.3 Path Tracer Implementation |
|
|
938 | (39) |
|
|
940 | (1) |
|
15.3.2 The Render() Method |
|
|
941 | (2) |
|
15.3.3 Generating Camera Rays |
|
|
943 | (4) |
|
15.3.4 Loop over Ray Depths |
|
|
947 | (2) |
|
|
949 | (2) |
|
15.3.6 Intersection Testing |
|
|
951 | (3) |
|
15.3.7 Participating Media |
|
|
954 | (1) |
|
15.3.8 Ray-Found Emission |
|
|
955 | (4) |
|
15.3.9 Surface Scattering |
|
|
959 | (10) |
|
|
969 | (1) |
|
15.3.11 Updating the Film |
|
|
970 | (1) |
|
|
971 | (2) |
|
|
973 | (4) |
|
Chapter 16 Retrospective and the Future |
|
|
977 | (16) |
|
|
977 | (2) |
|
|
979 | (5) |
|
16.2.1 Out-of-Core Rendering |
|
|
979 | (1) |
|
16.2.2 Preshaded Micropolygon Grids |
|
|
980 | (1) |
|
|
981 | (2) |
|
16.2.4 Interactive and Animation Rendering |
|
|
983 | (1) |
|
16.2.5 Specialized Compilation |
|
|
983 | (1) |
|
|
984 | (8) |
|
16.3.1 Inverse and Differentiable Rendering |
|
|
984 | (5) |
|
16.3.2 Machine Learning and Rendering |
|
|
989 | (3) |
|
|
992 | (1) |
|
|
992 | (1) |
|
|
|
|
993 | (38) |
|
|
1031 | (88) |
|
C Processing The Scene Description |
|
|
1119 | (22) |
References |
|
1141 | (42) |
Index Of Fragments |
|
1183 | (18) |
Index Of Classes And Their Members |
|
1201 | (12) |
Index Of Miscellaneous Identifiers |
|
1213 | (2) |
Subject Index |
|
1215 | (30) |
Colophon |
|
1245 | |