EffekseerがUnity5.5β環境で描画がおかしくなるという報告がありました。
報告によるとデプスバッファの仕様変更が影響しているんじゃないかとのこと。
Coming in Unity 5.5 : reversed depth buffer, finally! Far greater precision for shadows and post-process. pic.twitter.com/IUp8yfe54v
— Tim Soret (@timsoret) 2016年8月23日
どうやら5.5からの仕様変更のようです。
逆floatアルゴリズムによって影の品質が改善するとか。
影響があるプラットフォーム
- Windows DirectX11
- Windows DirectX12
- macOS/iOS Metal
- PS4
影響があるケース
- ポストエフェクト等でデプスバッファを使っている
- ネイティブプラグインで描画している
ポストエフェクト等でデプスバッファを使っている
SAMPLE_DEPTH_TEXTURE で生のデプス値を使っている場合は対策が必要です。
UNITY_REVERSED_Z というシェーダ定義が追加されたそうなので、以下のようにプリプロセッサ分岐してやるのがよさそうです。
#if defined(UNITY_REVERSED_Z)
o.pos.z -= _MotionVectorDepthBias * o.pos.w;
#else
o.pos.z += _MotionVectorDepthBias * o.pos.w;
#endif
ネイティブプラグインで描画している
普通に描画していても、デプステストは大体していると思うので対策必須です。
Unityバージョンとグラフィックスデバイスタイプを見て、デプステストのDepthFuncを切り替えましょう。
if (unityReversedZ) {
depthFunc = D3D11_COMPARISON_GREATER;
} else {
depthFunc = D3D11_COMPARISON_LESS;
}