プロジェクト

プロフィール

ヘルプ

タスク #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

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

なんとMMDのトゥーンテクスチャの参照は、法線と光源の内積を0~1にクランプせずに利用していた。 これにより色が変化していたことが判明。

よって修正の方向性を変更し、MMD同様にクランプしない法線と光源の内積から計算するように修正。

ついでに #39 の修正をマージ。 ※この対応もセルフシャドウなしの場合にミスがあったので修正して導入。

猫のしもべ さんが約4年前に更新

  • ステータス進行中 から 確認待ち に変更

更新履歴 commit:faeb8c0df517f44a1ed395ab2eee7f2611e0a063 で適用されました。

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

  • ステータス確認待ち から 終了 に変更

確認完了

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