計算シェーダーを使用して流体力学を実装しようとしています。この記事では、コンピューティング シェーダーの前に作成されたテクスチャに対して一連のパスが実行されています。
テクスチャまたはバッファで各パスを実行する方が高速ですか? いずれにせよ、最終パスはテクスチャに適用する必要があります。
計算シェーダーを使用して流体力学を実装しようとしています。この記事では、コンピューティング シェーダーの前に作成されたテクスチャに対して一連のパスが実行されています。
テクスチャまたはバッファで各パスを実行する方が高速ですか? いずれにせよ、最終パスはテクスチャに適用する必要があります。
シミュレーションに適した次元のリソースを使用することをお勧めします。1D シミュレーションの場合は RWBuffer を使用し、2D シミュレーションの場合は RWTexture2D を使用し、3D シミュレーションの場合は RWTexture3D を使用します。
リンクしたアルゴリズムには、双一次フィルタリングを利用する段階があるようです。Buffer の使用に制限する場合は、4 回または 8 回のメモリ フェッチ (2D または 3D に応じて) を発行し、その後、加重平均を計算するための命令をさらに発行する必要があります。可能であれば、これを行うハードウェアの機能を利用してください。
もう 1 つ注意する必要があるのは、テクスチャ内のデータは、予想されるように行ごとに (直線的に) 配置されるのではなく、隣接するテクセルがメモリ内でできるだけ近くなるように配置されるということです。これは、誰のドキュメントを読むかによって、タイリングまたはスウィズリングと呼ばれます。そのため、シミュレーションが 1 次元でない限り、レイアウトがシミュレーションの次元に最も近いリソースからの読み取り/書き込みで、はるかに優れたキャッシュ コヒーレンシーが得られる可能性があります。