2

モデルとアニメーションの保存と読み込みについて話します。これはゲームエンジンに適しています。

1-モデルごとにメッシュとボーンを作成します。両方とも同じファイルにあり、各ボーンシステムには10〜15のアニメーションがあります。(したがって、各モデルには独自のアニメーションがあります)

2-メッシュが多く、ボーンの数が少ないが、ファイルが互いに分離されており、同じボーン(アニメーションも)を複数のメッシュに使用でき、各ボーンセットに多くのアニメーションを含めることができます。(この場合、同じボーンセットと同じアニメーションを使用すると、一意性が失われることに注意してください)。

そして今、各フレームで120〜150のモデルを表示する必要がある場合(GPUによってアニメーション化およびスキン化)、そのうちの40は同じタイプである方が良いです:

1-タイプごとに1つのモデルしか必要ない場合でも、ゲーム内のすべてのモデルにインスタンス化システムを使用します。

2-モデルのインスタンス化が必要なものを検出し(モデルが2回以上繰り返される場合)、異なるレンダリングシステム(他のシェーダープログラム)を使用し、他のモデルには非インスタンス化を使用します。

3-この数のモデルでは「ゲイン」が非常に低くなるため、インスタンス化を使用しないでください。

ここで説明するすべての「モデル」はアニメーションモデルです。現在、GPUスキニングを使用してMD5ファイルを使用していますが、インスタンス化は行っていません。アニメーション化のすべてのプロセスを実行するためのより良い方法があるかどうかを知っています。

誰かが良いチュートリアルを知っているか、私を途中で連れて行くことができるなら...補間されたスケルトンを作成してインスタンス化を使用する方法がわかりません。説明させてください。

単純なテクスチャですべてのフレームのすべてのアニメーションのすべてのボーン変換(行列)を圧縮して頂点シェーダーに送信し、各モデルの各頂点について、それぞれのアニメーション/フレーム変換を読み取ることができます。これは問題ありません。同じモデルタイプに対して常に同じデータを送信するため、ここでインスタンス化を使用できますが、補間スケルトンを使用する必要がある場合は、頂点シェーダーでもこの補間を実行する必要がありますか?(テクスチャからの負荷が増えると、パフォーマンスが低下する可能性があります)。とにかく、CPUで補間されたスケルトンを計算する必要があります。これは、衝突のために必要だからです...

解決策/アイデアはありますか?

  • DirectXを使用していますが、これは他のシステムにも当てはまると思います

=>今、私は最初の質問に対する答えが必要です、2番目解決されます(しかし、誰かが他の提案をしたい場合は大丈夫です)

4

1 に答える 1

2

私が思いつく最も良い例は、私が個人的に使用したもので、NVidia の Skinned Instancing です。この例では、同じボーン メッシュの多数のインスタンスをレンダリングする方法について説明します。コードとホワイトペーパーも利用可能です:)

NVidiaによるスキンインスタンス化

于 2013-03-14T04:58:18.080 に答える