IBL再び – 2
必要な物を一通り作り終わって,基本的な部分は動きました. 予想よりも速度低下が防げて,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に分があります.