質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

419閲覧

カメラ複数で表示した際、Priortyの低いカメラのPostEffectが消えてしまう

kenji007

総合スコア22

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2022/07/07 18:33

ポストエフェクトを使用したいです。
ただ、キャラクターにはポストエフェクトを使用したくないと思っております。

そのため、カメラを2つ用意しました。
①キャラクターのみをcullingmaskで表示するように設定したポストエフェクト無しのカメラ
イメージ説明

②キャラクター以外をcullingmaskで表示するように設定したポストエフェクト有りのカメラ
イメージ説明

①と②を同時に表示したもの
イメージ説明

①を表示し、②を表示した所、うまくキャラクターと背景が表示されるようになったのですが、①の設定がすべての描写に反映されてしまうようで、②でかかっていたポストエフェクトまで消えてしまいました。

いろいろ調べているのですが、「背景が表示されているのにポストエフェクトが消えてしまう」というのの原因がどうしてもわからず積んでおります。
どなたか助言いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenji007

2022/07/08 13:05

HUDのオフも試したのですが、ダメなようでした。 こちらなのですが、色々いじってて気づいたことが有り、Unity公式の「Volume」に入っている「ColorAdjustments」では上記のように2つ目のカメラをONにするとポストエフェクトが消えてしまったのですが、アセットストアで購入した「SC Post Effects Pack」では正常に反映されていることを確認しました。 同時に設置しても公式のVolumeのみ効果が消えてしまうようです。 引き続き解決の糸口知ってる方がいましたらよろしくお願いします。
guest

回答1

0

ベストアンサー

ちょっとFrame Debuggerで確認してみましたところ、後段の和服男はリニアカラー用のバッファ(だと思います...私の場合では「_CameraColorTexture_320x240_B10G11R11_UFloatPack32_Tex2D」という名称のようでした)にレンダリングされ、最後にトーンマッピングが行われてスクリーンに出力されているように見えました。
どうやらリニアカラーバッファにはエフェクト処理前の青空が残ってしまっており、そこに和服男をレンダリングするという描画過程のために青い空が復活してしまうようでした。

図1

そこで、試しに和服男用のカメラの「HDR」をオフにしたところ...

図2

下図のように描画過程が変化しました。和服男がスクリーンへダイレクトにレンダリングされるようになり、灰色の空を背景に色付きの和服男が描かれました。

図3

もしHDRをオフにしたくないとかの理由があったり、あるいはその他うまくいかなくなる条件を見つけましたらコメントください。恥ずかしながら未だにURPは不慣れでして自信がありませんが、可能であれば回避方法を考えてみようと思います。

RenderObjectsRendererFeature案

別案として、下記のような手順はどうでしょうか。

  • 和服男用のカメラは使用せず(非アクティブにするか削除してしまう)、青空用カメラ単独とする。
  • 青空用カメラのCulling Maskは青空も和服男も両方対象にする(今回の場合はTransparentFXとIgnore Raycast)。

図4

  • レンダラーアセット(私の場合はAssets/Settings/Renderer2D.assetに置かれていました)のインスペクター末尾にある「Add Renderer Feature」ボタンで「Render Objects (Experimental)」を追加する。
  • EventをAfterRendering、またはAfterRenderingPostProcessingにする(Nameはそのままでもいいですが、役割に即した名前を付けておくとFrame Debuggerで確認するときだとかに区別が付きやすいかもしれません)。
  • FiltersのQueueをTransparentにする(スプライトなら普通はTransparentでしょうが、特殊なシェーダーを使っていたり不透明オブジェクトを使いたい場合はOpaqueにする必要があるかもしれません)。
  • FiltersのLayer Maskを追加描画したいオブジェクトのレイヤー(今回の和服男の場合はIgnore Raycast)にする。

図5

以上のような措置を加えたところ、描画過程は下図のようになりました。

図6

和服男がメインのレンダリングパスと追加パスで合わせて2回描画されるのが若干無駄かもしれませんが、とりあえず色付きになりました。
ただしキャラクター側に半透明部分があると、この2回描画の仕様のせいで半透明部分が濃くなってしまうかもしれません。それが困るようでしたら、また別案を検討する(独自のRendererFeatureを作るとか?)ことになるかと思います。

投稿2022/07/07 22:46

編集2022/07/09 03:08
Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenji007

2022/07/08 13:02

ありがとうございます! サンプルでアップしたプロジェクトでは治ることを確認しました。 ただ、実際に困っているプロジェクトの方ではHUDをオフにしても発生してしまいました…… その旨追記しておきます!
Bongo

2022/07/09 02:55

HDRオフでうまくいったとしても、たまたまだったと考えるべきかもしれませんね。なにか他の理由で和服男のレンダーターゲットがスクリーンからレンダーテクスチャに切り替えられてしまえば、やはり失敗してしまうでしょう。 別案として、レンダラーにRenderObjectsを追加してポストエフェクト後に和服男を再描画するというのはどうでしょうか。回答に追記しました。
kenji007

2022/08/01 14:59

ちょっと色々設定変更したり使っているアセット開発に質問したりしてみたのですがかいけつできそうになく…… ただ、頂いた知識を持とにもっと学んでいきたいと思います、ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問