reflectance即albedo(texture color) (13.9)就是render equation裡的半球積分 只考慮RGB其中1個component (且值為1) 有Diffuse BRDF為 F= 1 / π |
第1個黃色
往不同方向出去的Lo有個cos(θo)修正
reflectance即albedo(texture color) (13.9)就是render equation裡的半球積分 只考慮RGB其中1個component (且值為1) 有Diffuse BRDF為 F= 1 / π |
➡️ 前篇
讀了CG 鼠書
書上把direct light和indirect light分開考慮
代碼來自 CG 鼠書 |
直接光照 ➡️ 點光源
E擊中dAs = cos(θi) I / R2
12.3 Point Lights |
代碼來自 CG 鼠書 |
代碼來自 CG 鼠書 |
間接光照
代碼來自 CG 鼠書 dω用了蒙地卡羅積分後就消失了(只取樣1個光源) u是介於0~1的亂數值
ρ 是俄羅斯倫盤,,如果u是0.75
當ρ>0.75 會return 0 也就是有25%的機會採樣失敗
當ρ<0.75,return的值就要會做*1/ρ的修正
(把採樣失敗的能量補回來)
|
蒙地卡羅積分
俄羅斯倫盤
有1個在世界座標定義的向量V(x,y,z)
在世界座標定義1個正交座標系 W ,W不包含位移,只有3軸,而且3軸彼此互相垂直
那麼
把V 從世界座標(空間)變換到W座標(空間)的方法,就是把v投影到W的3軸(基向量)
使用內積(dot)來投影 圖示
把 (x_w,y_w,z_w)從W座標(空間)變換回世界座標(空間)
就是 圖示
從W空間的原點(0,0,0)開始
(0,0,0) ➕ x_w✖️x-axis ➕y_w✖️y-axis ➕z_w✖️z-axis
等同於在做3個基向量的組合
座標變換:上半是投影、下半是組合 |
https://photos.app.goo.gl/1Nj8ojgitocw5iSu7
下面是詳細過程
三角形的頂點是A、C、B、對映到的uv座標是a、b、c
uv座標的2個軸是u-axis、v-axis向量
a= (a.u,a.v) 代表
從uv座標的原點 o=(0,0)出發
沿著u-axis軸移動 a.u 長度、再沿著v-axis軸移動a.v長度,會到達點a
o + u-axis✖️a.u + v-axis✖️a.v = a
b和c也是類似的
o + u-axis✖️b.u + v-axis✖️b.v = b
o + u-axis✖️c.u + v-axis✖️c.v = c
這有什麼用呢?
現在換看頂點ACB
想像ACB會在同1個平面上P,然後再想像P上會有1個原點D
一開始我們不知道D的實際位置
但我們可以模仿uv空間
o + u-axis✖️a.u + v-axis✖️a.v = a
寫出
D + T✖️a.u + BN✖️a.v = A
D + T✖️b.u + BN✖️b.v = B
D + T✖️c.u + BN✖️c.v = C
再來只要解上面3個聯立方程式,就能找出tangent了
https://photos.app.goo.gl/1UVE8M3LQBSwupPm8
T.w就是Peek tangent in Unity裡的w
建模軟體要怎麼判定tangent.w的正負?連結