2012-03-07 27 views
12

私は、スプライトの束でレンダリングされたOpenGLシーンを持っています。それらにすべてドロップシャドーを自動的に追加したいと思います。ここで私が何を意味するかを示す画像です:2Dスプライト用のOpenGL ESドロップシャドウ

enter image description here

シーンが正投影を使用して、スプライトはテクスチャクワッドであり、私は背中にフロントそれらを描画するためにデプスバッファを使用しています。私はOpenGL ES 2.0を使って作業していますが、iOSや非ES環境からの考えも高く評価されます。私はこれについて私がどのように進むことができるかについての私の頭の中でいくつかのアイデアを捨てました。そして、最も有望なものを見つけたいと思います。

  1. それぞれのスプライトを2回描画します。通常は最初のスプライトを描画し、通常は2番目のスプライトを描画します。ドロップシャドウシェーダをいくつか追加して、少し深く描画します。これが可能かどうか分かりませんか?
  2. スプライトを描画し、再度描画し、暗くしていくつかのアルファを使用して、いくつかのランダムジッタを頂点に適用します。これは愚かに見えるかもしれませんし、まったく影のようではありません。
  3. テクスチャに背景のないベースシーンを描画し、ぼかして濃くして1つの大きなドロップシャドウを作成します。その後、ドロップシャドウテクスチャ上にベースシーンを描画し、最後にバックグラウンド上に描画します。しかし、これはスプライト間の影を失うことになります。
  4. 後処理パスでのSSAO。最もダイナミックかつ自動であるかもしれませんが、ファジィ/粒状になり、実際には遅くなります。
  5. 作成時に、各スプライトのシャドウテクスチャを生成します。レンダリングのために、スプライトを描いてから、そのシャドウテクスチャをシーンの少し深く描きます。私はローディング時間と余分なメモリの必要性のためにこれを避けたいと思いますが、これは最速で最善の方法でしょうか?

私はさまざまなスケールで同じスプライトテクスチャを使用し、プリベークされたシャドウは不自然に拡大するので、外部テクスチャでシャドウワークを行いたくありません。

他のどのタイプより優れていますか?私が考えていない他の選択肢はありますか?ありがとう!

+0

#3については、後処理のためのImagination Technologiesの推奨事項に興味があります。http://www.imgtec.com/powervr/insider/docs/PowerVR.Post%20Processing%20Effects%20Development%20Recommendations.1.7f。 External.pdfには、高効率ブルームフィルタの説明が含まれています。暗いバージョンのオブジェクトをレンダリングするだけでハイパスフィルタを置き換えると、すばやくドロップシャドーが得られるはずです。 –

+0

良い読書、Brad。私が#3と一緒に行くなら、私はその方法を使うかもしれません。 – Josh

答えて

5

これらすべてここでいくつかのよく考え抜かオプションは、各

  1. 上の私の考えは、シェーダを使用することは間違いなく可能ですが、ボケがする必要がありますので、それは、最もパフォーマンスのオプションではないかもしれませんされていますシェーダーの内部で行われ、複数のテクスチャルックアップを伴う場合があります。
  2. テクスチャを何回も描画すると効果があり、影のように見えます。なぜなら、それぞれの「ジッタ」画像にはわずかに変更されたアルファ値があるからです。しかし、再び、各スプライトのブレンドと複数のレンダリングが加わり、パフォーマンスに影響する可能性があります。
  3. アルファを考慮した色付きピクセルの代わりに黒色ピクセルをスクリーンよりも小さいレンダーターゲットに配置するシェーダを設定することができます(1/4th?)ので、これをシャドウテクスチャとして使用できます。テクスチャがストレッチされているので、あなたも自由に「ぼかし」を得るでしょう。 「黒化」を行うピクセルシェーダは非常に単純で、パフォーマンスにはあまり影響しません。
  4. 高品質のシャドウが本当に必要な場合(前の方法では十分でない場合を除き)、私はこれをお勧めしません。
  5. これはもちろん、最も柔軟なオプションであり、x2のレンダリングの複雑さがあります。残念ながら、上記の他のすべてのオプションより多くのメモリを消費します。

希望します。

+0

あなたの考えをありがとう! – Josh

+0

#5と一緒に行くと、最高のパフォーマンスが得られるようです。 – Josh

関連する問題