阿昌學(xué)習(xí)《RayTraing in one week》 (九)
第九章
前兩章加入了金屬材質(zhì)和漫反射材質(zhì),這一章再加入一個(gè)“電解質(zhì)材質(zhì)”,簡(jiǎn)單點(diǎn)說(shuō)就是水呀,玻璃呀,鉆石呀這些都是電解質(zhì)材質(zhì)(有的翻譯叫絕緣體材質(zhì)),實(shí)質(zhì)上就是光線(xiàn)在擊中這個(gè)材質(zhì)的時(shí)候既有折射又有反射,而書(shū)里采用方式是一跳光線(xiàn)擊中后,隨機(jī)產(chǎn)生一條反射或者折射光線(xiàn)。
因?yàn)檎{(diào)試過(guò)程中折射部分比較麻煩,所以先將所有的光線(xiàn)只發(fā)生折射,然后在兩個(gè)透明的玻璃球。



一些常見(jiàn)的折射率:空氣為1.0,玻璃為1.3-1.7,鉆石為2.4。
折射部分的光線(xiàn)R` 可以分解為垂直和水平的兩個(gè)向量,這樣就可以把上邊的公式變?yōu)椋?/p>
n / n’ * sin(theta) = sin(theta’)
這里入射夾角就是與法向量的夾角,入射光線(xiàn)是已知的,折射率一般也是給定的。
所以呢,就可以直接求得theta`的度數(shù),再根據(jù)點(diǎn)乘公式,可以計(jì)算出折射光線(xiàn)了。
直接用代碼來(lái)展示一下:
記得看一下里面的備注!?。∫欢ㄒ?xì)看

寫(xiě)一個(gè)電解質(zhì)材質(zhì)類(lèi)(這里注意一下104行,書(shū)中寫(xiě)的是(1,1,0),我寫(xiě)的是(1,1,1)這里輸出的圖是有區(qū)別的后):

寫(xiě)好后,我們?cè)谥骱瘮?shù)修改一下球的參數(shù):

main只修改了小球的參數(shù)
接下來(lái)我介紹一下,輸出的情況:
第一種:使用v和(1,1,0)的時(shí)候

第二種:使用uv和(1,1,0)的時(shí)候

第三種:使用uv和(1,1,1)的時(shí)候

其實(shí)我們現(xiàn)實(shí)中看到的玻璃是很有趣的,當(dāng)你以一個(gè)很小的角度去觀察玻璃的時(shí)候,他會(huì)比較像一面鏡子,這個(gè)時(shí)候就要引入 —— 菲尼爾效應(yīng)。
關(guān)于菲尼爾方程的介紹:菲涅爾方程(Fresnel Equation) - 王江榮的文章 - 知乎 https://zhuanlan.zhihu.com/p/375746359
他這篇文章講解的還可以,我比較理解一些。

那么改寫(xiě)一下之前的電解質(zhì)材質(zhì)類(lèi):

在主函數(shù)中添加一個(gè)新的球:
這里要半徑是負(fù)數(shù)可以得到一個(gè)法線(xiàn)相反的球,聯(lián)想一下就是得到了一個(gè)中間是空的一個(gè)氣泡般的球體


這樣就基本介紹完了物體相關(guān)的基礎(chǔ)內(nèi)容,接下來(lái)我們要改變一樣很有趣的東西,讓我們的攝像機(jī)動(dòng)起來(lái)。