三維渲染 BRDF雙向反射分布函式

2021-10-05 11:10:34 字數 1296 閱讀 2545

蒙特卡洛光線追蹤技術系列 見 蒙特卡洛光線追蹤技術

我們看到的光,有直接來自光源,也有不發光物體反射光源的光。光照射到物體上,怎麼反射,反射多少,就需要brdf來描述:brdf(bidirectional reflectance distribution function)是描述物體表面入射光和反射光之間關係的。

對乙個方向的入射光來說,表面會將入射光光反射到該表面上半球的各個方向,不同的方向反射比例不同,brdf就是用來表示某一方向的反射光和入射光的比例關係:

f(l,v),f即該函式(brdf),l是入射光方向,v是攝像機觀察的方向。雖然散射光散射到了各處,但是只有方向v是我們所關心的。

反射光反射到v方向的輻亮度是

不同頻率(顏色)的光在表面的反射率可能不一樣,brdf和光的頻率有關係,我們將brdf表示為rgb向量,三個分量各有自己的brdf。brdf需要處理表面半球的各個方向,所以用球座標系定義更方便。

至於為什麼要用反射光輻亮度(輻射率)的微分比上入射光的輻照度的微分,不同的文章有不同的解釋。

輻亮度(radiance):

輻照度:

注意首先是微分關係,應該這樣理解:在該函式中,反射光僅受入射光方向v的影響,而忽略了其他方向的光的影響。

其次是比率,輻亮度(輻射率)表示單位時間通過單位有效面積單位立體角的光能量,輻照度表示單位時間通過單位面積的光能量。前乙個是有效面積,後乙個只是面積。也就是說射入的時候我們不需要考慮它是不是垂直射入的有效面,只需要知道它射入到這個單位面積上了就行了。

但是反射就不一樣了。我們必須要知道對於反射來說的確切值,因為我們需要接收到的是反射的能量:

如果沒有「有效面」這個條件,攝像機朝向不同則接收到的光強度是不同的。如果沒有單位立體角這個條件,攝像機離著反射點遠了,則光強度也會降低(我們上一節說過,無論多遠,顏色值(光亮)都是不會變的)。

所以綜上所述,我們得知所謂brdf,其實就是表示某個方向上的光打在乙個表面上以後,經過反射到其他方向的分布表示。

三維渲染之地形渲染

地形渲染是三維場景的重點,地形渲染的質量和效率直接影響整個場景渲染的質量和效率。一般來說,為了渲染出更加真實的地形,則地形的單個網格要盡量小,這樣才能保證地形各個部分更加的精細。但如果網格變小,則對系統的開銷也就大了,從而會影響渲染的效率。因此地形演算法的設計實際上就是圍繞著渲染質量和渲染效率這兩方...

python渲染 Python三維軟體渲染

我決定嘗試在python中使用pygame進行乙個實驗,這樣我就可以通過pixelarray繪製到螢幕上。我決定按照this article來鑽研3d的數學 總之,我已經實現了每乙個功能。我建立了矩陣和向量的數 算,並有一些問題,但經過廣泛 廣泛的 測試,這些運算現在完全可以工作了 點 十字 法線 ...

三維場景的渲染優化

對於任何乙個3d應用程式來說,追求場景畫面真實感是乙個無止盡的目標,其結果就是讓我們的場景越來越複雜,模型更加精細,這必然給圖形硬體帶來極大的負荷以致於無法達到實時繪製幀率。因此,渲染優化是必不可少的。在渲染優化之前,我們需要對應用程式效能進行系統的評測,找出瓶頸,對症下藥。對於3d應用程式來說,影...