プロジェクト

プロフィール

ヘルプ

タスク #120

未完了

[調査] CSM(Cascading Shadow Maps)のブラッシュアップ用情報

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

ステータス:
進行中
優先度:
低め
担当者:
カテゴリ:
調査
対象バージョン:

説明

概要

一口にCSMと言っても分割の方法によっていろいろな方法がある。

実装の単純さと扱いやすさ的に、現状のExcellentShadowと同じ方式(中央を一致させて距離を変える)は安心感が強いが、何か方式的弱さが見つかった場合に改良する場合のメモをここにまとめる。

基本

http://dev.theomader.com/cascaded-shadow-mapping-1/ http://dev.theomader.com/cascaded-shadow-mapping-2/

視錐台距離方向の分割の方式の場合の簡単な実装の例。

一般的には Pallaler-Split-Shadow-Maps と呼ばれる。(ray-mmdで使われているのもこの方式)

基本的には分割アルゴリズム + シャドウマップ生成アルゴリズム の組み合わせで実装が変化する。


ファイル

カスケードの境界がずれる.png (1.16 MB) カスケードの境界がずれる.png 問題のある状態 みょうじ, 2020/12/04 19:16
カスケードの境界がずれる改善?.png (1.17 MB) カスケードの境界がずれる改善?.png 改善を試みた状態 みょうじ, 2020/12/04 19:16
改善させたシェーダーコード.zip (6.67 KB) 改善させたシェーダーコード.zip 改善コード みょうじ, 2020/12/04 19:23
ソフトシャドウ改善.zip (6.71 KB) ソフトシャドウ改善.zip 新版 みょうじ, 2020/12/04 21:03
SlopeScaleBias改良.zip (6.7 KB) SlopeScaleBias改良.zip みょうじ, 2020/12/09 23:51
ソフトシャドウFix.zip (6.96 KB) ソフトシャドウFix.zip ソフトシャドウ用追加実装 みょうじ, 2020/12/12 00:43

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

カスケードの境界がずれる問題への対応を実験。

現状の問題はアドホックな係数でのバイアス計算による。

問題のある状態

そこを g_lightRange から計算するように修正してみる。

g_lightRange は2の乗数ということなので、log2()を取った結果を利用してみた結果。

改善を試みた状態

あとはこの境界をうまくフェードできればよいが、現状のシェーダーのアルゴリズムでそれを実現するのが少し難易度が高い。

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

上記の改善を適用したシェーダーコードを添付。

変更点

  • mmd.hlsli への g_lightRange の log2() の計算を追加。
  • mmd.hlsl のVSでのバイアス計算で上記値を利用するように変更。

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

ソフトシャドウ時のアドホック対応を追加。

これも本来はもう少し正しい考慮が必要と思う。

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

  • Slope Scale Biasの実装。
  • ソフトシャドウ利用時にぼかし幅が違うことにより境界が目立つことにぼかし幅を合わせることで対応してみるテスト。

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

  • 対象バージョンINBOX から プロダクトバックログ に変更

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