2019.8.20はじめにこんばんは、代表の堂前です!前回の投稿でUnityのOnRenderImageについて書きました。その時は突き詰められず情報不足となりましたが、もう少し突っ込んで調査を行いました。今回は複数のカメラの際のOnRenderImageについてです。前回のと併せ、更にOnRenderImageについて理解していきましょう。※検証したのはMacのUnity5.4.1系になります。RenderTexture(絵のコピー)を行っていました。前回では例えばアンチエイリアス(以下、AA)時はGrabを行い、そうでない時はGrabを行わないということです。考えうる限りGrabを行わないようになっており処理として優れているのですが、今回はもう少し意地悪して、複数のカメラの際のGrabについて確認します。1」の複数カメラを用意しました。こちらの状況は以下のようになっています。・AAはカットしている状態。1」と描画するようにしている。Optimized」を付与。Color」としている。Debuggerで確認してみます。Flagsで状況が変わっていきます。それぞれ見ていきます。「Skybox」Cameraが複数あるので、それぞれの担当箇所を黄色の枠線で括りました。Flagsでの違いになりますが、それによりGrabの有無が発生します。それぞれの描き先のRenderTextureからなぜこうなるかを考えてみましょう。モデルなどはテンポラリに描画。テンポラリを加工してブルームとし、デフォルトターゲットに描画。デフォルトターゲットにモデルを描画。新規テンポラリを用意し、必要に応じてクリア。新規テンポラリにモデルやSkyboxを描画。新規テンポラリを加工してブルームとし、デフォルトターゲットに描画。Grabしたテクスチャを加工してブルームとし、デフォルトターゲットに描画。0ではまず別のテンポラリにモデルを描きます。そのテンポラリを加工し、デフォルトに戻すことを行っています。これは単一のカメラで考えると理想の処理です。1ではデフォルトターゲットに描かれているため、イメージエフェクトのためにGrabを行わなければなりません!よって複数カメラ時は無駄な処理が出る可能性があります。FlagsでGrabの有無が発生するかについて説明します。Color」や「Skybox」では画面を真っさらにする処理が入ります。描画結果は全く関係なくなります!よってデフォルトターゲットに上書き、Grabなどは必要なく、更に新規RenderTextureを設けるようです。この様に、トリッキーのシチュエーションではありますが、複数カメラ時のOnRenderImageは、やはり内部Grabを気に知る必要が生じてきます。サイトでの情報を利用することによる損害等に対し、株式会社ロジカルビートは一切の責任を負いません。