アルファブレンディングとパーティクルを使用して、どのように優れた火災効果を達成できますか?


41

OpenGLパーティクルエフェクトに次の設定を使用します。

SRC: GL_SRC_ALPHA
DST: GL_ONE

添加剤ブレンドを作成します。黒の背景では壮観に見えますが、白にフェードし始めると、明るい色ではひどく見えます。

次に、アルファブレンディングを使用しました。

SRC: GL_SRC_ALPHA
DST: GL_ONE_MINUS_SRC_ALPHA

これにより、粒子の色に影響を与えることなく他の背景を使用できますが、粒子自体は添加剤ブレンドと比較して鈍く見えます。アルファブレンディングとパーティクルを使用して、どのように優れた火災効果を達成できますか?

添加剤:

黒の添加剤 青の添加剤

アルファ:

黒のアルファ 青のアルファ

更新:

以下のDavidのアドバイスに従って、個別のテクスチャを作成し、テクスチャに描画する前にパーティクルエフェクトに加算ブレンドを使用しました。それに伴う問題は、alpha = 0のテクスチャに描画すると、通常は代わりに黒い背景があるため、パーティクルの色付きの部分が世界地図の前に表示されることです。トリックは、2つのテクスチャを使用することでした。黒いテクスチャを作成し、その上に粒子を描きました。次に、このテクスチャからパーティクルのアルファレイヤーを削除し、周囲のすべてのソリッドブラックを効果的に削除し、部分的に表示されているパーティクルをフェードアウトさせます。要するに、厳しいプロセスですが、最終的にそこに着きました:

通常の添加物と私のバージョン

プロセスを投稿したスレッドは次のとおりです。http//www.cocos2d-iphone.org/forum/topic/28707?replies = 8#post-141528

ビデオ:http : //www.youtube.com/watch?v=JptGbEO3b5E

回答:


17

私はこの問題の理想的な解決策を知らないことを認めているので、あなたが慣れるかもしれないかもしれない回避策を説明します:

  1. 使用した粒子の全てレンダリング添加剤ブレンド別個のテクスチャ(またはレンダーターゲット)その背景にクリアで透明
  2. アルファブレンディングを使用して、シーンの上部にそのテクスチャをレンダー(またはレンダーターゲット)します。

Photoshopで試しましたが、ここにあります-完璧ではありませんが、少なくとも元の色はよりよく保存されます。

ここに画像の説明を入力してください

以下は、パーティクルに加算ブレンドを行わない元のテクスチャです。

ここに画像の説明を入力してください


これはそれらを2つのテクスチャに分け、背景に描画されている添加剤ブレンドのテクスチャがあるかのようになりますか?
アラムコチャ

@AramKocharyan実際には、結果が妥当と思われるPhotoshop以外で個人的に試したことはありません。しかし、最初の写真のように見えますが、すべての黒が背景色に置き換えられているはずです。つまり、パーティクルは一緒に追加され、爆発の途中で大きなハイライトが表示されますが、背景では表示されません。次に、結果の爆発を追加せずに背景の上に貼り付け、元の外観を保持します。
デヴィッドゴーベイア

理にかなっているおかげで、Photoshopの通常のブレンドとオーバーレイのように見えますが、背景レイヤーの上にあるオーバーレイの画像のように見えます。私はそれを試して、あなたに知らせます。
アラムコチャ

@AramKocharyanフォトショップで得た結果を数分後に投稿して、比較できるようにします。
デビッドゴウベア

5
ただ、そこにこれを投げ-この技術は、パフォーマンス上の問題を起こすという...
notlesh

9

あらかじめ乗算されたアルファをご覧ください。

http://blogs.msdn.com/b/shawnhar/archive/2009/11/07/premultiplied-alpha-and-image-composition.aspx


2
これは、このスレッドの唯一の正しい答えです。とても簡潔なのは残念ですが、誰もが実際にこれを読む必要があります。事前乗算されたアルファは加算ブレンドとアルファブレンドを組み合わせる方法であり、他にも多くの利点があります。
ジェイクマッカーサー

4

David Gouveiaが指摘したように、明るい背景での添加剤のブレンドに代わる満足のいくものはありません。私が見つけた最良の効果(バックバッファへのレンダリングのようなものを必要としない)は、次のGLブレンドモードを使用することです:

SRC: GL_ONE
DST: GL_ONE_MINUS_SRC_ALPHA

添加剤ブレンドほど優れていませんが、よりもはるかに優れていGL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHAます。開始アルファ値と終了アルファ値と色値を少し調整すると、加算ブレンドに非常に近い結果が得られる場合があります。

粒子混合モード

上の画像GL_SRC_ALPHA, GL_ONEでは左側にあり、中央GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHAには右側にあり、このセットアップで提案するブレンドモードを確認できます。


色を完全に制御するには、この方法が非常に効果的であることに同意します。
アラムコチャ

ただ、この方法では、アルファを減らすと火が白にフェードするため、火をフェードアウトする最良の方法はゼロサイズに縮小することであることに気付きました。
アラムコチャヤン

3

両方使用してみましたか?アルファブレンディングを使用して一部のパーティクルをレイヤーします。これにより、希望どおりの色が得られます。その後、追加のブレンディングを使用して、探しているハイライトを取得します。


それが私の次の選択肢かもしれませんが、パーティクルを最小限に抑えたいです。うまくいけば、両方を半分にできる。
アラムコチャ

3

まず最初に、使用している粒子画像の背景が黒く見えるため、その2番目の画像に暗い縞模様が生じます。それをしないでください。つまり、カラーチャンネルにパーティクルの形状を描画しないでください。代わりに、画像は無地の色で、アルファチャネルの形状のみを定義する必要があります。

これを行うと、アルファ透明度の外観が大幅に改善されます。その後、パーティクルの寿命にわたって色を変えることにより、全体的な効果の外観をさらに改善できます。同様に、ベース画像は非常に明るく、中央に明るい黄色の領域があります。次に、粒子を赤みがかったオレンジに色付けし、時間の経過とともに色合いを増やします。そうすることで、粒子は中心から離れるにつれて暗くなります。


はい、テクスチャは中心からアルファが変化する白いブラシのみです。
アラムコチャ

ほら、それが本当なら、あなたのアルファ透明度スクリーンショットが粒子の周りにそれらの暗いハローを持っているのは私にとって奇妙です。
冗談

はい、なぜアルファブレンディングの周りでそれらが形成されたのかわかりません。しかし、私が今持っているものについては、それは大丈夫のようです。
アラムコチャ


それはかなりよさそうだ、あなたはあなたの質問の更新にそれを入れてください。
12
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.