2012-03-27 20 views
3

更新:我回答了我自己關於使用什麼照明模型的問題,但現在我需要知道如何計算反射和透射射線的菲涅耳術語。如何將Phong照明與菲涅耳電介質反射/傳輸實際結合起來?

我有一個部分實現的C++光線追蹤器。現在Phong照明與陰影射線工作正常。我選擇不具有單一顏色加上標量環境/漫反射/標量係數的實體;三個係數都有RGB分量,所以我可以實現像these這樣的材料。另一方面,燈光具有單一的RGB顏色加上標量漫反射和鏡面反射強度。還有一個RGB環境光。

在這一點上,我還可以實現反射或透射所有光線的完全電介質實體,反射比例由菲涅耳方程確定折射光。但是,如何真實地將反射和折射的顏色與Phong顏色相結合?我想要有微反射彩色塑料,拋光金,完美的鏡面或玻璃球,彩色玻璃,透明正面但邊緣呈綠色的玻璃窗等等。我打算爲每個實體添加RGB反射係數和透射係數,並讓實體設計師確保環境+漫射+鏡面+反射+透射率處於合理的範圍內,但這似乎是任意的。有沒有基於物理的方法?

回答

3

我找到一個合適的光照模型自己在documentation for .mtl files

color = KaIa 
+ Kd { SUM j=1..ls, (N*Lj)Ij } 
+ Ks ({ SUM j=1..ls, ((H*Hj)^Ns)Ij Fr(Lj*Hj,Ks,Ns)Ij} + 
Fr(N*V,Ks,Ns)Ir}) 
+ (1.0 - Kx)Ft (N*V,(1.0-Ks),Ns)TfIt 

這是緻密且實際上具有一些錯字(如KxFt),所以我糾正它:

I = Ka * Ia 
+ Kd * [sum for each light: (N . L) * Il] 
+ Ks * [sum for each light: ((R . V)^Ps) * Fl * Il] 
+ Ks * Fr * Ir 
+ Kt * (1 - Ks) * Ft * It 

I := surface point's color 
V := ray direction 
P := surface point 
N := surface normal 
L := light's position - P 
R := L - 2 * (N . L) * P 
Ka := surface material's ambient coefficient 
Kd := surface material's diffuse coefficient 
Ks := surface material's specular coefficient 
Ps := surface material's shininess 
Kt := surface material's transmission coefficient 
Ia := ambient light color 
Il := light's color 
Ir := reflected ray's color 
It := transmitted ray's color 
Fl := light's Fresnel coefficient 
Fr := reflected Fresnel coefficient 
Ft := transmitted Fresnel coefficient 

這模型對我來說很有意義,尤其是在閱讀後Lighting 101 - Phong鏡面反射是一種反射光源的性能意識破解,所以自然而然地使用相同的係數來進行高光反射反射光線。

還有一件事我不明白。如果我不想打擾菲涅耳術語,我可以設置Fl,FrFt爲1.如果我想要額外的準確性,但是,我將如何根據我已定義的變量計算它們?

+0

對於你的最後一個問題:就我所知,你需要材料的折射率來計算反射率和透射率的菲涅耳值。也不是指向Lighting 101的鏈接不再可用。編輯:.mtl文件鏈接的文檔也不可用。 – kleinfreund 2016-08-26 13:12:42

+0

這兩個鏈接都走了:(但很好的研究 – muni764 2018-01-11 23:01:25