Open6

UnityのZファイティング問題メモ

ppengotsuppengotsu

Zファイティングは、ほぼ等しい場所に面を重ねて表示しようとすると、どちらをレンダリングするかわからず、毎フレーム、ほぼランダムで表示される面がいれかわる現象。

ppengotsuppengotsu

カメラから近いところにオブジェクトを置いている場合

解決方法は、

  • 面を0.00001でもいいのでずらす
  • 片方の面のマテリアルのシェーダーでoffset -1 ,-1 を追加し、どちらが手前かを明示する

という方法がある

ppengotsuppengotsu

カメラから遠いところにオブジェクトを置いている場合

プラットフォームにもよるとおもうが、座標を200以上にする場合、Androidだと発生した。

これの解決は、すごくめんどくさく、近いところに置いていた方法は使えない可能性が高い。

原因は、カメラから極端に遠いと、座標数値の精度が足りなくなるからだと思われる。
カメラ近くにすると発生しない。
また、Unity上では面と面は十分に離れている(1メートル以上?)ようにみえる数値でも、カメラから遠いとおきる

解決方法は

  • カメラのnear、farの間の数値をできるだけ少なくする
    • とくにnearは0.01 を1にするだけで、劇的になおることが確認できている

なぜ、nearの少しの変化で治ったかわかっていない。
farの変化に対して、nearの変化量の方が変換量に対して効果が大きいか不明