包郵 光線追蹤精粹——基于DXR及其他API的高質(zhì)量實(shí)時(shí)渲染
-
>
全國(guó)計(jì)算機(jī)等級(jí)考試最新真考題庫(kù)模擬考場(chǎng)及詳解·二級(jí)MSOffice高級(jí)應(yīng)用
-
>
決戰(zhàn)行測(cè)5000題(言語(yǔ)理解與表達(dá))
-
>
軟件性能測(cè)試.分析與調(diào)優(yōu)實(shí)踐之路
-
>
第一行代碼Android
-
>
JAVA持續(xù)交付
-
>
EXCEL最強(qiáng)教科書(完全版)(全彩印刷)
-
>
深度學(xué)習(xí)
光線追蹤精粹——基于DXR及其他API的高質(zhì)量實(shí)時(shí)渲染 版權(quán)信息
- ISBN:9787030695208
- 條形碼:9787030695208 ; 978-7-03-069520-8
- 裝幀:一般膠版紙
- 冊(cè)數(shù):暫無(wú)
- 重量:暫無(wú)
- 所屬分類:>>
光線追蹤精粹——基于DXR及其他API的高質(zhì)量實(shí)時(shí)渲染 本書特色
在本書中你將學(xué)到: 可用于多個(gè)領(lǐng)域中實(shí)時(shí)光線追蹤技術(shù) ;使用微軟 DirectX Raytracing (DXR) API 的指導(dǎo)意見(jiàn)及*佳實(shí)踐 ;如何實(shí)現(xiàn)交互可視化、游戲及模擬領(lǐng)域的高性能渲染
光線追蹤精粹——基于DXR及其他API的高質(zhì)量實(shí)時(shí)渲染 內(nèi)容簡(jiǎn)介
本書共分七大部分:部分幫你理解現(xiàn)代光線追蹤的基礎(chǔ)知識(shí)和進(jìn)行高效渲染所需的思維模式;第二部分為從事光線追蹤器編寫工作的讀者提供一些對(duì)于問(wèn)題的洞察,乃至解決方案;第三部分介紹構(gòu)建一個(gè)產(chǎn)品級(jí)的光線追蹤渲染器時(shí)對(duì)基本的效果進(jìn)行處理的方法;第四部分介紹采樣的相關(guān)知識(shí);第五部分介紹了多個(gè)實(shí)用的降噪和濾波技術(shù);第六部分展示五種混合使用光柵和光線追蹤的渲染系統(tǒng);第七部分介紹了用光線追蹤實(shí)現(xiàn)全局光照的五個(gè)開(kāi)拓性工作。本書提供了不少獨(dú)門絕技,當(dāng)這些技巧和技術(shù)由撰寫本文的專家們分享出來(lái)時(shí),它們成為了無(wú)價(jià)的珠寶。
光線追蹤精粹——基于DXR及其他API的高質(zhì)量實(shí)時(shí)渲染 目錄
**部分 光線追蹤基礎(chǔ)
第1章 光線追蹤術(shù)語(yǔ) 3
1.1 歷史回顧 3
1.2 定義 4
參考文獻(xiàn) 7
第2章 什么是光線? 9
2.1 光線的數(shù)學(xué)表示 9
2.2 光線區(qū)間 10
2.3 DXR中的光線 11
2.4 小結(jié) 12
參考文獻(xiàn) 12
第3章 DirectX光線追蹤介紹 13
3.1 介紹 13
3.2 概述 13
3.3 準(zhǔn)備就緒 14
3.4 DirectX光線追蹤管線 14
3.5 HLSL針對(duì)DXR的新增支持 16
3.5.1 在HLSL中生成新的光線 17
3.5.2 在HLSL中控制光線遍歷 17
3.5.3 額外的HLSL內(nèi)部函數(shù) 18
3.6 一個(gè)簡(jiǎn)單的HLSL光線追蹤案例 19
3.7 主機(jī)端初始化DXR 20
3.8 基礎(chǔ)的DXR初始化和設(shè)置 21
3.8.1 幾何體和加速結(jié)構(gòu) 22
3.8.2 根簽名 25
3.8.3 編譯著色器 26
3.9 光線追蹤管線狀態(tài)對(duì)象(RTPSO) 27
3.10 著色器表 30
3.11 發(fā)射光線 32
3.12 挖掘更深和更多的資源 33
3.13 小結(jié) 33
參考文獻(xiàn) 34
第4章 天文館球幕相機(jī) 36
4.1 介紹 36
4.2 方法 36
4.2.1 從視口坐標(biāo)計(jì)算光線方向 38
4.2.2 環(huán)形立體投影 40
4.2.3 景深 42
4.2.4 抗鋸齒 43
4.3 天文館球幕投影的示例代碼 43
參考文獻(xiàn) 43
第5章 計(jì)算子數(shù)組的*小值和*大值 45
5.1 動(dòng)機(jī) 45
5.2 整表查詢法 45
5.3 稀疏表查詢法 46
5.4 區(qū)間樹(shù)遞歸查詢法 47
5.5 區(qū)間樹(shù)迭代查詢法 48
5.6 結(jié)果 50
5.7 小結(jié) 51
參考文獻(xiàn) 51
第二部分 相交和效率
第6章 避免自相交的快速可靠的方法 55
6.1 引言 55
6.2 方法 55
6.2.1 計(jì)算物體表面上的交點(diǎn) 55
6.2.2 避免自相交 57
6.3 小結(jié) 60
參考文獻(xiàn) 61
第7章 光線/球體相交檢測(cè)的精度提升 62
7.1 光線/球體相交基礎(chǔ) 62
7.2 浮點(diǎn)精度探究 63
7.3 相關(guān)資源 66
參考文獻(xiàn) 67
第8章 精巧的曲面:計(jì)算光線/雙線性曲面相交的幾何方法 68
8.1 引言與當(dāng)前技術(shù) 68
8.1.1 性能測(cè)試 70
8.1.2 網(wǎng)格四邊形化 70
8.2 GARP細(xì)節(jié) 71
8.3 結(jié)果討論 73
8.4 代碼 76
參考文獻(xiàn) 77
第9章 DXR中的多重命中光線追蹤 80
9.1 引言 80
9.2 實(shí)現(xiàn) 81
9.2.1 樸素的多重命中遍歷 83
9.2.2 節(jié)點(diǎn)剔除多重命中BVH遍歷 85
9.3 結(jié)果 86
9.3.1 性能測(cè)量 86
9.3.2 討論 89
9.4 結(jié)論 90
參考文獻(xiàn) 91
第10章 一種具有高擴(kuò)展效率的簡(jiǎn)單負(fù)載均衡方案 92
10.1 引言 92
10.2 要求 92
10.3 負(fù)載均衡 93
10.3.1 簡(jiǎn)單分塊 93
10.3.2 任務(wù)大小 93
10.3.3 任務(wù)分布 94
10.3.4 圖像組裝 95
10.4 結(jié)果 96
參考文獻(xiàn) 97
第三部分 反射,折射與陰影
第11章 嵌套volume中材質(zhì)的自動(dòng)處理 101
11.1 volume的建模 101
11.1.1 獨(dú)立邊界 101
11.1.2 添加空氣間隙 102
11.1.3 重疊的邊界 102
11.2 算法 103
11.3 局限性 106
參考文獻(xiàn) 107
第12章 基于微表面陰影函數(shù)解決凹凸貼圖中的陰影邊界問(wèn)題 108
12.1 介紹 108
12.2 之前的工作 109
12.3 方法 109
12.3.1 法線分布函數(shù) 110
12.3.2 陰影函數(shù) 112
12.4 結(jié)果 113
參考文獻(xiàn) 114
第13章 光線追蹤陰影:保持實(shí)時(shí)幀速率 115
13.1 介紹 115
13.2 相關(guān)工作 116
13.3 光線追蹤陰影 117
13.4 自適應(yīng)采樣 119
13.4.1 時(shí)間重投影 119
13.4.2 識(shí)別半影區(qū)域 120
13.4.3 計(jì)算采樣數(shù)目 121
13.4.4 采樣Mask 121
13.4.5 計(jì)算可見(jiàn)性 122
13.5 實(shí)現(xiàn) 123
13.5.1 采樣點(diǎn)集生成 124
13.5.2 按距離剔除燈光 124
13.5.3 限制總采樣數(shù) 124
13.5.4 在前向渲染管線中集成 125
13.6 結(jié)果 127
13.6.1 與陰影映射(方法)的對(duì)比 127
13.6.2 軟陰影與硬陰影對(duì)比 128
13.6.3 限制 129
13.7 總結(jié)和未來(lái)的工作 129
參考文獻(xiàn) 130
第14章 DXR下的在單散射介質(zhì)中引導(dǎo)光線的體積水焦散 132
14.1 介紹 132
14.2 體積光和折射光 134
14.3 算法 136
14.3.1 計(jì)算光束壓縮比 136
14.3.2 渲染焦散圖 137
14.3.3 光線追蹤折射焦散圖和累積表面焦散 138
14.3.4 自適應(yīng)地對(duì)水表面的三角形進(jìn)行曲面細(xì)分 139
14.3.5 構(gòu)建三角形光束體積 140
14.3.6 使用加算混合方式渲染體積焦散 140
14.3.7 結(jié)合表面焦散和體積焦散 141
14.4 實(shí)現(xiàn)細(xì)節(jié) 141
14.5 結(jié)果 141
14.6 將來(lái)的工作 143
14.7 演示 143
參考文獻(xiàn) 143
第四部分 采樣
第15章 重要性采樣 147
15.1 引言 147
15.2 例子:環(huán)境光遮蔽 148
15.3 理解方差 151
15.4 直接光照 153
15.5 結(jié)論 155
參考文獻(xiàn) 156
第16章 采樣變換集合 157
16.1 采樣機(jī)制 157
16.2 樣本分布介紹 157
16.3 一維分布 159
16.3.1 線性函數(shù) 159
16.3.2 三角形函數(shù) 159
16.3.3 正態(tài)分布 159
16.3.4 一維離散分布采樣 160
16.4 二維分布采樣 162
16.4.1 雙線性 162
16.4.2 二維紋理分布 162
16.5 均勻表面采樣 165
16.5.1 圓盤 165
16.5.2 三角形 166
16.5.3 三角形網(wǎng)格 167
16.5.4 球 167
16.6 方向采樣 168
16.6.1 Z軸向余弦加權(quán)半球 169
16.6.2 向量軸向余弦加權(quán)半球 169
16.6.3 錐體方向采樣 169
16.6.4 PHONG分布采樣 170
16.6.5 GGX分布 170
16.7 體積散射 171
16.7.1 體積中的距離 171
16.7.2 Henyey-Greenstein相函數(shù) 172
16.8 添加到集合中 172
參考文獻(xiàn) 173
第17章 忽略光線追蹤時(shí)的不便 174
17.1 引言 174
17.2 動(dòng)機(jī) 174
17.3 截?cái)喾?176
17.4 路徑正則化 176
17.5 總結(jié) 177
參考文獻(xiàn) 178
第18章 GPU實(shí)現(xiàn)的多光源重要性采樣 179
18.1 概述 179
18.2 傳統(tǒng)算法回顧 180
18.2.1 實(shí)時(shí)光源剔除 180
18.2.2 多光源的算法 181
18.2.3 光源重要性采樣 181
18.3 基礎(chǔ)知識(shí)回顧 182
18.3.1 光照積分 182
18.3.2 重要性采樣 183
18.3.3 對(duì)光源的光線追蹤 185
18.4 算法 186
18.4.1 光源的預(yù)處理 186
18.4.2 加速結(jié)構(gòu) 187
18.4.3 光源重要性采樣 188
18.5 結(jié)果 190
18.5.1 性能 192
18.5.2 圖像質(zhì)量 194
18.6 結(jié)論 196
參考文獻(xiàn) 197
第五部分 降噪與濾波
第19章 利用實(shí)時(shí)光線追蹤和降噪技術(shù)在UE4中進(jìn)行電影渲染 203
19.1 引言 203
19.2 在UE4中集成光線追蹤功能 203
19.2.1 階段1:實(shí)驗(yàn)性的整合 204
19.2.2 階段2 210
19.3 實(shí)時(shí)光線追蹤和降噪處理 211
19.3.1 基于光線追蹤的陰影 211
19.3.2 基于光線追蹤的反射 214
19.3.3 基于光線追蹤的全局漫反射照明 218
19.3.4 光線追蹤中的透明度 221
19.4 結(jié)論 222
參考文獻(xiàn) 223
第20章 實(shí)時(shí)光線追蹤的紋理LOD策略 224
20.1 簡(jiǎn)介 224
20.2 背景 225
20.3 紋理LOD算法 226
20.3.1 MIP第0層的雙線性濾波 226
20.3.2 射線微分 226
20.3.3 射線微分與G-Buffer 229
20.3.4 射線錐 230
20.4 實(shí)現(xiàn) 234
20.5 對(duì)照及結(jié)果 236
20.6 代碼 239
參考文獻(xiàn) 241
第21章 使用射線錐和射線差分進(jìn)行環(huán)境貼圖的過(guò)濾 242
21.1 引言 242
21.2 射線錐 243
21.3 射線差分 243
21.4 結(jié)果 244
參考文獻(xiàn) 244
第22章 通過(guò)自適應(yīng)光線追蹤改進(jìn)時(shí)域抗鋸齒 245
22.1 簡(jiǎn)介 245
22.2 時(shí)域抗鋸齒相關(guān)工作 247
22.3 一種新算法 247
22.3.1 分割策略 248
22.3.2 稀疏光線追蹤超采樣 251
22.4 初步結(jié)果 253
22.4.1 畫面質(zhì)量 253
22.4.2 性能 254
22.5 局限性 255
22.6 實(shí)時(shí)光線追蹤抗鋸齒技術(shù)的未來(lái) 256
22.7 結(jié)論 256
參考文獻(xiàn) 257
第六部分 混合方法及系統(tǒng)
第23章 寒霜引擎中的交互式光照貼圖和輻照度體預(yù)覽 261
23.1 介紹 261
23.2 全局光照解算器管線 262
23.2.1 輸入與輸出 262
23.2.2 全局光照解算器管線的總覽 265
23.2.3 光照計(jì)算與光路構(gòu)建 266
23.2.4 光源 269
23.2.5 特殊材質(zhì) 270
23.2.6 規(guī)劃待計(jì)算紋素 271
23.2.7 性能開(kāi)銷 272
23.2.8 后處理 272
23.3 加速技術(shù) 275
23.3.1 視圖優(yōu)先級(jí) 275
23.3.2 燈光加速結(jié)構(gòu) 275
23.3.3 輻照度緩存 2
光線追蹤精粹——基于DXR及其他API的高質(zhì)量實(shí)時(shí)渲染 節(jié)選
**部分 光線追蹤基礎(chǔ) 今天,光柵化占領(lǐng)了實(shí)時(shí)渲染的大多數(shù)應(yīng)用領(lǐng)域,因此許多尋找實(shí)時(shí)渲染技巧的讀者上次遇到光線追蹤可能還是在學(xué)生時(shí)代(可能幾十年前)。本部分包含了介紹性的章節(jié)來(lái)幫助大家復(fù)習(xí)基礎(chǔ)知識(shí),在術(shù)語(yǔ)方面達(dá)成共識(shí),并提供一些簡(jiǎn)單卻很有用的代碼模塊。 第1章,“光線追蹤術(shù)語(yǔ)”定義了本書中要用到的術(shù)語(yǔ)并且給出了引入這些術(shù)語(yǔ)的論文。對(duì)于**次接觸的讀者來(lái)說(shuō),當(dāng)你閱讀文獻(xiàn)時(shí),會(huì)遇到令人費(fèi)解、不斷變化的術(shù)語(yǔ),它們時(shí)而含義重復(fù),時(shí)而模棱兩可。在不理解這些術(shù)語(yǔ)如何演化到今天的情況下,直接去讀30年前的論文會(huì)令人沮喪。該章節(jié)提供了一個(gè)基礎(chǔ)的路線圖。 第2章,“什么是光線?”覆蓋了一些常見(jiàn)的關(guān)于光線的數(shù)學(xué)定義:如何思考光線,哪些公式通常會(huì)用于現(xiàn)代API中。雖然這是一個(gè)簡(jiǎn)單的章節(jié),但是分離出這個(gè)基本結(jié)構(gòu)的基礎(chǔ)部分會(huì)有助于提醒讀者數(shù)值精度問(wèn)題比比皆是。對(duì)于光柵化,精度問(wèn)題出現(xiàn)在深度緩存閃爍(z-fighting)和陰影貼圖(Shadow Mapping)中;在光線追蹤中,每光線查詢都要小心處理以避免假性相交判斷(精度問(wèn)題在第6章中有更深入的探討)。 *近,微軟公司對(duì)外發(fā)布了DirectX光線追蹤技術(shù),它是DirectX光柵化API的擴(kuò)展。第3章,“DirectX光線追蹤介紹”,簡(jiǎn)單介紹了該編程接口引入的抽象、心智模型和新的著色器類型。除此之外,還解釋了如何初始化,并提供示例代碼以幫助你入門。 光線追蹤降低了構(gòu)建任意相機(jī)模型的難度,而不像傳統(tǒng)的光柵化那樣必須定義4×4的投影矩陣來(lái)定義相機(jī)。第4章,“天文館球幕相機(jī)”給出了構(gòu)建一個(gè)180°半球形球幕投影(比如天文館)的相機(jī)模型的數(shù)學(xué)形式和示例代碼。這個(gè)章節(jié)同樣展示了在光線追蹤中添加立體渲染或者景深功能是多么容易。 第5章,“計(jì)算子數(shù)組的*小值和*大值”描述了三種不同的計(jì)算方法(并權(quán)衡了計(jì)算時(shí)的各種因素),用于計(jì)算數(shù)組中任意子數(shù)組的*小值和*大值。表面上看,評(píng)估這樣的查詢和光線追蹤沒(méi)有明顯的關(guān)系,但是它可以應(yīng)用到科學(xué)計(jì)算可視化這樣的領(lǐng)域,在這些領(lǐng)域經(jīng)常用到光線查詢。 **部分的知識(shí)可以幫你理解現(xiàn)代光線追蹤的基礎(chǔ)知識(shí)和進(jìn)行高效渲染所需的思維模式。 Chris Wyman 第1章 光線追蹤術(shù)語(yǔ) Eric Haines, Peter Shirley NVIDIA 本章節(jié)介紹了貫穿全書的背景知識(shí)和術(shù)語(yǔ)定義。 1.1 歷史回顧 光線追蹤在環(huán)境中追蹤光的運(yùn)動(dòng)這一學(xué)科方向中具有悠久的歷史,常常稱為輻射傳輸(radiative transfer)。圖形學(xué)從業(yè)者從中子遷移(neutron transport)[2]、熱傳導(dǎo)(heat transfer)[6]和照明工程(illumination engineering)[11]等領(lǐng)域引入了這些概念。因?yàn)橛刑貏e多的領(lǐng)域在研究這些概念,加上在學(xué)科之間或者學(xué)科內(nèi)部術(shù)語(yǔ)經(jīng)過(guò)不斷發(fā)展,有時(shí)這些概念之間會(huì)出現(xiàn)分歧。經(jīng)典的論文里也可能會(huì)錯(cuò)誤地使用術(shù)語(yǔ),給讀者帶來(lái)困擾。 光沿光線傳播的基本度量是SI國(guó)際單位制(International System of Units)中的光譜輻射率(spectral radiance),其在真空中沿光線傳播時(shí)保持不變,它*直觀的感受就是亮度(brightness)。在得到標(biāo)準(zhǔn)化之前,光譜輻射經(jīng)常被稱為“強(qiáng)度”(intensity)或者“亮度”。計(jì)算機(jī)圖形學(xué)丟棄了“光譜”這個(gè)前綴,因?yàn)槲覀儚牟皇褂梅枪庾V的輻射(在所有波長(zhǎng)上的輻射集合)。 圖形學(xué)領(lǐng)域中涉及光線的術(shù)語(yǔ)在一直發(fā)展。幾乎所有的現(xiàn)代光線追蹤器都使用遞歸和蒙特卡羅法,因此現(xiàn)在很少有人會(huì)刻意稱自己的渲染器為“遞歸式蒙特卡羅”光線追蹤器。在1968年,蘋果公司[1]使用光線來(lái)渲染圖片。1979年,Whitted[16]和Kay,Greenberg[9]開(kāi)發(fā)了一種遞歸光線追蹤方法來(lái)描述精確的折射和反射。1982年,Roth[13]使用沿著光線的內(nèi)向/外向區(qū)間列表以及局部實(shí)例化來(lái)進(jìn)行CSG模型的渲染和體積估計(jì)。 1984年,Cook等人[4]提出了分布式光線追蹤。在其他地方,為了避免和分布式處理混淆,此方法通常被稱為隨機(jī)(stochastic)光線追蹤。幾乎每一個(gè)現(xiàn)代光線追蹤器都會(huì)使用隨機(jī)采樣的方法來(lái)實(shí)現(xiàn)景深(depth of field)、模糊反射(fuzzy reflection)和軟陰影(soft shadow)等效果。1984年之后不久,研究人員使用傳統(tǒng)的輻射傳輸方法重新描述了繪制過(guò)程。1986年,人們提出了兩個(gè)重要的算法。Kajiya[8]將積分傳輸方程稱為渲染方程(rendering euqation)。他嘗試了多種解決方案,其中包括他稱為路徑追蹤(path tracing)的蒙特卡羅方法。Immel、Cohen和Greenberg[7]提出了相同的傳輸方程,只是使用了不同的單位,并使用有限單元法(finite element method)來(lái)求解這個(gè)方程,該方法現(xiàn)在稱為輻射度算法(radiosity)。 自三十多年前使用經(jīng)典的輻射傳輸理論來(lái)重新描述這個(gè)圖形學(xué)問(wèn)題后,在如何從數(shù)值上進(jìn)行問(wèn)題求解方面大家做了大量的工作。一些關(guān)鍵的算法也發(fā)生了改變,如雙向(bidirectional)路徑追蹤[10, 14]和20世紀(jì)90年代引入的基于路徑的(path-based)方法[15]。更多細(xì)節(jié),包含如何在項(xiàng)目中實(shí)現(xiàn)這些技術(shù),在Pharr、Jakob和Humphreys的書[12]中有討論。 1.2 定義 我們?cè)诖藦?qiáng)調(diào)一些本書中的重要術(shù)語(yǔ),反映了行業(yè)中對(duì)這些概念的用法。雖然說(shuō)除了一些標(biāo)準(zhǔn)單位,尚不存在公認(rèn)的標(biāo)準(zhǔn)術(shù)語(yǔ)列表。 光線投射(ray casting)技術(shù)返回沿著光線*近的那個(gè)物體,有時(shí)甚至返回光線穿過(guò)的所有的物體。一根光線通過(guò)一個(gè)像素離開(kāi)相機(jī),在場(chǎng)景中行進(jìn),直到碰撞到*近的物體。作為著色的一部分,可以在發(fā)生碰撞的點(diǎn)向光源投射一個(gè)新的光線,以確定這個(gè)物體是否在陰影里,如圖1.1所示。 圖1.1 光線投射。一根光線從相機(jī)的位置出發(fā)經(jīng)過(guò)像素網(wǎng)格進(jìn)入場(chǎng)景中。在每個(gè)碰撞點(diǎn),朝光源投射另一根光線來(lái)確定表面被照亮還是在陰影里(圖片來(lái)源Henrik,“光線追蹤(圖形學(xué))”,維基百科) 光線追蹤(ray tracing)利用光線投射的機(jī)制來(lái)遞歸地采集反射材質(zhì)和折射材質(zhì)對(duì)*終光強(qiáng)的貢獻(xiàn)。比如,當(dāng)光線碰到一個(gè)鏡子,從鏡子上的碰撞點(diǎn)沿反射方向投射一根光線。不管這個(gè)反射光線(reflection ray)和什么相交都會(huì)影響鏡子*終的著色。類似的,透明物體如玻璃可能會(huì)同時(shí)產(chǎn)生反射光線和折射光線(refraction ray)。這個(gè)過(guò)程會(huì)不斷遞歸下去,每一根新的光線都可能引發(fā)新的反射和折射光光線。遞歸通常都會(huì)有截?cái)嘞拗疲热绻饩的*大反彈次數(shù)。整個(gè)光線樹(shù)會(huì)被反向地沿著光路評(píng)估,直至*后計(jì)算出顏色。和之前一樣,我們?cè)诿總(gè)碰撞點(diǎn)向每個(gè)光源發(fā)射光線來(lái)確定該物體是否在陰影里,如圖1.2所示。 圖1.2 光線追蹤。三束光線從相機(jī)射入場(chǎng)景。上方綠色的光線直接擊中盒子。中間紫色的光線先擊中鏡子,經(jīng)反射擊中盒子的背部。下方藍(lán)色光線擊中玻璃球,產(chǎn)生反射和折射光線。折射光線接著產(chǎn)生兩束子光線,其中一根穿過(guò)玻璃球 在Whitted算法(即經(jīng)典光線追蹤)中,假設(shè)物體表面絕對(duì)閃亮光滑,光源是方向光或者說(shuō)位于無(wú)窮遠(yuǎn)處。在Cook算法(即隨機(jī)光線追蹤)中,光線樹(shù)中每個(gè)節(jié)點(diǎn)可以發(fā)射更多的光線以產(chǎn)生各種效果。比如說(shuō),我們想象一個(gè)球面光源而非點(diǎn)光源。物體表面的局部被照亮,因此我們需發(fā)射非常多的光線到球面光源上不同的位置,來(lái)估計(jì)有多少光照可到達(dá)。我們對(duì)面光源的可見(jiàn)程度進(jìn)行積分,完全落在陰影里的點(diǎn)位于在全影區(qū)(umbra),局部照亮的點(diǎn)落在半影區(qū)(penumbra),如圖1.3所示。 圖1.3 球面光源投射出柔和的半影區(qū),全影區(qū)則完全在陰影當(dāng)中 通過(guò)向反射方向上的錐形區(qū)域射出很多光線并對(duì)結(jié)果進(jìn)行混合,我們得到帶光澤的反射而非完全的鏡面反射。如圖1.4所示。這種分散采樣點(diǎn)的理念同樣可用于實(shí)現(xiàn)半透明(translucency)、景深(depth of field)、運(yùn)動(dòng)模糊(motion blur)等效果。 在真實(shí)世界中有很多光源,它們到達(dá)人眼的方式多種多樣,包括折射和反射。光澤表面反射光線到很多方向上,不僅僅局限在反射方向上。漫反射或者啞光材質(zhì)可以將光線分散到更廣泛的范圍。在路徑追蹤方法中,我們顛倒一下光的散射行為,使用出射方向和材質(zhì)來(lái)決定入射方向*終著色的重要性。 追蹤如此復(fù)雜的光線傳輸過(guò)程對(duì)計(jì)算資源的要求非常驚人,也容易造成低效的渲染。其實(shí),為了產(chǎn)生一張圖像,我們只需要光線沿著特定的一組方向穿過(guò)相機(jī)鏡頭。遞歸光線追蹤(recursive ray tracing)及其衍生算法逆轉(zhuǎn)了光線傳播的物理過(guò)程,僅在相機(jī)處對(duì)*終圖像內(nèi)容的方向生成光線。 (a)入射光被反射后朝單個(gè)方向離開(kāi)鏡面 (b)在被打磨過(guò)的材質(zhì)上(比如黃銅),在反射方向附近散布光線并使表面有光澤 (c)在漫反射或啞光的材質(zhì)上(比如石膏),反射光線被散布到各個(gè)方向 圖1.4 鏡面(mirror)反射、光澤(glossy)反射及漫(diffuse)反射 在Kajiya風(fēng)格算法(即路徑追蹤)中,場(chǎng)景中的啞光表面會(huì)反射光線,它可以模擬現(xiàn)實(shí)世界中的所有光路(衍射之類的相位效果除外)。這里的光路(path)指的是從相機(jī)到光源之間一系列的光與物體的相互作用。 每個(gè)表面的交點(diǎn)處都需要結(jié)合材質(zhì)的反射屬性來(lái)估算它周圍所有方向上的光線的貢獻(xiàn)。例如,一堵紅色的墻旁邊有白色的屋頂,墻會(huì)反射紅色的光到屋頂,反之亦然。墻和屋頂會(huì)不斷產(chǎn)生更多的相互反射,這些相互反射又會(huì)產(chǎn)生更多反射光線,不斷影響彼此的著色。我們從相機(jī)的視角遞歸地累計(jì)這些效果,只有當(dāng)光線擊中光源時(shí)才結(jié)束該光路。通過(guò)這種方法,才可能生成出真實(shí)的基于物理的圖像。 這里我們使用了“可能”,如果我們?cè)谝粋(gè)粗糙的表面射出一組光,比方說(shuō)一千束。然后對(duì)于每一束光,我們遞歸地發(fā)射出另外上千束,那我們僅僅是計(jì)算一個(gè)像素點(diǎn)就可以到天荒地老了。相反,當(dāng)一束光線從人眼發(fā)射出去并碰到一個(gè)可見(jiàn)的表面上,在碰撞點(diǎn)光線追蹤器在有用的方向上只產(chǎn)生一束光。這束光依次產(chǎn)生一束光并持續(xù)下去,這些光線并*終形成一個(gè)路徑。對(duì)于一個(gè)像素,將多個(gè)路徑的結(jié)果進(jìn)行混合就可以估計(jì)出真正的像素輻射值。隨著追蹤的路徑數(shù)量變多,*后的效果也會(huì)提升。通過(guò)適當(dāng)?shù)奶幚恚窂阶粉櫩梢越o出無(wú)偏(unbiased)的、符合物理現(xiàn)實(shí)的結(jié)果。 大多數(shù)現(xiàn)代的光線追蹤器對(duì)每個(gè)像素使用多束光線作為蒙特卡羅(Monte Carlo,MC)算法的底層部分。Cook風(fēng)格和Kajiya風(fēng)格的算法就是例子。這些算法都在某些空間對(duì)各種概率密度函數(shù)(probability density function,PDF)有著特定的理解。比如,在Cook風(fēng)格算法中,我們可能會(huì)在一個(gè)透鏡空間包含一個(gè)PDF。在Kajiya風(fēng)格算法中,PDF將會(huì)在我們稱為路徑空間(path space)的路徑上出現(xiàn)。 蒙特卡羅算法使用不均勻分布的PDF采樣來(lái)減少誤差,這種采樣稱為重要性采樣(importance sampling)。使用數(shù)論方法中的樣本低差異模式而不是傳統(tǒng)的偽隨機(jī)數(shù)生成器來(lái)創(chuàng)建隨機(jī)樣本被稱為準(zhǔn)蒙特卡羅(Quasi-Monte Carlo,QMC)采樣。大部分場(chǎng)合,計(jì)算機(jī)圖形學(xué)從業(yè)者使用MC和QMC領(lǐng)域的標(biāo)準(zhǔn)術(shù)語(yǔ)。然而,這樣的做法有時(shí)會(huì)造成同義詞混淆。比如,計(jì)算機(jī)圖形學(xué)中的“使用陰影光線的直接光照”是MC/QMC中“下一事件估計(jì)”的一個(gè)例子。 從形式化的角度看,渲染器求解的是傳播方程(transport equation),在圖形學(xué)領(lǐng)域
光線追蹤精粹——基于DXR及其他API的高質(zhì)量實(shí)時(shí)渲染 作者簡(jiǎn)介
張靜,1986年生,畢業(yè)于上海交通大學(xué)。目前在心動(dòng)網(wǎng)絡(luò)任專家工程師,負(fù)責(zé)渲染、優(yōu)化、工具等方面工作。在GPU、計(jì)算機(jī)圖形學(xué)和計(jì)算機(jī)視覺(jué)領(lǐng)域有1O多年研發(fā)和產(chǎn)品經(jīng)驗(yàn)。曾翻譯出版過(guò)《Proeessing語(yǔ)言非常不錯(cuò)指南》及《OpenCV2計(jì)算機(jī)視覺(jué)編程手冊(cè)》,也是知乎專欄《黑客與畫家》的作者。
- >
推拿
- >
朝聞道
- >
二體千字文
- >
隨園食單
- >
龍榆生:詞曲概論/大家小書
- >
名家?guī)阕x魯迅:故事新編
- >
月亮虎
- >
自卑與超越