基於物理的光照模型實現

2021-08-19 03:39:06 字數 1119 閱讀 1114

隨著計算機效能的提公升和3d技術的發展,現代3d遊戲不斷追求對現實世界的真實模擬。在這種背景下,原來被廣泛使用的blinn-phong光照模型由於其模擬度不夠,已經不適應新一代遊戲的需要。

採用新的基於物理的光照模型,可以更好的模擬高光反射,大幅提公升畫面質量

光照模型使用了微表面brdf,環境高光的大量取樣使用預處理並儲存在一張cubemap多層mipmap中來模擬

我們知道,計算高光光照的基本公式如下:

其中,關鍵部分是雙向反射分布函式(brdf)。根據微表面brdf的理論,其brdf表示為:

其中f為費涅耳係數,g是幾何遮蔽函式,d是法線分布函式。

在本次的實現中,對費涅耳係數的模擬我們採用schlick公式;幾何遮蔽函式使用schlick修改過的smith模型;法線分布函式使用ggx。

以上是單條入射光的計算方式,為了計算所有方向的入射光,需要對入射半球做蒙特卡洛積分。

由於需要的取樣數過多,不可能採用實時取樣的方式,所以需要做資料的預處理。為了做到這一步,第一步是

這裡把光照剝離出來,把環境光照根據ggx的分布函式取樣之後,再按照roughness從0~1儲存到一張cubemap的mipmap中。

對於第二個部分,通過分析,可以把brdf分割成兩個部分:

因此我們可以考慮將這兩個部分預先計算,放到一張貼圖裡,使用cos(v,h),roughness作為橫縱座標。預計算結果如下:

最後使用的時候,只要把cubemap和這張貼圖結合使用,即可得到環境高光的結果。

3、創新點說明(從技術角度論述方案的創新之處)修改了光照模型,使渲染效果更佳。使用cubemap來儲存多次取樣預處理結果,在實際使用中一次取樣即可得到很好的結果,消耗非常小。

具體效果如下:

使用原始的phong光照模型

使用新的光照模型,無環境高光

新光照模型,且應用環境高光:

收益評估

以相當小的代價換取次世代的畫面效果,使遊戲對玩家的吸引度大大提公升

改進計畫

cubemap可以有多張,分布在場景的多個角落,且可以切換

Unreal 光照單位與基於物理的燈光

醜話說在前面,基於物理的燈光引數有沒有用呢?看如何對待,如果我只要效果,你如何進行燈光的調節只要最後好看,就沒有問題 但是如果我們想要乙個能夠復用的燈光資源庫,這就是乙個非常好的一種方法。現在來說等白嫖 別人把理論研究清楚,因為現在還沒有基於這種做法而商業成功的專案 而不是自己去研究是乙個非常務實的...

Phong光照模型的Shader實現

phong用到的是反射向量,計算反射向量的公式是 r 2 n dot n,l l 這個公式是根據向量的投影公式以及平行四邊形法則推導出來的 詳細步驟請看這篇文章,講的非常好 shader phong specular specular range 1,20 1 speccolor speccolor...

光照模型及cg實現

經典光照模型 illumination model 物體表面光照顏色由入射光 物體材質,以及材質和光的互動規律共同決定。由於環境光給予物體各個點的光照強度相同,且沒有方向之分,所以在只有環境光的情況下,同一物體各點的明暗程度均一樣。環境光是對光照現象的最簡單抽象,侷限性很大。它僅能描述光線在空間中無...