最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【圖形學(xué)筆記】實時范圍光Area Light渲染及其數(shù)學(xué)原理推導(dǎo)

2023-06-16 11:48 作者:小豆子zyq  | 我要投稿

引言

????在燈光渲染中,點光、平行光和聚光燈的實現(xiàn)較為容易,原因是要么光源為一個定點或者光線方向恒定。但范圍光Area Light四面八方的光源來自連續(xù)的表面,實現(xiàn)方法有本質(zhì)上的不同。對于離線渲染可以通過路徑追蹤(蒙特卡洛積分)暴力解算,但是在實時渲染中需要更為巧妙的方式實現(xiàn)。

Sponza scene illuminated by a textured, rectangular area light. [1]

? ? 前幾天我和同學(xué)復(fù)刻了一下基于LTC (Linear Transformed Cosines)?的實時范圍光渲染,所以打算寫一篇筆記分享一下學(xué)習(xí)過程。教程[3]和文獻[1][4]來源會放在文末的引用中。如果筆記內(nèi)容有誤請多多指正

前置知識

????前置知識涉及部分輻射計量學(xué)、渲染方程以及簡易積分。我當(dāng)時由于這部分基礎(chǔ)不太牢(學(xué)的不系統(tǒng)),在后續(xù)的數(shù)學(xué)推導(dǎo)中浪費了很多時間去補充,所以這個部分我盡量寫細(xì)一些。


立體角

????用于描述一個立體方位和輻照積分的積分域,通常用ω表示,而θ和φ(或者α)可以看做是空間極坐標(biāo)系中兩個用于描述方位的角度。需要注意的是θ是法向和特定方向的夾角,而不是特定方向和水平圓面的夾角,這個定義會影響后續(xù)積分時的表達。

立體角和方位角的符號定義 [2]

值得一提的是,對于立體角的球面積分的過程為:

%5Cvcenter%7B%5Cint_%5COmega%20d%5Comega%3D%5Ciint%5Csin%5Ctheta%20d%5Ctheta%20d%5Calpha%3D2%5Cpi%5Ccdot%20(%5Csin(%5Cfrac%5Cpi2)-%5Csin(-%5Cfrac%5Cpi2))%3D4%5Cpi%7D

  • 所以d%5Comega可以理解為在單位球面上的面積微元,其與兩個方位角的微分關(guān)系為d%5Comega%3D%5Csin%5Ctheta%20d%5Ctheta%20d%5Calpha

  • 通過計算球面某一區(qū)域的面積即可求得該面積所對應(yīng)的立體角

輻照度?Irradiance

這個物理量我感覺是PBR中最總要的一個,其定義為:

E%3D%7B%5Cfrac%20%7B%5CPhi%5Ccos%5Ctheta%7D%20%7BA%5E%5Cperp%7D%7D

  • %5CPhi輻射通量,在圖形學(xué)中一般表示為光的亮度(vec3,0%5Cto%2B%0A%5Cinf

  • %5Cfrac%7B%7BA%5E%5Cperp%7D%7D%7B%5Ccos%5Ctheta%7D受光面積,其中%7BA%5E%5Cperp%7D正對面積,%5Ccos%5Ctheta的作用是將受光面積轉(zhuǎn)換為正對面積

特別的是,對于輻照度半球積分,假設(shè)任意方向的輻照度都為1

%5Cvcenter%7B%5Cint_%7B%5COmega%5E%2B%7DEd%5Comega%3D%5Cint_%7B%5COmega%5E%2B%7D%5Ccos%5Ctheta%20d%5Comega%3D%5Ciint%5Ccos%5Ctheta%5Csin%5Ctheta%20d%5Ctheta%20d%5Calpha%3D2%5Cpi%5Cint%20%5Cfrac12%5Csin2%5Ctheta%20d%5Ctheta%7D%3D%5Cpi

所以在圖形學(xué)中,輻照度積分都要除以π來歸一化

I%3D%5Cfrac1%5Cpi%5Cint_%7BS%7D%20%5Ccos%5Ctheta%20d%0A%5Comega%EF%BC%8CS%5Csubseteq%5COmega%5E%2B


渲染方程

L_o(%5Comega_o)%3D%5Cint_%7B%5COmega%5E%2B%7Df_r(%5Comega_o%2C%5Comega_l%2Cn)L_i(%5Comega_l)%5Ccdot(%5Comega_l%5Ccdot%20n)%5Ccdot%20d%5Comega_l%20

  • 一定程度上,出射光線等于無數(shù)條入射光線的加權(quán)和,其中BDRF函數(shù)(f_r)就代表著出射光和某一條入射光的比例關(guān)系,我認(rèn)為這是實現(xiàn)Area Light的核心思想之一

根據(jù)光路可逆,左邊的可以理解為出射光,右側(cè)的幾根為入射光,球面函數(shù)為權(quán)重 [1]


范圍光

????在給定視角方向(需要求出出射光線的方向)、法線方向?,F(xiàn)在需要做的就是在范圍光的光源(也就是自發(fā)光多面體)上進行加權(quán)采樣,最后求得該出射光方向上的光線。

BRDF即渲染方程中的fr,也就是一定程度上的權(quán)重 [1]


積分轉(zhuǎn)化

????很明顯,在實時渲染中無法對幾何體進行采樣,也無法讓BRDF和幾何體的球面投影進行卷相乘,因為時間復(fù)雜度太大了。不過學(xué)者[1][4]提出了一種很牛的思路,將幾何體面采樣轉(zhuǎn)換為有限的邊緣求和(積分)


投影變換?[4]
  • 某N變形幾何體的球面投影(傳統(tǒng)積分的對象)為S_%5COmega

  • 其球面投影在圓盤面C上的投影為S_C%0A%0A

其二者的換算關(guān)系為

S_%5COmega%5Ccdot%5Ccos%5Ctheta%20%3DS_C%2C~dS_%5COmega%5Ccdot%5Ccos%5Ctheta%3DdS_C

  • 這個換算過程可以理解為投影,跟輻照度中正對面積%5Cvcenter%7B%5Ccos%5Ctheta%7D%0A是一個原理

于是神奇的事情發(fā)生了,通過積分換底(Jacobian),從原來的球面立體角的面積變成了投影的面積

I%3D%5Cfrac1%5Cpi%5Cint_%7BS_%5COmega%7DEd%5Comega%3D%5Cfrac1%5Cpi%5Cint_%7BS_%5COmega%7D%5Ccos%5Ctheta%20d%5Comega%3D%5Cfrac1%5Cpi%5Cint_%7BS_C%7Dd%5Csigma%3D%5Cfrac%7B%20S_C%7D%5Cpi


邊緣積分

接下來的任務(wù)就是計算多面體在球面的投影在圓盤的投影的面積

signed sum [4]

這部分的操作是逐邊緣計算有符號子面積然后求和。給出任意兩個圓心指向頂點的向量,公式為:S'%3DS%5Ccdot%5Ccos%20%5Ctheta%3D%5Cfrac12%5Calpha%5Ccdot%20r%5Ccdot%5Ccos%20%5Ctheta%5C%5C%0A%5Calpha%20%3D%20%5Carccos(%5Cvec%20v_1%20%C2%B7%20%5Cvec%20v_2)%5C%5C%0A%5Ccos%5Ctheta%3Dn%5Ccdot%5Cfrac%7B%5Cvec%20v_1%20%C3%97%20%5Cvec%20v_2%7D%7B%5C%7C%5Cvec%20v_1%20%C3%97%20%5Cvec%20v_2%5C%7C%7D

相當(dāng)于先求出一個完整的圓?。▋蓚€頂點矢量和球面上的圓弧組成)的面積,然后投影回圓盤

所有邊的積分式為:

I%3D%5Cfrac%201%5Cpi%5Csum%5Cfrac12%5Carccos(%5Cvec%20v_i%20%C2%B7%20%5Cvec%20v_j)%5Ccdot(n%5Ccdot%5Cfrac%7B%5Cvec%20v_i%20%C3%97%20%5Cvec%20v_j%7D%7B%5C%7C%5Cvec%20v_i%20%C3%97%20%5Cvec%20v_j%5C%7C%7D)


LTC Linearly Transformed Cosines

Learn OpenGL CN沒有翻譯這篇文章,我也沒找到中文翻譯。大致意思是由多種線性變換一個半球余弦分布函數(shù)集合。

原始權(quán)重分布函數(shù)Do [1]

假設(shè)我們的范圍光是均一的,輻射通量%5CPhi為定值,則積分公式:

I%3D%5Cfrac1%5Cpi%5Cint_%7BS_%5COmega%7DEd%5Comega%3D%5Cfrac%5CPhi%5Cpi%5Cint_%7BS_%5COmega%7D%5Ccos%5Ctheta%20d%5Comega%3D%5Cfrac%7B%5CPhi%20S_C%7D%5Cpi

其中不難看出這個積分(加權(quán)和)所采用的權(quán)重分布函數(shù)D_o%0A為上圖中的第三種,Clamped Cosine(正半球余弦分布)

D_o(%5Comega_o)%3D%5Cfrac1%5Cpi%5Ccos%5Ctheta_o%0A

  • 其中的%5Cfrac1%5Cpi同樣是為了保證權(quán)重的半球積分結(jié)果為1

線性變換

????很明顯,現(xiàn)在的求和方式僅能針對粗糙度為0的情況,來自自發(fā)光多邊形的入射光全部以漫反射發(fā)射出去,為了模擬BRDF對于粗糙度變化、視角變化(甚至材質(zhì)各向異性變化),需要將初始權(quán)重分布函數(shù)D_o%0A應(yīng)用一個三乘三線性變換矩陣去擬合入射光和反射光在不同材質(zhì)和攝像機角度下的權(quán)重分布。這也就是這個技術(shù)中“Linearly Transformed”的含義

變化過程可視化 [1]

由此一來,對入射光的權(quán)重分布函數(shù)D%0A將獲得近似BRDF的權(quán)重分布,即:

D(%5Comega_o)%3DD_o(M%C3%97%5Comega_o)%5Capprox%20f_r(%5Comega_o)%5Ccdot%5Ccos%5Ctheta_o

  • 這里順便把渲染方程中的%5Cvcenter%7B%5Ccos%5Ctheta%7D%0A一起乘上了,畢竟是權(quán)重分布而不是簡單地BRDF分布

擬合情況 [1]


但是根據(jù)邊緣積分公式的推導(dǎo),邊緣積分僅適用于D_o的分布情況,所以在渲染中要將自發(fā)光多面體進行M%5E%7B-1%7D變換。從而計算邊緣積分,這步非常重要。

將D變換回Do,將同樣過程應(yīng)用在多面體上 [1]


最終的渲染方程就是

I%3Dk_d%5Cint_PD_o(%5Comega)d%5Comega%2Bk_s%5Cint_%7BM%5E%7B-1%7D%C3%97P%7DD_o(%5Comega)d%5Comega

  • 其中第一項是漫反射項,第二項是高光項

  • k_dk_s是典中典之菲涅爾過渡,k_d%2Bk_s%3D1%2C~k_s%3DF

  • P%0A是指自發(fā)光多面體(Polygonal Light)展開的話就是

%5Cint_PD_o(%5Comega)d%5Comega%3D%5Cfrac%201%5Cpi%5Csum_%7B%5Cvec%20v_i%2C%5Cvec%20v_j%5Cin%20P%7D%5Cfrac12%5Carccos(%5Cvec%20v_i%20%C2%B7%20%5Cvec%20v_j)%5Ccdot(n%5Ccdot%5Cfrac%7B%5Cvec%20v_i%20%C3%97%20%5Cvec%20v_j%7D%7B%5C%7C%5Cvec%20v_i%20%C3%97%20%5Cvec%20v_j%5C%7C%7D)


關(guān)于三乘三矩陣

將粗糙度變換、各向異性變換、攝像機角度變換,三個三乘三矩陣依次相乘即可得出用于擬合BRDF的變換矩陣,即

M_v%C3%97M_a%C3%97M_r%3DM%3D%5Cbegin%7Bvmatrix%7D%0Aa%260%26b%5C%5C%0A0%26c%260%5C%5C%0Ad%260%261%0A%5Cend%7Bvmatrix%7D

又因為a,b,c,d的具體數(shù)字只與兩個變量有關(guān):粗糙度、攝像機與法線的夾角。那么接下來就是典中典之查表環(huán)節(jié)了。將abcd分別對應(yīng)像素的RGBA,橫縱坐標(biāo)分別為粗糙度(在論文中為了粗糙度變化平滑,采用%5Csqrt%7Br%7D作為粗糙度軸)和攝像機與法線的夾角。即可存儲為一張LUT,在渲染的時候以讀取紋理的形式構(gòu)建變換矩陣


效果


論文中的效果 [1]
我和同學(xué)實現(xiàn)的效果

其他三維軟件中的Area Light大多以矩形和橢圓形為主,但是論文和教程中使用的技術(shù)遠(yuǎn)遠(yuǎn)打過如此。LTC可以解決任意面數(shù)任意形態(tài)的自發(fā)光光源,并且支持燈光貼圖。


關(guān)于燈光貼圖

這部分還沒實現(xiàn),大致思路是對貼圖先進行預(yù)積分,跟IBL一樣,然后根據(jù)燈光距離和表面粗糙度進行線性插值(大概)


實現(xiàn)方法

詳見Learn OpenGL網(wǎng)站[3],里面有詳細(xì)的代碼實現(xiàn)和更全面的文獻資料。

特別特別感謝大佬同學(xué)幫我在渲染器里實現(xiàn)了范圍光,GitHub@theta-lin


引用

  • [1] Real-Time Polygonal-Light Shading with Linearly Transformed Cosines, ACM Siggraph '16?

  • [2]?Understanding the concept of Solid Angle,?ENGINEERING STREAMLINED (Youtube)

  • [3] Area Lights, LearnGL guest articles 2022?

  • [4]?Geometric Derivation of the Irradiance of Polygonal Lights,?Eric Heitz


【圖形學(xué)筆記】實時范圍光Area Light渲染及其數(shù)學(xué)原理推導(dǎo)的評論 (共 條)

分享到微博請遵守國家法律
图们市| 侯马市| 新巴尔虎左旗| 邮箱| 松溪县| 镶黄旗| 富锦市| 金阳县| 保山市| 额尔古纳市| 博湖县| 独山县| 灵璧县| 梧州市| 莫力| 吉木乃县| 府谷县| 隆尧县| 阳春市| 中山市| 邵阳市| 东明县| 安丘市| 西乌珠穆沁旗| 仁化县| 彝良县| 青浦区| 陕西省| 来宾市| 连州市| 濮阳市| 河东区| 潮安县| 博兴县| 漳浦县| 峨山| 宽城| 保德县| 湘乡市| 淳化县| 荔浦县|