2011-06-29 12 views
0

この質問は実際にはUnity3Dの問題ですが、より一般的な質問かもしれませんので、私はこの質問を一般的なものとして考えていきます。オブジェクトのカリングを無効にする

シーンがcamera (near = 0.3, far = 1000, fov = 60)で、スカイドームを半径10000単位で描画したいとします。

私はドームの中にいるので、オブジェクトはカメラの錐台によって淘汰されません。しかし、頂点は何とかいくつかのシェーダによって淘汰し、最終結果はこのようになりますされています

My clipped skydome

今私の質問は:私はそれを確認するために変更することができます任意のエンジンのためにどのような設定

完全なオブジェクトが描画され、カメラの遠方の平面でクリップされませんか?

私は何をしたくないことは次のとおりです。

  • 変更は10000はるかに飛行機、それは
  • 変更近い平面錐台はあまり正確で作るので、私のゲームは非常に実際にあるので、低規模
  • 変更ドームの規模、この設定は非常に現実的に見えるので

答えて

1

私はユニティではなく、DirectXの中でこれを実行する方法がわからないと、 OpenGLでは、zbuffer(チェックと書き込みの両方)をオフにして、skyboxを最初に描画します。

次に、zバッファをオンにして残りのシーンを描画します。

My guess is that Unity can do all this for you.

+0

研究をいただきありがとうございます。 Unityは静的なskyboxを使用しますが、もちろん私のものは動的です。おそらくユニティで唯一の解決策が見つかりました。あなたはzbufferingについて正しいので、+1です。私はもう少し詳しく自分のソリューションを投稿します。 – Marnix

0

私は私自身の問題のための2つのソリューションを持っています。最初のものはすべてを解決するわけではありません。第二はそうしますが、私自身の設計原則に反します。

シェイダーのz書き込みを変更する可能性はありませんでした。これは@Ernoの素晴らしい解決策です。使用したシェーダーはサードパーティ製であるためです。

オプション1

オブジェクトがレンダリングされる直前に、100,000はるかに平面を設定し、空を描いた後、戻って1000年にそれを設定します。

問題:深度バッファには、依然として非常に低い値から100,000までの値が入ります。これにより深度バッファの精度が低下し、深度バッファに依存するz戦闘およびポストエフェクトに問題が生じます。

オプション2

お互いにリンクされた2台のカメラを作成します。カメラ1は、スカイプームを最初にfar = 100000, near = 100の設定でレンダリングします。カメラ2はデプスバッファをクリアし、シーンの残りの部分をfar = 1000, near = 0.3の設定で描画します。深度バッファに大きな値が含まれていないため、不正確な深度バッファの問題が解決されます。

問題:カメラクラスに変更イベントがないため(FoVが変更されたなど)、カメラをいくつかのポーリングシステムでリンクする必要があります。私はカメラが1つしかないのが好きですが、これはかなり簡単には不可能と思われます。

+1

オプション1はまだアーティファクトを引き起こしており、オプション2は余分なパスを必要とするが、正しいシェーダは非常に高速で正確であるため、他のシェーダを使用するか、またはそれらを変更することを強くお勧めします。 –

+0

@Ernoそれは本当ですが、私はサードパーティの会社に確認し、彼らがこの問題についてどのように考えるかを見ていきます。 – Marnix

関連する問題