21
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unity5.5でデプスバッファのnearとfarが入れ替わった話

Last updated at Posted at 2016-09-25

EffekseerがUnity5.5β環境で描画がおかしくなるという報告がありました。

unity.png

報告によるとデプスバッファの仕様変更が影響しているんじゃないかとのこと。

どうやら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;
}
21
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?