プロジェクト

プロフィール

ヘルプ

タスク #40

完了

MMD互換シェーダーでセルフシャドウオフの材質の色が違う

みょうじ さんが約4年前に追加. 約4年前に更新.

ステータス:
終了
優先度:
通常
担当者:
カテゴリ:
描画関係
対象バージョン:

説明

現象

セルフシャドウオフの材質の陰影が薄い。

原因

MMDシェーダーの分岐の最大の罠は、セルフシャドウオフというものの扱い。

  • セルフシャドウオフ材質
  • セルフシャドウなしモード

この二つが混在していて、モード1かモード2の場合は必ずobject_ssのパスが処理される。 そして

if ( any( saturate(TransTexCoord) != TransTexCoord ) )

このセルフシャドウ処理の部分には、セルフシャドウオフの材質は入ってこないようになっている。

今回のバグはこのanyの処理への分岐フローの解釈ミスによる。

修正方法

信じがたいことではあるものの、anyの処理分岐の部分で恐らくMMDはセルフシャドウオフの材質は条件を満たせないようなZ値を渡して来ている。 このフローを g_shadowRecvEnabled を使って再構築する。


ファイル

mmd.hlsl (17.3 KB) mmd.hlsl 修正ファイル最新版 みょうじ, 2020/04/16 11:41

他の形式にエクスポート: Atom PDF