Open6
UnityのZファイティング問題メモ
Zファイティングは、ほぼ等しい場所に面を重ねて表示しようとすると、どちらをレンダリングするかわからず、毎フレーム、ほぼランダムで表示される面がいれかわる現象。
カメラから近いところにオブジェクトを置いている場合
解決方法は、
- 面を0.00001でもいいのでずらす
- 片方の面のマテリアルのシェーダーでoffset -1 ,-1 を追加し、どちらが手前かを明示する
という方法がある
カメラから遠いところにオブジェクトを置いている場合
プラットフォームにもよるとおもうが、座標を200以上にする場合、Androidだと発生した。
これの解決は、すごくめんどくさく、近いところに置いていた方法は使えない可能性が高い。
原因は、カメラから極端に遠いと、座標数値の精度が足りなくなるからだと思われる。
カメラ近くにすると発生しない。
また、Unity上では面と面は十分に離れている(1メートル以上?)ようにみえる数値でも、カメラから遠いとおきる
解決方法は
- カメラのnear、farの間の数値をできるだけ少なくする
- とくにnearは0.01 を1にするだけで、劇的になおることが確認できている
なぜ、nearの少しの変化で治ったかわかっていない。
farの変化に対して、nearの変化量の方が変換量に対して効果が大きいか不明
farはレイヤーごとにかえられるようだ