球諧函式在影視cg中的應用方法?

時間 2021-05-30 03:03:35

1樓:叛逆者

影視cg裡用SH,和遊戲裡用的沒什麼區別。當然,我指的是Halo級別的遊戲,不是最簡單的diffuse PRT。基本概念就是,用3階甚至更高的SH來表達光源和表面,用lightmap讓表面每個點都有個SH。

在這種情況下,可以實現per pixel的PRT,並可以用normal map等常用渲染方法。具體可見 http://www.

ppsloan.org/publications/NMPRT.pdf

。其實這個方法已經10年了,但以前做電影的人不信任SH,覺得那個效果不夠好。直到阿凡達的渲染器PantaRay。

Weta如果不用這個方法,估計得晚幾年才能渲染完成。PantaRay裡面對於一些金屬材質完全託付給SH,雖然比不上全都用ray tracing的質量,但如果不兩張圖切換對比,人眼看不出毛病。

至於要在3dsmax裡用,可能只能自己寫外掛程式了。

2樓:Belleve

某一點發出/收到的光線分布是乙個方向的函式。函式這玩意啊,不好存,怎辦呢?

把它分解成一組「基礎函式」的和就行了:,其中「基組」要滿足正交歸一性,。

而 SH 函式就是球面上任意平方可積函式的正交歸一基底(這裡的上標不是指數……)。任何平方可積的函式(「光照」)都可以用下面的算式來得到它的 SH 展開:

= \sum_^\sum_^ \left\left|Y_l^m\right>" eeimg="1"/>

然後這有什麼用呢?對了渲染方程的反射項不是這麼寫的麼(省略掉位置引數 x):

假定漫反射各向同性的情況下,L 將是乙個標量,BRDF 因子就可以和內積內積合併成乙個新的、只關乎的函式 V。換用狄拉克符號就得到:" eeimg="1"/>,其中的 I 只和直射光有關,V 只和物體形狀有關,把它們分解成 SH 之後得到:

" eeimg="1"/>

哦對了你還記得球諧函式正交歸一性麼?於是 L 就可以簡化成:

於是就可以直接查表求和計算了,世界,清淨了。

在python中的randrange函式和uniform函式的區別是什麼?

無關風月 函式簽名說的已經比較清楚了啊 In 7 random.randrange?Signature random.randrange start,stop None,step 1,int maxwidth 9007199254740992L Docstring Choose a random i...

在不同的gcc版本中,函式傳入指標,在函式執行結束後列印指標指向值會有不同嗎?

SPeak int plusOne int digits int digitsSize int returnSize c int plusOne int digits int digitsSize int returnSize cpp int plusOne int digits int digit...

在C 中如何實現復合多個函式的高階函式

guohc FuncCombinator的引數不固定所以只能傳入delegate的陣列。static void Main string args static Func FuncCombinator Delegate da TResult result TResult param return re...