質問

やあみんな、私は古いゲームから古い幾何学をレンダリングしています。彼らのクライアントにはいくつかのアルゴリズムがあり、どの領域が近くにあるかを見ることができましたが、私にはその能力がないので、不必要なポリゴンをculすることを検討しています。現在、視覚範囲でさえあるかどうかに関係なく、ゾーン全体ですべてのポリゴンをゾーン全体でレンダリングしています。明らかにこれは完全に非効率的です。私の質問:

どのタイプのcullingを使用して検索する必要があります。私は甲殻類ではなくポリゴンをcullすることができ、それはいくつかの負荷を緩和するのに役立ちますが、カメラから一定の距離のポリゴンをレンダリングしないことを選択することができますか?これは何と呼ばれていますか?また、いくつかの地域で霧を使用しています。同じ質問があります。霧の後ろにあるすべてのもの、見えない領域をすべてcullする方法を思いつくことができますか。

ありがとう:進行中のこの作品のスクリーンショット。一部の人々はそれを認識するかもしれません:)また、葉の醜い色を無視してください。私はアルファマスキングを説明していません。

画像: http://i.stack.imgur.com/duc2i.png

役に立ちましたか?

解決

考慮すべき2つの異なることがあります:あなたはそれを適切に見たいだけですか、すなわち、隠された表面除去?その後、単純な深度テストがジョブを行います。オーバーヘッドは、画面上でまったく作成されないジオメトリを処理することです。ただし、それが(非常に)古いゲームである場合、データを取得した場合、すべての資産を備えた完全なマップは、画面上の現代ゲームで見えるものよりもポリゴンが少ない可能性が非常に高いです。その場合、パフォーマンスの問題は実行されません。

パフォーマンスの問題に本当に遭遇した場合は、どのくらいの時間を費やしたいか、何が見えないかを判断し、実際にそれをレンダリングするバランスを見つける必要があります。 10年前、できるだけ多くのラスタリング時間を節約するために、ほぼピクセルに最適であることが依然として重要でした。現代のGPUには非常に多くのスペアパワーがあるため、レンダリングに含めるものを粗く選択するだけで十分です。

ただし、これらの計算は、OpenGLまたはその他の3DラスターAPI(Direct3Dなど)の範囲外に完全に外側にあります。それらのタスクは、洗練されたラスター化方法を使用して画面に三角形を描画するだけです。オブジェクト管理、より高いレベルの関数はありません。これを実装するのはあなた次第です。

典型的なアプローチは、空間区画構造を使用することです。最も人気があります KDツリー, オクトリースBSPツリー. 。 BSPツリーは空間的に非常に効率的ですが、計算が重いです。個人的には、シーンの動的な変化を追跡するために簡単に変更できるため、KDツリーとオクトリーのハイブリッド/組み合わせを好みます。 BSPツリーは、更新するのが非常に重いです(通常、完全な再計算が必要です)。

このような空間構造を考えると、ポイントが特定の関心地域にあるかどうかを判断するのは非常に簡単です。また、飛行機のような幾何学的制約によってツリー内のノードを選択することも非常に簡単です。これにより、粗い皮のcullingが非常に簡単になります。フラストムクリッピングプレーンを使用して、飛行機内のツリーからすべてのノードを選択します。 GPUの寿命を容易にするために、近くにノードを並べ替えたいと思うかもしれません。繰り返しますが、ツリーの構造は、ツリーを再帰的に並べ替えることができるため、そこに役立ち、ほぼ最適なO(n log(n))の複雑さをもたらすことができます。

レンダリングパフォーマンスを改善する必要がある場合は、ツリーによって定義された空間分割を使用して、(目に見えない)テストジオメトリを(目に見えない)レンダリングすることができます。 閉塞クエリ, 、テストされた境界によって制限されているサブツリーに再発する前に。

他のヒント

私は甲殻類ではなくポリゴンをcullすることができ、それはいくつかの負荷を緩和するのに役立ちますが、カメラから一定の距離のポリゴンをレンダリングしないことを選択することができますか?これは何と呼ばれていますか?

これはすでに自己のフラストムによって行われています。 FAR平面は、レンダリングされるオブジェクトにカメラ距離制限を設定します。

見て glfrustum.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top