第Ⅰ部分 幾何復雜性
第1章 實現照片級真實感的虛擬
植物 5
1.1 場景管理 6
1.1.1 種植柵格 6
1.1.2 種植策略 6
1.1.3 實時優(yōu)化 7
1.2 草層 7
1.2.1 通過溶解模擬Alpha透明 9
1.2.2 變化 10
1.2.3 光照 11
1.2.4 風 12
1.3 地面雜物層 12
1.4 樹和灌木層 13
1.5 陰影 14
1.6 后處理 15
1.6.1 天空圓頂輝散 16
1.6.2 全場景輝光 16
1.7 本章小結 17
參考文獻 18
第2章 使用基于GPU幾何體剪切圖
的地形渲染 19
2.1 幾何體剪切圖簡介 19
2.2 GPU實現概覽 21
2.2.1 數據結構 22
2.2.2 剪切圖大小 22
2.3 渲染 23
2.3.1 活動層 23
2.3.2 頂點和索引緩沖區(qū) 23
2.3.3 視錐剪切 24
2.3.4 DrawPrimitive調用 25
2.3.5 頂點著色器 25
2.3.6 像素著色器 27
2.4 更新 28
2.4.1 升采樣 28
2.4.2 殘差 29
2.4.3 法線圖 30
2.5 結果和討論 30
2.6 本章小結和改進 31
2.6.1 頂點紋理 31
2.6.2 去掉法線圖 31
2.6.3 不需要存儲空間的地形
合成 31
參考文獻 31
第3章 幾何體實例化的內幕 33
3.1 為什么要對幾何體實例化? 34
3.2 定義 34
3.2.1 幾何體包 34
3.2.2 實例屬性 35
3.2.3 幾何體實例 35
3.2.4 渲染和紋理場景 35
3.2.5 幾何體批次 36
3.3 實現 37
3.3.1 靜態(tài)批次 38
3.3.2 動態(tài)批次 39
3.3.3 頂點常量實例化 40
3.3.4 幾何體實例API批次 43
3.4 本章小結 46
參考文獻 48
第4章 分段緩沖 49
4.1 問題空間 49
4.2 解決方案 50
4.3 方法 50
4.3.1 分段緩沖的第一步 50
4.3.2 分段緩沖的第二步 50
4.3.3 分段緩沖的第三步 51
4.4 改進分段緩沖技術 51
4.5 本章小結 51
參考文獻 51
第5章 用多流來優(yōu)化資源管理 53
5.1 概覽 53
5.2 實現 55
5.2.1 DirectX 9.0中的多流 55
5.2.2 資源管理 57
5.2.3 處理頂點 59
5.3 本章小結 63
參考文獻 63
第6章 讓硬件遮擋查詢發(fā)揮作用 65
6.1 引言 65
6.2 受益于遮擋查詢的場景 66
6.3 遮擋裁減 66
6.4 層的停等方法 67
6.4.1 為什么使用層 67
6.4.2 層結構 67
6.4.3 層的算法 68
6.4.4 問題1:停滯 68
6.4.5 問題2:查詢的額外開銷 68
6.5 一致性層裁減 69
6.5.1 想法1:猜測 69
6.5.2 想法2:提升,提升 70
6.5.3 算法 70
6.5.4 實現細節(jié) 71
6.5.5 停滯比較少的原因 73
6.5.6 查詢較少的原因 73
6.5.7 如何遍歷層 73
6.6 優(yōu)化 74
6.6.1 用真正的幾何體查詢 74
6.6.2 只有Z的渲染遍 74
6.6.3 近似的可見性 74
6.6.4 保守的可見性測試 74
6.7 本章小結 75
參考文獻 76
第7章 帶有位移映射的細分表面自
適應鑲嵌 77
7.1 細分表面 77
7.1.1 一些定義 78
7.1.2 Catmull-Clark細分 78
7.1.3 用細分來鑲嵌 79
7.1.4 面片化表面 80
7.1.5 GPU鑲嵌算法 80
7.1.6 致密鑲嵌 84
7.2 位移映射 84
7.2.1 改變平滑度測試 85
7.2.2 用法線映射著色 85
7.3 本章小結 86
參考文獻 86
第8章 使用距離函數的逐像素位移
映射 87
8.1 簡介 87
8.2 準備工作 89
8.3 距離映射算法 89
8.4 計算距離圖 92
8.5 著色器 92
8.5.1 頂點著色器 92
8.5.2 片段著色器 92
8.5.3 關于過濾的注意事項 94
8.6 結果 94
8.7 本章小結 95
參考文獻 96
第Ⅱ部分 著色、光照和陰影
第9章 S.T.A.L.K.E.R.中的延期
著色 101
9.1 引言 101
9.2 幾種觀點 102
9.3 優(yōu)化 103
9.3.1 優(yōu)化的對象 103
9.3.2 光照優(yōu)化 104
9.3.3 G緩沖區(qū)建立的優(yōu)化 106
9.3.4 陰影優(yōu)化 108
9.4 改善質量 109
9.4.1 “虛擬位置”的威力 109
9.4.2 環(huán)境遮擋 110
9.4.3 材質和表面光照的交互 111
9.5 反走樣 111
9.5.1 高效的調和映射 113
9.5.2 處理透明 114
9.6 嘗試過但沒有包含入最終
代碼的內容 114
9.6.1 高程圖 114
9.6.2 實時的全局照明 115
9.7 本章小結 115
參考文獻 116
第10章 動態(tài)輻照度環(huán)境映射實時
計算 117
10.1 輻照度(irradiance)環(huán)境
映射 117
10.2 球面調和卷積 119
10.3 映射到GPU上 120
10.3.1 空域到頻域 121
10.3.2 卷積和恢復 122
10.4 以后的工作 123
10.5 本章小結 123
參考文獻 123
第11章 近似的雙向紋理函數 125
11.1 引言 125
11.2 采集 126
11.2.1 建立和采集 126
11.2.2 匯集著色圖 127
11.3 渲染 128
11.3.1 細節(jié)算法 128
11.3.2 實時渲染 129
11.4 結果 130
11.5 本章小結 132
參考文獻 132
第12章 基于貼面的紋理映射 133
12.1 方法簡介 134
12.2 紋理貼面的構造 135
12.3 紋理貼面打包 135
12.4 紋理貼面映射 137
12.5 mipmap問題 138
12.6 本章小結 140
參考文獻 140
第13章 在GPU上實現mental
images的Phenomena
渲染器 141
13.1 引言 141
13.2 著色器和Phenomena 142
13.3 用Cg實現Phenomena 143
13.3.1 Cg頂點程序和可變
參數 144
13.3.2 片段程序著色器的main()
入口點 145
13.3.3 通用著色器接口 145
13.3.4 一個簡單的著色器
例子 146
13.3.5 全局的狀態(tài)變量 148
13.3.6 光著色器 149
13.3.7 紋理著色器 151
13.3.8 凹凸映射 152
13.3.9 環(huán)境著色器和體著
色器 153
13.3.10 返回結構體的著色器 154
13.3.11 渲染毛發(fā) 154
13.3.12 組合所有東西 155
13.4 本章小結 155
參考文獻 156
第14章 動態(tài)環(huán)境遮擋和間接光照 157
14.1 表面元素 158
14.2 環(huán)境遮擋 158
14.2.1 多遍陰影算法 160
14.2.2 改善性能 160
14.3 間接光照和面光源 162
14.4 本章小結 164
參考文獻 164
第15章 藍圖渲染和草圖繪制 165
15.1 基本原理 166
15.1.1 中間渲染結果 166
15.1.2 邊增強 166
15.1.3 深度子圖形渲染 167
15.2 藍圖渲染 167
15.2.1 深度剝離 167
15.2.2 析取可見邊和不可
見邊 169
15.2.3 合成藍圖 170
15.2.4 深度屏蔽 171
15.2.5 使用藍圖渲染顯示
建筑 171
15.3 草圖渲染 171
15.3.1 邊和顏色面片 172
15.3.2 應用不確定性 172
15.3.3 調整深度 173
15.3.4 草圖渲染的變體 173
15.3.5 控制不確定性 174
15.3.6 減少雨景效果 175
15.4 本章小結 176
參考文獻 176
第16章 精確的大氣散射 179
16.1 引言 179
16.2 解散射方程 180
16.2.1 Rayleigh散射與Mie
散射 180
16.2.2 相位函數 181
16.2.3 外向散射方程 181
16.2.4 內向散射方程 182
16.2.5 表面散射方程 182
16.3 實時渲染 182
16.4 擠入著色器中 184
16.4.1 去除一個維度 184
16.4.2 去除其他維度 184
16.5 實現散射的著色器 185
16.5.1 頂點著色器 185
16.5.2 片段著色器 187
16.6 增加高動態(tài)范圍渲染 188
16.7 本章小結 188
參考文獻 189
第17章 利用像素著色器分支的
高效模糊邊緣陰影 191
17.1 現有的陰影生成技術 191
17.2 用單張陰影圖產生模糊
陰影 192
17.2.1 模糊尖銳邊緣陰影 192
17.2.2 提高效率 195
17.2.3 實現細節(jié) 196
17.3 本章小結 199
參考文獻 200
第18章 將頂點紋理位移用于水的
真實感渲染 201
18.1 水的模型 202
18.2 實現 202
18.2.1 水的表面模型 202
18.2.2 實現細節(jié) 203
18.2.3 對高度圖采樣 203
18.2.4 質量的提高與優(yōu)化 204
18.2.5 渲染局部的擾動 208
18.3 本章小結 209
參考文獻 209
第19章 通用的折射模擬 211
19.1 基本方法 212
19.2 折射掩碼 213
19.3 示例 215
19.3.1 水的模擬 215
19.3.2 玻璃的模擬 217
19.4 本章小結 219
參考文獻 219
第Ⅲ部分 高質量渲染
第20章 快速三階紋理過濾 225
20.1 高階過濾 225
20.2 快速遞歸三次卷積 226
20.3 mipmapping 230
20.4 導數重建 232
20.5 本章小結 235
參考文獻 236
第21章 高質量反走樣的光柵化 237
21.1 概述 237
21.2 降采樣 239
21.2.1 與現有軟硬件的對比 239
21.2.2 用GPU進行降采樣 240
21.3 延伸 240
21.4 過濾器的細節(jié) 241
21.5 兩遍分離式的過濾器 242
21.6 分塊和累加 243
21.7 代碼 243
21.7.1 渲染循環(huán) 244
21.7.2 降采樣類 245
21.7.3 實現細節(jié) 246
21.8 本章小結 246
參考文獻 247
第22章 快速的預過濾線條 249
22.1 為什么尖銳的直線看起來很
糟糕 249
22.2 限制信號的帶寬 250
22.3 預處理 252
22.4 運行時 253
22.4.1 線段的建立(CPU) 253
22.4.2 表查找(GPU) 254
22.5 實現的問題 256
22.5.1 繪制寬線 256
22.5.2 組合多條線段 256
22.6 示例 256
22.7 本章小結 258
參考文獻 258
第23章 Nalu Demo的頭發(fā)動畫和
渲染 261
23.1 頭發(fā)的幾何體 262
23.1.1 布局和增長 262
23.1.2 控制頭發(fā) 263
23.1.3 數據流 263
23.1.4 鑲嵌 263
23.1.5 插值 264
23.2 動力學和碰撞 265
23.2.1 約束條件 265
23.2.2 碰撞 266
23.2.3 鰭 266
23.3 頭發(fā)的著色 267
23.3.1 用于頭發(fā)的實時反射
模型 268
23.3.2 頭發(fā)中實時的體化陰影 271
23.4 本章小結和未來的工作 274
參考文獻 274
第24章 使用查找表加速顏色變換 275
24.1 查找表的基礎知識 275
24.1.1 一維查找表 275
24.1.2 三維查找表 276
24.1.3 插值 278
24.2 實現 278
24.2.1 把查找表映射到GPU
的策略 278
24.2.2 Cg著色器 278
24.2.3 系統集成 280
24.2.4 把三維查找表擴展到用
于高動態(tài)范圍圖像 281
24.3 本章小結 282
參考文獻 282
第25章 Apple Motion中的GPU
圖像處理 285
25.1 設計 285
25.1.1 喜愛的和厭惡的 285
25.1.2 選擇語言 287
25.1.3 CPU向后支持 287
25.2 實現 288
25.2.1 GPU資源的限制 288
25.2.2 被零除 289
25.2.3 丟失的頂點分量 289
25.2.4 雙線過濾 290
25.2.5 高精度存儲 294
25.3 調試 294
25.4 本章小結 295
參考文獻 296
第26章 實現改進的Perlin噪聲 297
26.1 隨機但平滑 297
26.2 存儲與計算 297
26.3 實現細節(jié) 298
26.4 本章小結 302
參考文獻 302
第27章 高級的高質量過濾 303
27.1 在GPU上實現過濾 303
27.1.1 訪問圖像樣本 303
27.1.2 卷積過濾 304
27.2 數字圖像的重采樣 307
27.2.1 背景知識 307
27.2.2 反走樣問題 307
27.2.3 圖像重建 310
27.3 沖擊過濾: 銳化圖像的方法 312
27.4 過濾器的實現技巧 314
27.5 高級應用 314
27.5.1 時間變形 314
27.5.2 運動模糊的消除 314
27.5.3 自適應的紋理過濾 315
27.6 本章小結 315
參考文獻 315
第28章 Mipmap級的測量 317
28.1 哪個mipmap層是可
見的? 318
28.2 GPU搶險隊 318
28.2.1 像素點計數 318
28.2.2 引擎中的實際考慮 321
28.2.3 擴展 322
28.3 實驗結果 324
28.4 本章小結 325
參考文獻 326
第Ⅳ部分 GPU的通用計算:初級讀本
第29章 流式體系結構和技術趨勢 331
29.1 技術趨勢 331
29.1.1 核心技術趨勢 331
29.1.2 后果 332
29.2 高性能計算的關鍵 334
29.2.1 高效計算的方法 334
29.2.2 高效通信的方法 335
29.2.3 與CPU對比 335
29.3 流式計算 336
29.3.1 流式編程模型 336
29.3.2 構建一個流式處理器 337
29.4 未來和挑戰(zhàn) 338
29.4.1 技術趨勢 338
29.4.2 功耗管理 338
29.4.3 支持更高的可編程性和
功能性 339
29.4.4 來自CPU的GPU功能性
(或反之亦然) 339
參考文獻 339
第30章 GeForce 6系列GPU的
體系結構 341
30.1 GPU如何適合于整體計算
系統 342
30.2 整體系統體系結構 342
30.2.1 圖形操作的功能結構圖 343
30.2.2 非圖形操作的功能結
構圖 346
30.3 GPU特性 347
30.3.1 固定函數特性 348
30.3.2 著色器Model 3.0編程
模型 349
30.3.3 支持的數據存儲格式 353
30.4 性能 354
30.5 達到最佳性能 354
30.5.1 積極地使用z裁減 355
30.5.2 加載數據時利用紋理
數學 355
30.5.3 使用片段程序的分支 355
30.5.4 盡可能使用fp16作中
間值 355
30.6 本章小結 356
第31章 把計算概念映射到GPU 357
31.1 數據并行的重要性 357
31.1.1 哪種類型的計算可以很
好地映射到GPU 357
31.1.2 示例:在柵格上模擬 358
31.1.3 流通信:聚集與散布 359
31.2 GPU計算資源清單 359
31.3 CPU-GPU類比 362
31.3.1 流:GPU紋理 = CPU
數組 362
31.3.2 核:GPU片段程序 = CPU
“內循環(huán)” 362
31.3.3 渲染到紋理 = 反饋 362
31.3.4 幾何體光柵化 = 計算的
調用 363
31.3.5 紋理坐標 = 計算的域 363
31.3.6 頂點坐標 = 計算的
范圍 363
31.3.7 縮減 363
31.4 從類比到實現 364
31.5 一個簡單的例子 366
31.6 本章小結 368
參考文獻 368
第32章 嘗試GPU計算 369
32.1 選擇快速算法 369
32.1.1 局部性 369
32.1.2 允許計算的準則 370
32.1.3 考慮下載和讀回 371
32.2 了解浮點 371
32.3 實現散列 373
32.3.1 轉換成聚集 373
32.3.2 地址排序 374
32.3.3 渲染點 375
32.4 本章小結 375
參考文獻 376
第33章 在GPU上實現高效的并行
數據結構 377
33.1 流式編程 377
33.2 GPU存儲器模型 379
33.2.1 存儲器體系結構 379
33.2.2 GPU流類型 380
33.2.3 GPU核的存儲器訪問 381
33.3 基于GPU的數據結構 382
33.3.1 多維數組 382
33.3.2 結構體 387
33.3.3 稀疏數據結構 387
33.4 性能考慮 391
33.4.1 依賴的紋理讀取 391
33.4.2 計算頻度和程序特化 391
33.4.3 Pbuffer Survival Guide 392
33.5 本章小結 393
參考文獻 393
第34章 GPU流程控制習慣用法 395
34.1 流程控制的挑戰(zhàn) 395
34.2 基本的流程控制策略 396
34.2.1 判定 396
34.2.2 把分支向著流水線上端
移動 396
34.2.3 z裁減 397
34.2.4 分支指令 399
34.2.5 選擇一種分支機制 399
34.3 使用遮擋查詢的數據依賴
循環(huán) 400
34.4 本章小結 400
第35章 GPU程序優(yōu)化 401
35.1 數據并行計算 401
35.1.1 指令級并行性 401
35.1.2 數據級并行性 403
35.2 計算頻率 404
35.2.1 循環(huán)內不變量的預
計算 405
35.2.2 用查找表進行預計算 406
35.2.3 避免內循環(huán)分支 407
35.2.4 swizzle操作 407
35.3 評價和負載平衡 408
35.4 本章小結 409
參考文獻 410
第36章 用于GPGPU應用程序的
流式縮減操作 411
36.1 通過緊縮來過濾 411
36.1.1 累加和掃描 412
36.1.2 通過搜索/聚集來散布 413
36.1.3 過濾性能 415
36.2 動機:碰撞檢測 416
36.3 用于細分表面的過濾 419
36.4 本章小結 421
參考文獻 421
第Ⅴ部分 面向圖像的計算
第37章 GPU上的八叉樹紋理 425
37.1 一個GPU加速的層次結構:
N3樹 426
37.1.1 定義 426
37.1.2 實現 427
37.2 應用1:在網格表面上色 431
37.2.1 建立八叉樹 431
37.2.2 上色 432
37.2.3 渲染 432
37.2.4 把八叉樹紋理轉換成標準
2D紋理 434
37.3 應用2:表面模擬 436
37.4 本章小結 437
參考文獻 438
第38章 使用光柵化的高質量全局照
明渲染 439
38.1 通過光柵化的全局照明 440
38.2 最終聚集簡介 441
38.2.1 兩遍的方法 441
38.2.2 最終聚集 441
38.2.3 兩遍方法的問題 442
38.3 通過光柵化的最終聚集 443
38.3.1 最終聚集光線的聚類 443
38.3.2 光線投射作為多次平行
投影 445
38.4 實現細節(jié) 446
38.4.1 初始化 446
38.4.2 深度剝離 446
38.4.3 采樣 447
38.4.4 性能 447
38.5 GPU上的全局照明渲染器 448
38.5.1 第一遍 448
38.5.2 生成可見點數據 448
38.5.3 第二遍 448
38.5.4 其他解決方案 449
38.6 本章小結 451
參考文獻 451
第39章 使用逐步求精輻射度方法的
全局照明 453
39.1 輻射度的基礎 454
逐步求精 454
39.2 GPU實現 455
39.2.1 使用半球投影的可
見性 456
39.2.2 構成因子的計算 458
39.2.3 選擇下一個發(fā)射者 459
39.3 漸進細分 459
39.3.1 紋理四叉樹 459
39.3.2 四叉數細分 460
39.4 性能 460
39.5 本章小結 460
參考文獻 461
第40章 GPU上的計算機視覺 463
40.1 引言 463
40.2 實現框架 463
40.3 應用示例 464
40.3.1 把一系列片段程序用于
計算機視覺 464
40.3.2 求和操作 467
40.3.3 創(chuàng)建全景照片的方
程組 469
40.3.4 特征向量的計算 471
40.4 并行計算機視覺處理 473
40.5 本章小結 474
參考文獻 474
第41章 延遲過濾:困難數據格式的
渲染 477
41.1 引言 477
41.2 為什么要延遲 478
41.3 延遲過濾算法 479
41.4 為什么它可以工作 481
41.5 本章小結:何時延遲 481
參考文獻 482
第42章 保守光柵化 485
42.1 問題定義 486
42.2 兩種保守算法 487
42.2.1 剪切空間 487
42.2.2 第一種算法 488
42.2.3 第二種算法 489
42.3 魯棒性問題 492
42.4 保守深度 492
42.5 結果和本章小結 493
參考文獻 494
第Ⅵ部分 模擬與數值算法
第43章 蛋白質結構預測的GPU
計算 497
43.1 介紹 497
43.2 Floyd-Warshall算法以及
綁定距離的平滑 498
43.3 GPU實現 499
43.3.1 動態(tài)更新 499
43.3.2 數據紋理的索引 499
43.3.3 三角形劃分 500
43.3.4 向量化 500
43.4 試驗結果 501
43.5 本章小結和工作展望 502
參考文獻 502
第44章 用于解線性方程組的GPU
框架 505
44.1 概述 505
44.2 表示 506
44.2.1 “單浮點”的表示 506
44.2.2 向量 506
44.2.3 矩陣 507
44.3 運算 509
44.3.1 向量運算 509
44.3.2 向量縮減 509
44.3.3 矩陣與向量的積 510
44.3.4 把所有的組合起來 511
44.3.5 共軛梯度求解器 511
44.4 一個偏微分方程的例子 512
44.5 本章小結 515
參考文獻 516
第45章 GPU上的期權定價 517
45.1 期權概述 517
45.2 Black-Scholes模型 518
45.3 Lattice模型 521
45.3.1 二項模型 521
45.3.2 歐式期權定價 522
45.4 本章小結 525
參考文獻 526
第46章 改進的GPU排序 527
46.1 排序算法 527
46.2 一種簡單的方法 528
46.3 快速排序 529
46.3.1 實現奇偶合并排序 529
46.4 使用所有的GPU資源 531
46.5 本章小結 535
參考文獻 536
第47章 復雜邊界的流體模擬 537
47.1 簡介 537
47.2 Lattice Boltzmann方法 538
47.3 基于GPU的LBM 539
47.3.1 算法介紹 539
47.3.2 數據封裝 540
47.3.3 遷移 541
47.4 基于GPU的邊界處理 541
47.4.1 基于GPU的體素化
方法 542
47.4.2 周期性邊界 543
47.4.3 流出邊界 544
47.4.4 障礙物邊界 544
47.5 可視化 545
47.6 實驗結果 546
47.7 本章小結 547
參考文獻 548
第48章 基于FFT的醫(yī)學圖像重建 551
48.1 背景 551
48.2 傅里葉變換 552
48.2 FFT算法 553
48.4 在GPU上的實現 553
48.4.1 方法1:主要使用片段
處理器 555
48.4.2 方法2:使用頂點處理器、
光柵器和片段處理器 556
48.4.3 負載平衡 558
48.4.4 基準測試結果 558
48.5 醫(yī)學成像中的FFT 559
48.5.1 磁共振成像 559
48.5.2 MRI結果 560
48.5.3 超聲波成像 562
48.6 本章小結 564
參考文獻 565