XNAが「焼き付け」効果でクレーターを(GPU経由で)追加する


11

私は現在、XNAの2Dワームクローンに取り組んでおり、機能の1つは「変形可能な」地形です(たとえば、ロケットが地形に衝突すると、爆発が起こり、地形のチャンクが消えます)。

私が現在これを行っている方法は、中心に近づくにつれて赤の値が徐々に高くなるテクスチャを使用することです。その「変形」テクスチャのすべてのピクセルを循環し、現在のピクセルが地形ピクセルと重なり、十分に高い赤の値を持っている場合は、地形を表すカラー配列を透明に変更します。現在のピクセルの赤の値が十分に高くない場合は、地形の色を黒くします(赤の値がしきい値に近づくほど黒くなります)。この操作の最後に、SetDataを使用して地形テクスチャを更新します。

これは、パイプラインの停止などについて読んだだけでなく、同時に多くのクレーターが追加されている場合にかなり遅延する可能性があるため、これを行うには良い方法ではないことに気づきました。ターゲットになることと変更するテクスチャとの間でレンダーターゲットの「ピンポン」を使用する代わりに、GPUでクレーター生成を作り直したいと思います。それは問題ではありません、私はそれを行う方法を知っています。問題は、この方法で火傷効果を維持する方法がわからないことです。

現在、焼き付け効果は次のようになります。

書き込み効果

誰も私が同様の火傷効果を作成する方法を考えていますか(形成されたクレーターの周りのエッジを暗くします)?私はシェーダーに完全に不慣れですが、それが必要な場合は、誰かが私にその方法を説明してくれれば本当に感謝します。他にも素晴らしい方法があれば。


これは役立つかもしれません:gamedev.stackexchange.com/q/6721/1163
Adam Harte

回答:


7

あなたがそれを行うことができる1つの方法は、あなたがやってきたことに似ています。「ダメージ」テクスチャと実際の背景テクスチャを用意しますが、毎回データをコピーするのではなく、2つを2つの別個のテクスチャとして保持します。

爆破が行われたら、わずかに透明なエッジを持つダメージテクスチャに円を描きます。これが「書き込み」領域になります。

地形を描画するときは常に、GPUに両方のテクスチャーを与え、シェーダーに背景ピクセルの色(.rgb)に1-ダメージテクスチャーのアルファ値を乗算させます。完全に黒いピクセル(アルファを0にアルファ化するか、半透明の焦げた領域が必要かどうかに応じてこれをアルファ(.rgbの代わりに.rgba)に乗算)を取り除いてください!

これが最善の解決策ではないかと思いますが、以前に行ったこととかなり似ているため、転送が簡単になります。また、Vector3の配列(x、y、radius)を渡して、これらの爆発ポイントに基づいてシェーダーでいくつかの計算を行うこともできますが、その効率についてはわかりません。

お役に立てれば!


ありがとう!それもクールな方法で、あなたが言ったように、私が今やっていることと似ています。HLSLについては何も知りませんが、詳しく調べます。もう1つの方法として、クレーターの端に近づくにつれてそれを黒くすることができると言われましたが、私もこの方法を試します。
Benixo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.