タスク #40
完了MMD互換シェーダーでセルフシャドウオフの材質の色が違う
説明
現象¶
セルフシャドウオフの材質の陰影が薄い。
原因¶
MMDシェーダーの分岐の最大の罠は、セルフシャドウオフというものの扱い。
- セルフシャドウオフ材質
- セルフシャドウなしモード
この二つが混在していて、モード1かモード2の場合は必ずobject_ssのパスが処理される。 そして
if ( any( saturate(TransTexCoord) != TransTexCoord ) )
このセルフシャドウ処理の部分には、セルフシャドウオフの材質は入ってこないようになっている。
今回のバグはこのanyの処理への分岐フローの解釈ミスによる。
修正方法¶
信じがたいことではあるものの、anyの処理分岐の部分で恐らくMMDはセルフシャドウオフの材質は条件を満たせないようなZ値を渡して来ている。 このフローを g_shadowRecvEnabled を使って再構築する。
ファイル