第1章 概述 1
1.1 文學編程 1
1.2 照片級渲染和光綫跟蹤算法 3
1.2.1 相機 4
1.2.2 光綫-對象相交 5
1.2.3 光照分布 6
1.2.4 可見性 7
1.2.5 錶麵散射 7
1.2.6 遞歸光綫跟蹤 8
1.2.7 光綫傳播 9
1.3 pbrt係統概述 11
1.3.1 執行階段 14
1.3.2 場景錶達 15
1.3.3 渲染器接口與SamplerRenderer 17
1.3.4 主渲染循環 19
1.3.5 pbrt的並行機製 27
1.3.6 WHITTED光綫跟蹤積分器 31
1.4 如何閱讀本書 35
1.5 使用並理解程序代碼 36
1.5.1 指針或引用 36
1.5.2 代碼優化 36
1.5.3 本書網站 37
1.5.4 係統擴展 37
1.5.5 Bug 37
1.6 進一步閱讀 38
1.7 本章練習 39
第2章 幾何形狀和轉換 40
2.1 坐標係 40
2.2 嚮量 41
2.2.1 運算 42
2.2.2 縮放操作 43
2.2.3 點積和叉積計算 44
2.2.4 標準化計算 46
2.2.5 基於嚮量的坐標係 46
2.3 點 47
2.4 法綫 49
2.5 射綫 50
2.6 三維包圍盒 53
2.7 轉換操作 56
2.7.1 齊次坐標 57
2.7.2 基本操作 58
2.7.3 平移 59
2.7.4 縮放操作 61
2.7.5 x,y,z軸鏇轉 62
2.7.6 圍繞任意軸的鏇轉行為 63
2.7.7 視見轉換 65
2.8 轉換應用 66
2.8.1 點 67
2.8.2 嚮量 67
2.8.3 法綫 68
2.8.4 射綫 68
2.8.5 包圍盒 69
2.8.6 復閤轉換 69
2.8.7 轉換和坐標係的左右手規則 70
2.9 動畫轉換 70
2.9.1 四元數 72
2.9.2 四元數插值 74
2.9.3 AnimatedTransform實現 75
2.10 微分幾何 79
2.11 進一步閱讀 82
2.12 本章練習 83
第3章 幾何形狀 84
3.1 基本的Shape接口 84
3.1.1 包圍機製 85
3.1.2 細化操作 86
3.1.3 相交行為 87
3.1.4 避免自相交行為 88
3.1.5 幾何體著色 88
3.1.6 錶麵積 89
3.1.7 多麵性 89
3.2 球體 89
3.2.1 構建過程 91
3.2.2 包圍體 91
3.2.3 相交 92
3.2.4 局部球體 94
*3.2.5 法綫嚮量的偏導數 96
3.2.6 DifferentialGeometry的初始化操作 97
3.2.7 錶麵積 98
3.3 圓柱體 99
3.3.1 圓柱體的構造過程 99
3.3.2 圓柱體的包圍機製 101
3.3.3 圓柱體的相交計算 101
3.3.4 局部圓柱體 102
3.3.5 圓柱體的錶麵積 103
3.4 圓盤 103
3.4.1 圓盤的構建過程 104
3.4.2 圓盤的包圍機製 105
3.4.3 圓盤的相交計算 105
3.4.4 圓盤的錶麵積 106
3.5 其他二次錶麵 107
3.5.1 圓錐體 107
3.5.2 拋物麵 108
3.5.3 雙麯麵 108
3.6 三角形和網格 109
3.6.1 三角形 112
3.6.2 三角形相交計算 113
3.6.3 網格錶麵積 117
3.6.4 著色幾何體 118
*3.7 錶麵細分 120
3.7.1 網格錶達方式 122
3.7.2 網格邊界 130
3.7.3 網格細分 130
3.7.4 計算新的頂點位置 132
3.7.5 更新網格拓撲結構 137
3.7.6 極限錶麵和輸齣結果 139
3.8 進一步閱讀 142
3.9 本章練習 143
第4章 圖元和相交加速計算 148
4.1 圖元接口和幾何圖元 148
4.1.1 幾何圖元 151
4.1.2 TransformedPrimitive:對象實例和動畫圖元 152
4.2 集閤體 155
4.3 網格加速結構 158
4.3.1 構建過程 159
4.3.2 遍曆操作 164
4.4 包圍體層次結構 169
4.4.1 BVH構建過程 170
4.4.2 啓發式錶麵積計算 176
4.4.3 遍曆過程中的緊湊BVH 180
4.4.4 遍曆 182
4.5 kd樹加速結構 185
4.5.1 樹形結構的錶達方式 186
4.5.2 樹形結構的構造方式 188
4.5.3 遍曆操作 196
4.6 調試聚閤體 200
4.6.1 尋找聚閤體中的bug 201
4.6.2 修復幾何體中的bug 204
4.6.3 聚閤體性能問題 204
4.7 進一步閱讀 205
4.7.1 網格 205
4.7.2 包圍體層次結構 205
4.7.3 kd樹 207
4.7.4 啓發式錶麵積方案 207
4.7.5 其他加速結構 208
4.8 本章練習 209
第5章 顔色和輻射度 212
5.1 光譜錶達方式 212
5.1.1 Spectrum類型 213
5.1.2 CoefficientSpectrum實現 214
5.2 SampledSpectrum類 216
5.2.1 XYZ顔色 219
5.2.2 RGB顔色 222
5.3 RGBSpectrum實現 227
5.4 輻射度測量學的基本知識 229
5.4.1 基本量值 230
5.4.2 入射和齣射輻射度函數 233
5.4.3 亮度和光度測定 233
5.5 與輻射積分協同工作 234
5.5.1 投影立體角的積分運算 235
5.5.2 球體坐標的積分運算 235
5.5.3 麵積積分運算 237
5.6 錶麵反射 239
5.6.1 BRDF 239
5.6.2 BSSRDF 240
5.7 進一步閱讀 241
5.8 本章練習 242
第6章 相機模型 243
6.1 相機模型概述 243
6.2 投影相機模型 246
6.2.1 正交相機 247
6.2.2 透視相機 250
6.2.3 景深 253
6.3 環境相機 257
6.4 進一步閱讀 258
6.5 本章練習 259
第7章 采樣和重構 260
7.1 采樣理論 260
7.1.1 頻率範圍和傅裏葉變換 261
7.1.2 理想采樣狀態和重構 263
7.1.3 鋸齒 266
7.1.4 抗鋸齒技術 267
7.1.5 圖像閤成技術 269
7.1.6 渲染中的鋸齒來源 269
7.1.7 理解像素數據 270
7.2 圖像采樣接口 271
7.3 分層采樣 277
7.4 低偏差采樣 287
*7.4.1 偏差定義 288
7.4.2 HAMMERSLEY和HALTON序列 289
7.4.3 [0,2]序列 295
7.4.4 低偏差采樣器 298
*7.5 最佳候選采樣模式 303
7.6 自適應采樣 309
7.7 圖像重構 314
7.8 Film類和成像管綫 323
7.8.1 Film接口 323
7.8.2 ImageFilm類 325
7.9 進一步閱讀 333
7.10 本章練習 336
第8章 反射模型 339
8.1 基本接口 342
8.1.1 反射率 344
8.1.2 BRDF→BTDF適配器 345
8.1.3 BxDF縮放適配器 345
8.2 鏡麵反射和透射 346
8.2.1 菲涅耳反射率 347
8.2.2 鏡麵反射 351
8.2.3 鏡麵透射 354
8.3 Lambertian反射 358
8.4 微麵元模型 358
8.4.1 Oren-Nayar漫反射 360
8.4.2 Torrance-Sparrow模型 361
8.4.3 Blinn微麵元分布 364
8.4.4 各項異性微麵元模型 366
8.5 菲涅耳入射效果 368
8.6 測算BRDF 370
8.6.1 不規則的各嚮同性測算BRDF 371
8.6.2 規則半角格式 374
8.7 進一步閱讀 376
8.8 本章練習 378
第9章 材質 380
9.1 BSDF 380
9.2 Material接口和實現 385
9.2.1 MatteMaterial類 386
9.2.2 PlasticMaterial類 387
9.2.3 混閤材質 389
9.2.4 測算材質 390
9.2.5 其他材質 391
9.3 凹凸貼圖 392
9.4 進一步閱讀 396
9.5 本章練習 397
第10章 紋理 399
10.1 采樣和抗鋸齒操作 400
10.1.1 計算紋理采樣率 400
10.1.2 濾波紋理函數 404
*10.1.3 鏡麵反射和透射的光綫微分 405
10.2 紋理坐標生成 408
10.2.1 2D(u,v)映射 409
10.2.2 球體映射 410
10.2.3 圓柱體映射 411
10.2.4 平麵映射 412
10.2.5 3D映射 413
10.3 紋理接口和基本紋理 413
10.3.1 固定紋理 414
10.3.2 混閤紋理 415
10.3.3 綫性插值 416
10.4 圖像紋理 417
10.4.1 紋理緩存 418
10.4.2 紋理鏈 421
10.4.3 各嚮同性三角形濾波器 428
*10.4.4 橢圓加權平均值 430
10.5 體紋理和過程紋理 435
10.5.1 UV紋理 436
10.5.2 棋盤紋理 436
10.5.3 體棋盤紋理 441
10.6 噪聲 442
10.6.1 Perlin噪聲 443
10.6.2 隨機波爾卡圓斑 446
10.6.3 頻譜閤成 448
10.6.4 凹凸和褶皺紋理 451
10.6.5 風力波形 452
10.6.6 大理石紋理 453
10.7 進一步閱讀 454
10.8 本章練習 456
第11章 體散射 459
11.1 體散射處理過程 459
11.1.1 吸收過程 460
11.1.2 放射過程 461
11.1.3 外散射和衰減 462
11.1.4 內散射 463
11.2 相位函數 464
11.3 體接口和均一介質 467
11.4 密度變化的空間體 470
11.4.1 3D網格 471
11.4.2 指數密度 473
11.5 體聚閤 475
11.6 BSSRDF類 476
11.7 進一步閱讀 478
11.8 本章練習 479
第12章 光源 481
12.1 Light接口 481
12.2 點光源 484
12.2.1 聚光燈 486
12.2.2 紋理投射光照 488
12.2.3 測角光度圖光照 491
12.3 平行光照 494
12.4 區域光照 495
12.5 無窮遠區域光源 499
12.6 進一步閱讀 501
12.7 本章練習 503
第13章 濛特卡羅積分I:基本概念 504
13.1 背景知識和概率迴顧 505
13.1.1 連續隨機變量 505
13.1.2 期望值和方差 506
13.2 濛特卡羅估算函數 507
13.3 隨機變量的基本采樣 508
13.3.1 反演法 509
13.3.2 捨選法 514
*13.4 METROPOLIS采樣 516
13.4.1 基本算法 516
13.4.2 選取突變策略 517
13.4.3 初始偏差 518
13.4.4 基於Metropolis采樣的積分 519
13.4.5 示例:一維設置 519
13.5 分布間的轉換 522
13.5.1 多維轉換 523
13.5.2 極坐標 523
13.5.3 球體坐標 523
13.6 包含多維轉換的2D采樣 524
13.6.1 示例:半球均勻采樣 524
13.6.2 單位圓盤對象采樣 526
13.6.3 餘弦加權半球采樣 529
13.6.4 示例:三角形采樣 530
13.6.5 示例:分段-常量2D分布 531
13.7 進一步閱讀 534
13.8 本章練習 535
第14章 濛特卡羅積分II:效率改善 536
14.1 俄羅斯輪盤賭和劃分機製 537
14.2 采樣置放 538
14.2.1 分層采樣 538
14.2.2 quasi濛特卡羅技術 540
14.2.3 采樣翹麯和變形 541
14.3 偏差 541
14.4 重要性采樣 542
14.5 多重重要性采樣機製 544
14.6 采樣反射函數 547
14.6.1 Blinn微麵元分布采樣 548
14.6.2 各嚮異性微麵元模型的采樣 551
14.6.3 FresnelBlend采樣 553
14.6.4 鏡麵反射和透射 553
14.6.5 應用:反射率估算 555
14.6.6 BSDF采樣 556
14.7 光源采樣 559
14.7.1 基本接口 560
14.7.2 包含奇點的光源 562
14.7.3 區域光源 565
14.7.4 ShapeSet采樣 571
14.7.5 無窮大區域光源 572
*14.8 體散射 577
14.8.1 相位函數采樣 577
14.8.2 計算光學厚度 578
14.9 進一步閱讀 579
14.10 本章練習 580
第15章 光綫傳輸I:錶麵反射 583
15.1 直接光照 584
15.2 光綫傳輸方程 592
15.2.1 基本推導過程 593
15.2.2 LTE的解析解 594
15.2.3 LTE的錶麵形式 595
15.2.4 路徑積分 596
15.2.5 被積函數中的delta分布 597
15.2.6 劃分被積函數 598
15.2.7 測量方程和重要性 599
15.3 路徑跟蹤 600
15.3.1 概述 600
15.3.2 路徑采樣 601
15.3.3 遞增式路徑構造 603
15.3.4 實現過程 603
15.3.5 雙嚮路徑跟蹤 607
15.4 實時全局光照 608
15.4.1 創建虛擬光源 611
15.4.2 利用虛擬光源進行渲染 615
15.5 輻射度緩存機製 619
15.5.1 利用輻射度緩存進行渲染 622
15.5.2 查找和插值 624
15.5.3 添加新值 627
15.6 粒子跟蹤和光子貼圖 629
*15.6.1 粒子跟蹤的理論基礎 630
15.6.2 光子積分器 632
15.6.3 構造光子貼圖 634
15.6.4 使用光子貼圖 645
15.6.5 光子插值和密度估算 654
*15.7 METROPOLIS光綫傳輸算法 658
15.7.1 采樣錶達方式 661
15.7.2 突變行為 663
15.7.3 生成路徑 665
15.7.4 路徑影響作用 667
15.7.5 MetropolisRenderer實現 674
15.7.6 渲染操作 677
15.8 進一步閱讀 681
15.9 本章練習 684
*第16章 光綫傳輸II:體渲染 688
16.1 傳輸方程 688
16.2 體積分器接口 690
16.3 發射積分器 690
16.4 單散射積分器 695
16.5 子錶麵散射 697
16.5.1 采樣點的泊鬆分布 700
16.5.2 構建采樣點八叉樹 707
16.5.3 偶極漫反射近似計算 711
16.5.4 基於層次結構積分的渲染行為 716
16.5.5 設置散射屬性 719
16.6 進一步閱讀 721
16.7 本章練習 723
*第17章 光綫傳輸III:光綫傳輸的預計算 727
17.1 基礎函數:理論 728
17.1.1 分段式-常數基 729
17.1.2 基上的投影 730
17.1.3 正交基函數 731
17.2 球諧函數 732
17.2.1 高效計算 734
17.2.2 光源投影 740
17.2.3 投影入射輻射度函數 746
17.2.4 減少環狀效果 747
17.2.5 鏇轉 748
17.3 輻射度探測器 752
17.3.1 創建輻射度探測器 753
17.3.2 使用輻射度探測器 759
17.4 漫反射傳輸預計算 763
17.5 光澤傳輸預計算 766
17.5.1 傳輸矩陣 768
17.5.2 BSDF矩陣 769
17.5.3 GlossyPRTIntegrator實現 771
17.6 進一步閱讀 774
17.7 本章練習 775
第18章 迴顧和展望 777
18.1 設計迴顧 777
18.1.1 抽象與效率 778
18.1.2 其他設計方案:僅使用三角形 778
18.1.3 提升場景復雜度 779
18.2 吞吐量處理器 779
18.2.1 未來發展狀況 781
18.2.2 參考資源 781
18.3 總結 782
附錄A 實用工具 783
A.1 主要包含的文件 783
A.1.1 工具函數 783
A.1.2 僞隨機數 786
A.2 圖形文件的輸入和輸齣 786
A.3 與用戶的通信 787
A.3.1 錯誤報告 788
A.3.2 進度報告 788
A.3.3 簡單的浮點文件讀取器 789
A.4 探測器和統計 789
A.5 內存管理 791
A.5.1 可變棧的分配 791
A.5.2 引用計數對象 792
A.5.3 以緩存友好方式使用內存 794
A.5.4 Arena內存分配 796
A.5.5 2D塊數組 798
A.6 數學計算例程 801
A.6.1 2×2綫性方程組 801
A.6.2 4×4矩陣 801
A.7 八叉樹 802
A.8 kd樹 807
A.9 並行機製 813
A.9.1 內存一緻性模型以及性能 813
A.9.2 原子操作 814
A.9.3 互斥體 817
A.9.4 任務係統 818
A.10 進一步閱讀 820
A.11 本章練習 821
附錄B 場景描述接口 822
B.1 參數集 823
B.1.1 ParamSetItem結構 824
B.1.2 添加參數集 824
B.1.3 在參數集查找數據值 825
B.2 初始化和渲染選項 827
B.2.1 狀態跟蹤 828
B.2.2 轉換操作 829
B.2.3 選項 831
B.3 場景描述 834
B.3.1 層次圖形狀態 834
B.3.2 紋理和材質參數 836
B.3.3 錶麵和材質描述 837
B.3.4 光源 839
B.3.5 形狀和體區域 840
B.3.6 對象實例化操作 843
B.3.7 場景結束與渲染操作 845
B.4 添加新的對象實現 847
B.5 進一步閱讀 847
B.6 本章練習 848
參考文獻 850
· · · · · · (
收起)