9

Oblivion(および他のゲーム、確かに、十分にプレイしていない)に見られるようなテクノロジーの背後にある基本的な前提は何ですか?遠くからオブジェクトを遠くから見ると漠然と表示されますか?たとえば、大きな塔が1マイル離れていると、その漠然とした長方形が地平線から突き出ているのがわかります...明らかに、巨大な3Dシーンをすべてレンダリングできるわけではなく、高さマップの場合は近似アルゴリズムしかないことを私は知っています。これは、カメラから離れた高さマップの品質を下げるために使用されますが、特定のオブジェクトの場合、それらを表示するための最良の方法は何ですか?

風景の周りの特定の場所を選び、その場所の周りにすべてのハイトマップと3Dモデルを描画して写真を撮るプログラムを作成する、事前レンダリング手法を考えていました。何枚か写真を撮り、プレーヤーがその場所の近くにいると、その写真はスカイボックスとして使用されます。

もう1つのより明白な手法は、非常にラフな3Dモデルを保存することですが、3Dレンダリングシステムは、他のそれほど重要ではない(そしておそらくそこからは見えない)ラフモデルではなく、建物のラフモデルをレンダリングすることを具体的にどのように選択しますか?距離)オブジェクト?そのようなものをハイトマップと一緒にどのように保存しますか?おそらく設計上、そのような重要なランドマークをいくつかだけ持って、それらのリストを小さなファイルに保存し、各フレームでx未満のランドマークを実際に遠くにレンダリングしますか?

Haloシリーズはゲームをレベルに分割することを選択し、各レベルには異なる手作りのスカイボックスがあることを私は知っています。これは私が最初の提案で目指していたようなものですが、それについてはよくわかりません。限られた時間と知識でプロトタイプを作成できるように、他のアイデアやアイデアの改良点や問題を収集しようとしているだけだと思います。

もう1つの関連トピックは、山を遠くに表示する方法です。山は高さマップの一部であり、その上に3Dモデルがないため、大まかなバージョンを作成することはできず、高さマップ近似アルゴリズムが失敗する可能性があります。そのような非常に遠い距離から山を登ります(おそらくそうしないであろう、そのような遠いジオメトリを近似してレンダリングしようとさえすると仮定します)。あなたがあなたの答えでもこれをカバーするならば、ボーナスポイント。:)

ありがとう!

PS私はOpenGLを使用しています。基本的な概念を探していますが、サンプルコードを投稿する場合は、OpenGL関数と用語を使用してください。:)

編集:答えてくれてありがとう!ドキュメントの目的で、私が見つけた別のリソースがあります。ゲームプログラミングGems 2の第4.9章では、遠くの風景をスカイボックスにレンダリングする概念について説明しています。http://books.google.com/books?id=1-NfBElV97IC&lpg=PA416&ots=SOpnfijZly&dq = render%20distant%20to%20skybox&pg = PA416 (残念ながら、そのプレビューは章の最初のページにすぎません... 8月に戻ったらすぐに、大学のライブラリからその本を入手する必要があります)

また、これらのことを読んだ後でも、LODはまだかなり近い距離にあるオブジェクト用であると私は考えています。オブジェクトのサイズが1ピクセルでもない場合でも、オブジェクトをグラフィックカードにフィードしている場合は、LODを使用しているかどうかに関係なく、電力を浪費しているだけです。そして、それは絶対的に最大の遠方のオブジェクト以外のすべてに当てはまります。ほとんどの場合、いくつかの高い建物といくつかの山がありますが、細部のモデル(茂み、木、岩、その他の風景など)は、このような距離からは見えません。ですから、スカイボックスへのレンダリング手法が好きです。この橋に着いたら、それを渡ります。すべてのモデルにLODを使用するようにしますが、そのような距離はレンダリングしません。

ちなみに、私はOblivionゲームの方針に沿って考えているので、答えはゲームのジャンルによって異なる場合があります。

4

8 に答える 8

7

これがあなたが探している詳細レベル (LOD)だと思います

于 2009-06-18T16:25:52.230 に答える
7

あなたが言及したものを含むいくつかのテクニック:

  • 詳細度。上記の概要。
  • ミップマッピング。テクスチャ用。
  • 視野。適切なズーム レベルを選択して、カメラが「見える」ものの数を制限します。視錐台カリングも参照してください。
  • ファー クリッピング プレーン。遠くの場所の遮蔽: ほとんどのゲームでは、霧、山、またはその他の言い訳を使用して、見える距離を厳密に制限しています。これは、オクツリーまたはその他のそのような手法を使用して実装できます。これは、オブジェクト全体、ポリゴンなどに基づいている可能性があり、通常は前述の山のすぐ後ろで発生するように設定されています。
  • アリーナ/レベル/エリア/その他 -- 繰り返しますが、ほとんどのゲームでは、一度に 1 つのアリーナでプレイするよう人為的に制限されています。利点は明らかです(他のすべてのアリーナのオブジェクトを無視できます)
  • 事前レンダリング - これはあなたが上で提案しているものです。遠く離れた静的なシーンの場合、シーンを「典型的な」ビューでレンダリングし、背景のテクスチャにするか、スカイボックス/反射マップなどに使用します.

ユーザーが気づき始める前に、可能な限り多くの詳細を破棄するという考え方です。

これらのことを自動的に行う既存のツールキットが多数ありますが、費用がかかる傾向があります。本格的なアプリを検討している場合は、少なくとも含まれているソリューションを調査することをお勧めします.

于 2009-06-18T17:43:34.070 に答える
4

3D モデルの場合、この手法は詳細レベルと呼ばれます。基本的に、複数のバージョンのモデルが利用可能であり、コンテキストに基づいて適切なモデルが使用されます。必ずしも距離だけではなく、他の状況でフレームレートを維持するためにも使用できます。

ただし、ミップマッピングを有効にする必要があります。有効にしないと、低解像度モデルの大きなテクスチャでキラキラしてしまい、アニメーションに注意してください。アニメートするスケルトンの下でモデルを切り替えるのは難しいので、モデルを LOD する場合でも同じスケルトンを維持するのが 1 つのテクニックです。

地形とオブジェクト モデルの両方に動的 LOD システムがありますが、これらは CPU 負荷が高くなる可能性があります。

于 2009-06-18T16:28:04.677 に答える
0

モデルの詳細度の低いバージョンは、車両やオブジェクトに特に適しています。地形では非常に注意が必要です。バトルゾーン系のゲームやPCのフライトシミュレーターを手がけてきました。少しの霧は、細部の間の「ポップ」を隠すのに役立ちます.

細部では、テクスチャ マッピングは多くの場合、いくつかの単色ポリゴンに置き換えられます。


「別のより明白な手法は、本当にラフな 3D モデルを保存することですが、3D レンダリング システムは、建物のラフなモデルをレンダリングすることを具体的にどのように選択するのでしょうか。 -distance) オブジェクト?ハイトマップと一緒にそのようなものをどのように保存しますか?"

地形をグリッド化し、各グリッド セルに表示されるオブジェクトのリストを保持できます。

于 2009-06-18T16:54:41.513 に答える
0

1 つの手法は LOD (詳細レベル) です。オブジェクトがカメラから遠いほど、描画される三角形は少なくなります。ここにリンクがあります: http://www.stefan-krause.com/

于 2009-06-18T16:25:16.097 に答える
0

地形を処理する 1 つの方法は、複数解像度のタイルを使用することです。Virtual Earth や Google マップと同じように、再帰的に世界をタイルに分割します。したがって、レベル 0 には 4 つのタイル、レベル 1 には 16 のタイルがあります。次に、何らかの LoD アルゴリズムを使用してズーム/スケールを決定し、特定の領域に適切な地形タイルをロードします。

于 2009-06-18T17:54:13.117 に答える
0

事前にレンダリングされた遠くのオブジェクトのビューを動的にキャッシュする手法は、通常、「インポスター」と呼ばれます。これは、このテーマに関する古い Game Programming Gems の本の記事です。

ハイトマップ テレインの詳細レベルを処理する方法は多数あります。いくつかの一般的なテクニックの概要については、vterrain.org をご覧ください。一般的な原則はほとんどのバリアントで同じです - 地形をセクションに分割し、低解像度のジオメトリとテクスチャを遠くに使用します - しかし詳細は異なります.

グラフィックス カードに送信されるオブジェクトの数を減らすために、通常、ある種の可視性カリングが実装されます。最も単純な場合、これは境界球がスクリーン ピクセルの特定のしきい値よりも少ない範囲をカバーするモデルを完全にドロップすることです (LOD システムがある場合は、使用する LOD を選択するときにとにかくこれを計算します)。効率を高めるために、カリングのためのある種の階層空間データ構造を使用することができます - 四分木または八分木、球体ツリー、ポータルシステム (一般的に屋外環境ではあまり使用されません)、単純なグリッドベースのスキームなど。基本的な考え方は、作業を節約することです。階層内のより高いレベルのノードをカリングして、多くのリーフ ノードを見ることさえ避けます。

Oblivion のようなゲームの場合、おそらく何らかのオクルージョン カリングも行っています。つまり、他のオブジェクトの背後に隠れていると判断して、オブジェクトをグラフィックス ハードウェアに送信する前にカリングします。これを行うにはさまざまな手法があり、その中には非常に複雑なものもあります。

于 2009-07-16T21:41:55.837 に答える
0

遠くのオブジェクトのテクスチャにレンダリングできますが、パースペクティブがしきい値を超えて変化するたびにテクスチャを再レンダリングする必要があります。遠方の山の例のように遠近感が変わらない遠方のオブジェクトには最適ですが、ビューソースの移動が速すぎるか近すぎると、魚眼効果のようなものが得られます地震での空のレンダリングの初期。この種のシステムは、広大な距離を含む eve online のような世界に役立ちます。

もちろん、これは武器庫のもう 1 つのトリックであり、LOD もある程度必要です。

于 2009-06-18T16:45:47.040 に答える