Gregory Igehy

Dancing at hemisphere coordinate

Notes of precomputed lighting scenerios and level streaming

Notes of Capsule Shadow in UE4

コマンド

  • r.CapsuleShadows : Default 1
    • Whether to allow capsule shadowing on skinned components with bCastCapsuleDirectShadow or bCastCapsuleIndirectShadow enabled.
    • カプセルシャドウを有効・無効にする
  • r.CapsuleShadowsFullResolution : Default 0
    • Whether to compute capsule shadows at full resolution.
    • フル解像度でカプセルシャドウを計算するかどうか ?
  • r.CapsuleMaxDirectOcclusionDistance : Default 400.0
    • Maximum cast distance for direct shadows from capsules. This has a big impact on performance.
    • カプセルの Direct Shadow の最大のキャストの距離, 処理に大きく影響する
  • r.CapsuleMaxIndirectOcclusionDistance : Default 200.0
    • Maximum cast distance for indirect shadows from capsules. This has a big impact on performance.
    • カプセルの Indirect Shadow の最大のキャストの距離, 処理に大きく影響する
  • r.CapsuleShadowFadeAngleFromVertical : Default 1.047198
    • Angle from vertical up to start fading out the indirect shadow, to avoid self shadowing artifacts.
    • Indirect Shadow のフェードを開始する真上の垂直方向の角度, セルフシャドウのアーティファクトの回避用
  • r.CapsuleMinSkyAngle : Default 15.0
    • Minimum light source angle derived from the precomputed unoccluded sky vector (stationary skylight present)
    • Stationary のスカイライトがある状態で, 事前計算した空の Bent Normal からライトの角度(立体角?)を求める際の最小値
  • r.CapsuleSkyAngleScale : Default 0.6
    • Scales the light source angle derived from the precomputed unoccluded sky vector (stationary skylight present)
    • Stationary のスカイライトがある状態で, 事前計算した空の Bent Normal から計算したライトの角度(立体角?)のスケール
  • r.CapsuleIndirectConeAngle : Default 0.392699
    • Light source angle used when the indirect shadow direction is derived from precomputed indirect lighting (no stationary skylight present)
    • Stationary のスカイライトがない状態で, 事前計算の間接光を使って Indirect Shadow を求めるときのライトの光源の角度

その他

  • スケルタルメッシュ側での設定

f:id:gregory-igehy:20180104022351j:plain

  • デプスシャドウがじゃまなときには, ディレクショナルライトの Cascaded Shadow Maps の Num Dynamic Shadow Cascades を 0 にする

f:id:gregory-igehy:20180104013258j:plain

  • カプセルシャドウに使う Physics Assets はスケルタルメッシュの「Lighting」に設定する

f:id:gregory-igehy:20180104013352j:plain

描画パスについて

  • Direct Shadow と Indirect Shadow で描画パスの場所が違う
  • Direct Shadow が有効のときにはディレクショナルライトのパスの中でカプセルシャドウの処理をする
    • Lights -> ShadowedLights -> ShadowProjectionOnOpaque -> CapsuleShadows

f:id:gregory-igehy:20180104014120j:plain

  • Indirect Shadow が有効のときには, IndirectCapsuleShadow という別のパスができる

f:id:gregory-igehy:20180104014542j:plain

負荷の簡易比較

ディレクショナルライトのデプスシャドウなし, カプセルシャドウなし

f:id:gregory-igehy:20180104024308j:plain

ディレクショナルライトのデプスシャドウなし, カプセルシャドウ(Direct Shadow 有効, Indirect Shadow 無効)

f:id:gregory-igehy:20180104024345j:plain

ディレクショナルライトのデプスシャドウあり, カプセルシャドウなし

f:id:gregory-igehy:20180104024409j:plain

2 体の場合

  • コンピュートシェーダなので, GPU 処理は増えるがドローコールが増えるわけではない
  • 下は順に Indirect shadow と Direct shadow の場合

f:id:gregory-igehy:20180104040331j:plain
f:id:gregory-igehy:20180104040319j:plain

Notes of UE4 Shader dev

  • マテリアルのシェーダコードを書き換えて, 適用をすればすぐに反映される
  • r.ShaderDevelopmentMode 0: Default, 1: Enable various shader development utilities, such as the ability to retry on failed shader compile, and extra logging as shaders are compiled. 有効にした方が、ログが出たりコンパイル失敗時に試しやすい
  • CTRL + SHIFT + ピリオド でフルコンパイル

Matt hoffmanさんの UE4 のシェーダのブログのメモ

Part1

f:id:gregory-igehy:20180108184246j:plain

  • r.ShaderDevelopmentMode=1 : シェーダノビルドエラーのときに Editor の再起動が不要
  • RenderDoc でデバッグする場合 : r.Shaders.Optimize=0 and r.Shaders.KeepDebugInfo=1
  • シェーダの並列コンパイル : BaseEngine.ini の [DevOptions.Shaders]

の bAllowCompilingThroughWorker=True, and bAllowAsynchronousShaderCompiling=True

  • シェーダのフルコンパイル: 125 の組み込みシェーダ, ~10000 の組み合わせ, 10 分ぐらい

Part2

Part3, Part4

Part5

  • 変更されたシェーダだけリコンパイル(グローバルシェーダも含む) : recompileshaders changed
  • グローバルシェーダを全リコンパイル : recompileshaders global
  • シェーダを全てリコンパイル : recompileshaders all
  • 指定したパスのシェーダをコンパイル : recompileshaders /Engine/Private/BasePassPixelShaders.usf や recompileshaders /Engine/Private/DeferredLightingPixelShaders.usf とやる
  • 最初に見つかるマテリアルをコンパイル : recompileshaders material マテリアル名
  • ConsoleVariables.ini に r.ForceDebugViewModes=2 を追加すると, 可視化が使えないけどバリエーションが減る
  • Quality や Static switches でシェーダバリエーションが増える
  • シェーダによる最適化をスキップしたい場合 : ShaderCompiler.cpp でInput.Environment.CompilerFlags.Add(CFLAG_StandardOptimization);

UE4 の Movable/Stationary のデプスシャドウの違い

Movable

  • デプスシャドウのパスでは、カスケードごとに影を落とす形状を書き込む

f:id:gregory-igehy:20180114220057j:plain

  • デプスシャドウのマスクを作るためにLights->DirectLighting->ShadowedLights->ShadowProjectionOnOpaque でスクリーンスペースでデプスシャドウを参照して作り, それを参照してライトをマスクする

f:id:gregory-igehy:20180114220336j:plain

Stationary

  • デプスシャドウのパスでは, Movable な Actor のメッシュをアトラス上に重ならないように書き込む

f:id:gregory-igehy:20180114220522j:plain

  • デプスシャドウのマスクを作るために、バウンディングボックス形状を塗って 上のアトラス or LightMass で作成したシャドウマスクを参照して書き込みを行う

f:id:gregory-igehy:20180114220628j:plain