阿昌學(xué)習(xí)《RayTraing in one week》 (七)
第七章
這章開始給我們的球加一個(gè)材質(zhì)——漫反射材質(zhì)。這樣我們的場景就會(huì)越來越接近現(xiàn)實(shí)。
說到漫反射材質(zhì)就是一種可以呈現(xiàn)周圍環(huán)境顏色的不發(fā)光物體,而且呢,會(huì)有隨機(jī)方向的反射現(xiàn)象和被吸收掉的光線。書中給到的三條光線很好的呈現(xiàn)了漫反射的效果。

數(shù)學(xué)上理想的Lambertian,從命中點(diǎn)相切的單位半徑球體中隨機(jī)選取一個(gè)點(diǎn),并從該命中P像這些隨機(jī)點(diǎn)發(fā)送一條射線。這個(gè)球體就會(huì)得到(P+N):

接下來寫一個(gè)隨機(jī)生成求內(nèi)的一點(diǎn)(這個(gè)里有個(gè)方法叫:否定法rejection method)
其中這個(gè)點(diǎn)的xyz取值范圍都是-1~1的立方體中隨機(jī)生成的,當(dāng)然要加一個(gè)循環(huán)的判斷保證這個(gè)點(diǎn)是在求內(nèi)的。

我的注釋也希望大家看一下,main方法的內(nèi)容看下邊的
那么運(yùn)行一下就會(huì)得到一個(gè)小黑球啦:

這個(gè)圖呢,明顯還是比較黑的,這次我們?cè)谝胍粋€(gè)概念 —— 伽馬校正。
伽馬校正:由于早期crt顯示器輸出的亮度和輸入的電壓存在非線性關(guān)系,差不多就是2.2次冪的關(guān)系,導(dǎo)致顯示的圖片亮度要比計(jì)算機(jī)上存儲(chǔ)的低一些。
為了近似的還原圖片的輸出效果,我們可以開平方根來計(jì)算(2.2次冪更接近,但是學(xué)習(xí)過程中就選了和書里一樣的開平方)
那我們把這個(gè)開平方的計(jì)算加在main方法里,也就是顏色數(shù)值計(jì)算的最后:

我們?cè)俅芜\(yùn)行一下就會(huì)得到:

最后書中還有一個(gè)地方,就是關(guān)于遞歸的部分后續(xù)會(huì)加入次數(shù)限制,另一個(gè)是光線重疊打回圓點(diǎn),這個(gè)我們只需要將光線公式中t的取值范圍改一下,讓t不等于0就可以。

好了,這就是關(guān)于漫反射,接下來加入一些其他的材質(zhì),讓他更趨近現(xiàn)實(shí)。