7

3Dグラフィックスレンダリングの素朴な見方を考えると、ステレオ3Dレンダリングは開発者にとって本質的に透過的であり、グラフィックスハードウェアとドライバーの完全な機能である必要があるようです。OpenGLウィンドウがシーンを表示している場合は常に、ジオメトリ、照明、カメラ、テクスチャなどの情報を使用して、シーンの2D画像をレンダリングします。

シーンにステレオ3Dを追加することは、基本的に、元々1つあった場所に2つの横方向にオフセットされたカメラを使用することを意味し、他のすべてのシーン変数は同じままです。その場合の唯一の追加情報は、カメラを作成するためにどれだけ離れているか、およびそれらの中心光線を収束させるためにどれだけ離れているかです。これを考えると、GLコマンドシーケンスを取得し、ドライバーレベルで適切なコマンドをインターリーブして3Dレンダリングを駆動するのは簡単に思えます。

アプリケーションは、特別な3Dハードウェアアーキテクチャを利用するために特別に作成する必要があるようですが、実装が面倒で法外なものになっています。これがステレオ3D実装の未来になると期待するのでしょうか、それとも私はあまりにも多くの重要な詳細を理解しているのでしょうか。

私の特定のケースでは、.netOpenGLビューポートコントロールを使用しています。私は当初、ステレオ対応のハードウェアとドライバーを用意するだけで、ステレオ3Dを有効にできることを望んでいました。

4

2 に答える 2

6

あなたの仮定は間違っています。OpenGLは、「2D画像をレンダリングするために、ジオメトリ、照明カメラ、およびテクスチャ情報を取得する」ことはありません。OpenGLは、ステートマシンを操作するコマンドと、描画呼び出しを実行するコマンドを受け取ります。

誰も彼のコメントで言及していないように、コアプロファイルは変換についてもまったく気にしません。現在実際に提供されているのは、頂点シェーダーに任意のデータを提供する方法と、レンダリングを行うための任意の3Dキューブだけです。それが実際のビューに対応するかどうかにかかわらず、GLは気にしませんし、そうすべきでもありません。

念のために言っておきますが、ドライバーがビューとそうでないものを推測しようとすることがあることに気付いた人もいます。これは、自動ステレオレンダリングを行うときにnvidiaドライバーが行おうとすることです。これには、特定の推測作業が必要です。これは、ドライバーが正しく推測できるようにアルゴリズムを微調整するためのゲームレンダリングの実際の分析に相当します。したがって、これは通常、タイトルごとのドライバー内の変更です。また、一部の開発者は、ドライバーが間違った推測をする可能性があることに気づきました。それが発生すると、混乱し始めます。それらの質問のいくつかの直接の説明を参照してください。

カメラがどこを向くべきかについてさらにいくつかのポイントが得られるので、そのプレゼンテーションを読むことを強くお勧めします(2つのビュー方向が平行である必要があります)。

また、ビューに依存するすべてのものに対して、基本的に2倍のレンダリングコストがかかることがわかりました。一部の開発者(たとえば、Crytekの人を含む、パート2を参照)は、大部分は単一のレンダリングを実行し、追加のデータで画像をファッジして左目と右目の画像を生成できることを理解しました。ここで保存された作業の量は、開発者が自分でこれを行うために、それ自体で多くの価値があります。

于 2012-10-02T19:03:22.277 に答える
2

ステレオ3Dレンダリングは、残念ながら、カメラの横方向のオフセットを追加するよりも複雑です。

オリジナルの「モノラル」レンダリングされたフレームとデプスバッファからステレオ3Dを作成できます。シーン内の(実世界の)深度の範囲が与えられると、各値の深度バッファーは、対応するピクセルがどれだけ離れているかを示します。必要な目の分離値を指定すると、距離に応じて各ピクセルを左または右にスライドできます。だが...

平行軸ステレオ(オフセット非対称錐台)または2台のカメラが最終的に収束するステレオの「つま先」が必要ですか?後者の場合は、収束点を超えてジオメトリのビットが「反転」しないように、シーンごとにカメラアングルを微調整する必要があります。

視聴者に非常に近いオブジェクトの場合、左目と右目は同じオブジェクトのまったく異なる画像を表示します。左目はオブジェクトの片側を、右目は反対側を表示しますが、モノラルビューではこれらの画像が平均化されます。正面に出て。正確なステレオ3D画像が必要な場合は、実際にはさまざまな視点からレンダリングする必要があります。これは重要ですか?FPSシューティングゲーム、おそらくそうではありません。人間の手術訓練シミュレーター、あなたはそれがするに違いない。

視聴者が頭を片側に傾けて、片方の目がもう一方の目よりも高い場合にも、同様の問題が発生します。繰り返しますが、おそらくゲームにとっては重要ではなく、外科医にとっては本当に重要です。

ああ、シーンにアンチエイリアシングや透明性はありますか?これで、異なる深度の2つのピクセル値を実際に表すピクセルができました。アンチエイリアス処理されたピクセルを横に移動すると、「下」の色が変わったため、見た目が悪くなる可能性があります。ほぼ透明なピクセルを横に移動すると、後部のピクセルが移動しすぎます。

そして、あなたは照準クロスと同様のHUD要素で何をしますか?デプスバッファを無効にして描画した場合、デプスバッファの値によって数百メートル離れる可能性があります。

これらすべての潜在的な問題を考えると、OpenGLは、ステレオ3Dレンダリングをどのように行うべきかを賢明に言おうとはしません。私の経験では、ステレオでレンダリングするようにOpenGLプログラムを変更することは、最初にそれを書くよりもはるかに少ない労力です。

恥知らずな自己宣伝:これは http://cs.anu.edu.au/~Hugh.Fisher/3dteach/stereo3d-devel/index.htmlに役立つかもしれません

于 2012-10-04T05:15:20.700 に答える