Unity5.5でデプスバッファのnearとfarが入れ替わった話
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;
}
Author And Source
この問題について(Unity5.5でデプスバッファのnearとfarが入れ替わった話), 我々は、より多くの情報をここで見つけました https://qiita.com/ueshita/items/eb0800ea89a193b4b794著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .