Unity:1つのレイヤーのみに画像効果を適用する


8

この単純なシーンを検討してください。

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

3つの異なるゲームオブジェクトで構成されています。1つの背景画像+ 1つの静的なキャラクター画像+ 1つの小さな部分(ペットと一緒に)アニメーションを実行するために実行時に変更されます。

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

背景は専用カメラを使用してレンダリングされます。キャラクター(静的+アニメーション)は、別の専用カメラを使用してレンダリングされます。両方のカメラは、異なるカリングマスクで深度のみに設定されています(各カメラはその部分のみをレンダリングします)。キャラクターを担当するカメラは、背景を担当するカメラよりも奥行きがあることに注意してください(つまり、キャラクターは背景の後にレンダリングされます)。

キャラクターカメラにのみ画像効果を適用する必要がありますが、この効果が背景に影響しないようにする方法を見つけることができません。

キャラクターカメラの渦エフェクトの例。

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

あなたはそのようなトリックをどのように行いますか?

回答:


8

問題は、レンダリング後に画像効果が現在の画面を取得することです。

カメラは直接バックバッファーにレンダリングするため(深度のみがクリアされます)、イメージ効果はすべてに適用されます。

解決策は次のとおりです。

  • 最初に透明色にクリアするカメラをセットアップし、RenderTargetのセットアップ(スクリプトで作成できるため、画面と同じサイズになる)と必要な後処理を使用します。
  • 背景をレンダリングするカメラを2番目に設定し、背景色/スカイボックスまでクリアにします
  • 3番目にカメラをセットアップし、何もレンダリングせず(カリングマスクをNothingに設定)、何もクリアせず、AlphaBlit.csスクリプトをアタッチします。AlphaBlitには2つの情報が必要です。AlphaBlit.shaderレンダーターゲットを使用してブレンドするマテリアルです(最初のステップでスクリプトで作成した場合は、スクリプトで割り当てる必要があります)。
  • 前方のキャラクターをレンダリングするカメラを4番目に設定します。

注意:これはペインタアルゴリズムです。つまり、3番目のカメラレンダーは既に存在するものの上にレンダリングされ、4番目のカメラはその上にレンダリングされます。

デプスバッファーも歪める必要があるため、より良い方法があるかどうかはわかりませんが、これは不可能です...(より難しい渦効果で直接レンダリングしないと)...

もちろん、それを行うためのより最適化された方法は、1番目のカメラに後処理を適用せず、レンダーターゲットでレンダーさせ、AlphaBlit.shaderを変更して、そのレンダーターゲットをブリットするときに渦効果を実行することです。しかし、それはもっと複雑です。


ご回答有難うございます。「OnRenderImageで、そのRenderTargetのブリットを目的のレンダーターゲット(つまり、ここではバックバッファー)に単純に実行するスクリプトを使用してカメラをレンダーする」に問題があります。..色が透明な黒であっても、一度ブリットされるとすべてが黒になります。
lvictorino 2015年

より正確に編集された回答
Sirithang 2015年

基本的なソリューションのワークフローは問題ありませんが、ここでアルファに関する予期しない問題に直面しています。前景のレベルをぼかしたいのですが。このソリューションは機能しますが、どういうわけか配線されています。puu.sh/C6sSB/ca5d5162b0.jpgクリアフラグの色を透明度0のマゼンタに変更すると、側面に奇妙なマゼンタの輪郭が表示されます(透明になるはずです)。puu.sh/C6sSB/ca5d5162b0.jpg。これにより、ソリューション全体が機能しなくなります。なぜそうなるのか、私にはよくわかりません。クリアフラグの切り替えは役に立ちません。
AvrDragon 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.