[一] 原理
將每個 face 分成多個 patch,以熱輻射的觀點,每個 patch 都會有散發出熱能,
而每個 patch 的顏色都會被附近 patch 的熱能所散發的輻射所影響,
form factor 就是一個能量在 patch 之間傳遞比例的影響公式
[二] 想法
因為在 form factor 中,每個 patch 的面積、patch 跟 patch 之間相鄰的距離也會有影響,
為了簡化計算,我們將每個 patch 的面積都設為 1,
同時以 hemicube 的概念來假設任兩 patch 之間的距離也都是 1,如此簡化計算。
另外一個問題是某兩個 patch 不一定是面對面的情況,如圖,
綠色面不應該傳遞熱輻射到 patch,即該 face 上所有 patch 不會影響目前 patch 的顏色
綠色面不應該傳遞熱輻射到 patch,即該 face 上所有 patch 不會影響目前 patch 的顏色
因此將以 patch 所能看到的 "畫面" 來決定哪些面的 form factor 應該會影響到目前 patch。
憑藉著這樣的概念,我們將目前這個 path 所看到的畫面切割成 8 x 8個方塊,
又因為每個 patch 都可以看到一個切割成 8 x 8 個方塊的畫面,
且透過之前將 form factor 簡化的方式,如此一來,對於每個 patch i 和 patch j 來說,
因為 form factor 只要是被兩 patch 之間的距離和兩 patch 的面積所影響,
patch i 所看到方塊 (0, 0) 傳過來的能量比例跟 patch j 所看到方塊 (0, 0) 傳過來的相同,
所以少去了每個 patch 都要重新計算 form factor 的情形
[三] pseudo code
Step 1: Divide each face into many patches (squares)
把每一個面分成多個小方塊應該不難吧
Step 2: Calculate the form factor of all patches
由上面的想法可以知道,只要計算一次就好
Step 3: Calculate the color with form factor
將所看到的畫面中所有方塊的顏色乘以該方塊的 form factor
再加上目前 patch 的顏色後平均即為能量傳遞一次的新顏色
Step 4: Interpolation of adjacent patches
因為這樣出來的情形是一格一格的,所以對相鄰的兩個 patch 做 interpolate
來模糊格子之間的邊界,但是範例中是去用貼圖幫我模糊掉的
將所看到的畫面中所有方塊的顏色乘以該方塊的 form factor
再加上目前 patch 的顏色後平均即為能量傳遞一次的新顏色
Step 4: Interpolation of adjacent patches
因為這樣出來的情形是一格一格的,所以對相鄰的兩個 patch 做 interpolate
來模糊格子之間的邊界,但是範例中是去用貼圖幫我模糊掉的
[四] 後記
因為不好解釋,所以附上程式碼,有參考其他人做得之後再做過修改