ETH官方钱包

切換
舊版
前往
大廳
主題

Some basic

Lumi | 2014-12-04 19:10:48 | 巴幣 0 | 人氣 458

以往靠經驗法則製作出的光線演算法已經無法滿足大多數人挑剔的眼睛,要製作更逼真、物理上正確的畫面就得想辦法套用光學方程式到繪圖演算法上。底下先把常用專有名詞做個整理,由於專有名詞的中文翻譯反而會讓我把不同名詞的意義搞混,底下索性全都用英文來表示

# 名詞: 符號 (單位)
1. radiant energy: Q (J)
2. radiant flux: Φ[phi] = dQ/dt (J/s W)


3. irradiance: dΦ/ dA 或 E (W / m2 )
若EL代表某個光源的irradiance,光源方向與表面法向量夾角為θ,則表面接收到的irradiance為:
現實中一個表面通常會有來自n個不同光源的照射,這時候只需要把每個irradiance加總。

irradiance可用於表示directional lights的強度,模擬距離場景非常遠的光源。由於距離過遠,在場景中光線強度不會因為距離而產生足夠大的變化,這時可將此數值當作常數使用。

4. solid angle: A / r2 或 ω (sr)
其中A為球表面積, 例如整顆球的表面積為4πr2,則整顆球的solid angle為4π sr

5. radiant intensity: dΦ/ dω 或 I (W / sr)
intensity可表示所有從光源表面出發,射向特定方向的光
可用以下方程式與irradiance互相轉換:

由上可知irradiance會隨著距離平方而遞減

▲radiant intensity常用於表示點光源的強度

6. radiance: L = d2Φ/ (dAprojdω) = d2Φ/ (dAcosθdω)  (W / m2-sr)
dA為入射表面的面積,dAproj為dA投影到垂直於光線向量的平面的面積。
radiance代表單一射線的光。

因為攝影機的鏡頭只容許特定方向的光線進入,不處理所有方向來的光線,所以不使用irradiance,而是用radiance。理論上每個pixel要處理從一個solid angle來的所有radiance,將積分後得到的irradiance儲存到render target裡。但通常都採用簡化的方法,即每個pixel只接收一條射線的光。

radiance和irradiance與intensity之間的關係如下:

不管攝影機距離表面多遠,radiance不會因距離產生變化。

參考資料
Real-Time Rendering, Third Edition

創作回應

更多創作