OpenGL ES 2.0:VBOを使用していますか?


7

OpenGL VBO(頂点バッファーオブジェクト)は、OpenGL(私の場合はOpenGL ES 2.0)のパフォーマンスを向上させるために開発されました。ロジックは、VBOの助けを借りて、データをフレームごとにクライアントメモリからグラフィックスカードにコピーする必要がないことです。

しかし、私が見ると、ゲームシーンは絶えず変化しています。オブジェクトの位置が変化し、スケーリングと回転が変化し、アニメーション化され、爆発し、スポーンまたは消滅します。

コンピュータゲームシーンなどの非常に動的な環境で、VBOをフレームごとに構築する必要がある場合、VBO を使用する意味は何ですか。

コンピュータゲームでVBOを実際に活用する方法を理解するのを手伝っていただけませんか。より多くの頂点ベースのVBO(たとえば、1つのオブジェクトに1つ)があるか、または各描画サイクルに対して常に1つだけのVBOが存在している必要がありますか?

回答:


13

コンピュータゲームシーンなどの非常に動的な環境で、VBOをフレームごとに構築する必要がある場合、VBOを使用する意味は何ですか。

フレームごとにすべてのオブジェクトの頂点データを再構築している場合、それは間違っています。または、少なくとも、あなたはおそらくそれを非効率的に行っています。

シーン内のオブジェクトの移動は、頂点データを直接変更するのではなく、そのオブジェクトのレンダリングに使用されるワールド変換マトリックスを変更することで実行できます。スケルタルアニメーションにも完全にGPUソリューションがあります。分解可能なオブジェクトは、分解が必要になるまで一緒に表示されるように個別の変換行列を使用してレンダリングできます。その後、必要に応じて分割するように行列が調整されます。頂点データが前のフレームのカード上にある場合でも、非表示またはスポーンされていないオブジェクトはレンダリングする必要はありません。可視性が切り替わるたびにバッファーを破棄/再作成する必要はありません。

コンピュータゲームでVBOを実際に活用する方法を理解するのを手伝っていただけませんか。より多くの頂点ベースのVBO(たとえば、1つのオブジェクトに1つ)があるか、または各描画サイクルに対して常に1つだけのVBOが存在している必要がありますか?

複数の頂点バッファーを持つことができます。一般に、メッシュ/モデルごとに1つあり、独自のワールド変換行列を含むレンダリング可能なオブジェクトのコレクションで単一のメッシュ/モデルデータ構造を参照します。この方法で、すべて同じメッシュを使用する50人の敵がいる場合、そのメッシュはメモリ内に1回だけ必要です。次に、そのメッシュを参照し、各インスタンスをレンダリングするときに使用される一意のワールド変換を保持する50個の小さく軽量なインスタンス構造があります。


この詳細な回答の+1。シーンの構築と準備に注意を払わなければならないので、頂点の重複を避けます。この回答は承認された回答であるように見えますが、さらに役立つ回答が得られた場合は、しばらくお待ちください。
Bunkai.Satori

3

VBOはいくつでも持つことができます。各アニメーションフレームを1つのVBOに含めることも、アニメーション全体を1つのVBOに含めることもできます。頂点ごとのアニメーションを使用することもできます。これは同じデータで行われますが、頂点シェーダー(プログラム)で変換されます。

オブジェクトの位置、回転、またはスケールを変更しても、VBOは変更されず、変換行列のみが変更されます。

したがって、十分なメモリがある場合は、初期化フェーズですべてのデータをグラフィックスメモリに転送できます。


この回答の+1。私は現在いくつかの資料を研究していますが、あなたの答えは私に正しい方向を示しました。ありがとう。
Bunkai.Satori

「頂点ごとのアニメーション」は、通常、アニメーションロジックがシェーダーで実行されることを意味するのではなく、各頂点がアニメーション化するだけです-これはほとんどの場合に当てはまります。頂点ベースのキーフレームアニメーション(アニメーションの各フレームはメッシュの完全なコピーであり、それらの間でブレンドする)と骨格アニメーション(頂点が単純なボーン階層に重み付けされてアニメーション化される)を区別したいですか?どちらもCPUまたはGPUで実行できます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.