GPUとCPUでのメッシュ操作


9

ちょっと気になります-CPUまたはシェーダーのどこでメッシュ操作を実行しますか?私はCPUですべてを行っており、友人がGPU側に物事を移動することを提案しました。

GPUでボーンアニメーションなどを実行している場合、どうやってメッシュを元に戻すのですか?(私は衝突検出をしているので...)

回答:


13

これは一般的にGPUで発生しますが、両方のトレードオフがあり、どちらが最適であるかを判断するのはユーザーの責任です。

GPUで操作を行うと、メッシュデータを1回送信するだけでよく、その後、マトリックス変換を送信して変形させるだけです。CPU-> GPUの間に必要な帯域幅が大幅に削減されるため、これは素晴らしいことです。また、メッシュのコピーを1つだけGPUにアップロードして、メッシュのさまざまなインスタンスに変換を適用できることも意味します。ただし、「メッシュの正確な」衝突を行うのはより困難です。変換はGPUで行われるため、CPUでのテストに使用できません。

CPUで操作を行うと、変換されたメッシュにアクセスできるようになります。あなたはそれについて知る必要があるすべてにアクセスできます。ただし、メッシュ全体をフレームごとにGPUにアップロードする必要があることを意味します。また、そのメッシュのインスタンスごとに変換されたメッシュをアップロードする必要があります。要約すると、ここには長所と短所の完全なリストに近いものはありません。

  • GPUの長所

    • メッシュデータを1回アップロードする
    • 複数のインスタンスに変換する
    • マトリックス変換のみを送信する必要があります
    • GPUはこれらのタイプのものを並列化するのに非常に優れています
  • GPUの短所

    • 変換されたメッシュはCPUでのテストには使用できません
  • CPUの長所

    • 変換されたメッシュは、衝突テストやその他必要なものに利用できます。
  • CPUの短所

    • フレームごとに変換されたメッシュ全体をアップロードする必要がある
    • メッシュのインスタンスごとにメッシュ全体をアップロードする必要があります

ただし、GPUの短所を回避する方法はいくつかあります。

  • メッシュの正確な衝突はありませんメッシュ全体の境界ボックスのような「十分に近い」ものを使用するか、メッシュの各ボーンに境界ボックスを設定します。以下は、メッシュのGPU変換、およびメッシュを表す軸に位置合わせされた境界ボックスのCPU変換で使用しています。非AAAを使用すると、さらに正確な境界を取得できます。

ゴブリンの骨

  • メッシュの正確な衝突が必要な場合にのみ、CPUでメッシュのコピーを変換します。バウンディングボックスの衝突がtrueを返した後、メッシュを変換してGPUの変換と一致させ、衝突をチェックしてより正確な衝突データを取得します。

オールインオールGPUで変換する方が一般的である理由を理解できると思います


1
好奇心から、現代​​のゲームのメッシュの複雑さ、現代のCPUのパワーとマルチコア機能、およびCPUが実行する必要があるその他のタスクを考慮すると、メッシュがCPUで変換されるのは実際に現実的ですか?また、GPUへのアップロードが非常に遅いので、このアイデアは地面から離れることもありませんか?
R4D4

それはゲームに依存しますが、通常、中程度の複雑さを超えるゲームでは実用的ではありません。GPUで変換を実行するという簡単な選択がある場合、CPUで変換を実行するための追加のリソース要件を正当化する理由を見つけるのは困難です。問題は、フレームごとに変換されたメッシュをGPUに送信することであり、コストがかかります。ソフトウェアの場合によくあることですが、複雑さとパフォーマンスのどちらを決定するかは開発者次第です。
MichaelHouse
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.