前段時間讀**看到了bent normal這個概念,找了些相關的資料學習了一下。bent normal常見於離線的ambient occlusion渲染中(中文翻譯過來應該叫做環境法線?網上搜尋看有些地方是這麼叫的),從它的字面意思中即可以看出其同樣是一種normal,只不過是做了修改變形(bent)。這個bent是如何計算而來的呢?這個bent normal又有什麼用外呢?這裡做個簡單的介紹。
什麼是bent normal?
首先我們知道,對於不管什麼反射模型的渲染方程來說,幾何模型的表面法向量是必需的乙個資訊元素。而bent normal就是對原始的normal做修改之後的新向量,它指向了當前畫素乙個不被其它物體(或幾何體元)遮擋的平均方向,也即光線傳入的主要方向。由些可知其與ambient occlusion是相關的。其公式化後的形式如下所示【式一】:
其中的x在w方向上的可見性,也即是否被遮擋。該式與普通的ao計算公式基本上相同,使用蒙特卡羅積分將其離散化即可得到乙個有限取樣下可行的bent normal計算公式。
bent normal的取樣示意圖(從圖中可以看出,bent normal(黃色)與原始normal(藍色)相比,其在考慮周圍幾何體元分布的情況下向右側做了修整)
bent normal有什麼用處?
bent normal一般來說可以有兩種用途:
如何計算bent normal?
bent normal的計算方式一般來說也有兩種方法;
下述為原始normal與bent normal的對比圖(bent normal的生成採用了離線的蒙特卡羅演算法來計算,木有優化取樣方式,因而存在噪點痕跡):
從上述normal對比圖中可以看出,對於普通表面曲率大於等於0的表面,其bent normal與原始normal並沒有什麼區別,表現在場景上的情況即是其沒有被其它幾何體元所遮擋;而對於那些表面凹處,則bent normal會對原始的normal產生相應的修改,而這些地方在做ssao操作時則同樣會產生相應的ao。
這兩張為使用normal&bent normal的渲染效果:
Bent Normal 環境法線
前段時間讀 看到了bent normal這個概念,找了些相關的資料學習了一下。bent normal常見於離線的ambient occlusion渲染中 中文翻譯過來應該叫做環境法線?網上搜尋看有些地方是這麼叫的 從它的字面意思中即可以看出其同樣是一種normal,只不過是做了修改變形 bent 這...
Vnc Xfce環境下使用Fcitx輸入法
在ubuntu下實現遠端控制,一般的解決方案為安裝xfce桌面環境及vncserver。自帶的vino必須要登入後才能連線,不方便在伺服器環境使用 一般linux比較好用的輸入法如sogou,其基於fcitx輸入法環境。但xfce環境並不包含fcitx輸入法環境的配置及執行,也就是通過vnc連線時x...
Ubuntu設定環境變數三法
如想將乙個路徑加入到 path中,可以像下面這樣做 1.控制台中 path path my new path 關閉shell,會還原path 2.修改profile檔案 vi etc profile 在裡面加入 export path path my new path 3.修改.bashrc檔案 v...