IBL再び – 2
by ますお
必要な物を一通り作り終わって,基本的な部分は動きました.
予想よりも速度低下が防げて,light shader一つで完結できるような形が作れたのでそれは良かったのですが,PRManのシェーダを書いている時に大きな問題が判明.
PRManはシェーダレベルでarea lightをサポートしていない!
surface shaderから呼ばれたlight shaderは光源毎に一度しか呼ばれず,light shader内でいくら複数サンプルを取っても,各サンプル毎にはsurface shaderに返らないのです.これは即ち,surface shader内でサンプル毎のlight vectorとlight color(RSLでは”L”と”Cl”)が取得できない訳で,BRDFが正しく評価できません.
いくつか回避策があるにはあるんですが,shading systemとしてはどれも気持ちが悪いし,既にあるsurface shader全てを修正しなければなりません.いずれにせよ,パイプライン的に深い部分での変更になるので,少し話し合いが必要そうです.
うーん,やっぱりPRManはhackに弱い.できない事が多いです.その分敷居を下げているのは分かりますが,もう少しlow levelへのフックも用意してくれると嬉しいんですけどね.
この辺の仕組みはmental rayに分があります.