新しいこと、枯れたこと問わずサムザップ大庭が興味を持ったものを調査、生活の効率を求める完全趣味の技術ブログ。基礎を大事にしています。忘れやすいのでメモ世界ふしぎ発見を見ながら記事を書いていたのでタイトルが影響を受けております。2017年も残りわずか、この記事が今年最後の投稿になるかもしれません。来年もよろしくお願いいたします。本題へcamera.SetTargetBuffersGraphics.BlitGraphics.SetRenderTargetイマイチ理解していなかった上記3メソッドの調査しました。camera.SetTargetBuffersSetTargetBuffersはCameraクラスのインスタンスメソッドで、カメラがレンダリングするRenderTextureのバッファを指定します。rt.depthBuffer);このような感じでカメラにRenderTextureのバッファをセットします。上記のサンプルコードの場合、このカメラのレンダリング対象がRenderTextureのrtになったため、今まで画面に写っていた画像は映らなくなります。文字だと分かりづらいのでサンプルをどうぞ。右下にはuGUIのRawImageでRenderTextureをセットしています。初期状態には何も投影していないため、真っ白な状態です。※RenderTexture生成時に白色を描画していますSetRenderBuffers実行後SetRenderBuffersを実行したので、今まで映し出されていた画面表示が消え、カメラのレンダーターゲットがRenderTextureに移ったことが分かります。Debug.Log(RenderTexture.active);}カメラのレンダーターゲットがRenderTextureに移った事は、RenderTexture.activeをOnPostRender(レンダリング終了時)のログを取得してみると分かります。ここまでで、SetTargetBuffersはカメラのレンダリング先を変更できるということがわかりました。Graphics.BlitGraphics.Blitは引数で渡されたRenderTextureをターゲットのRenderTextureにコピーするスタティックメソッドです。dst);この場合テクスチャsrcをRenderTextureのdstにコピーします。1つの機能としてdstにnullを代入することで、srcを画面に直接描画することが出来ます。この機能を使い、カメラからRenderTextureに描画されている画像を画面に写してみます。}※上記materialは入力画像をそのまま出力した単純なシェーダですしかしこのままでは画面に描画されません。Graphics.SetRenderTarget最後に登場したSetRenderTargetはメソッド名の通り、引数に渡したRenderTextureやRenderBufferをレンダーターゲットに指定することが出来ます。先のRenderTextureのrtを画面に表示させるためにGraphics.Blitを実行しましたが、残念ながら思うような挙動をしませんでした。理由としてはカメラのレンダーターゲットが未だにRenderTextureのrtを指しているからです。画面に描画するタイミングで、SetRenderTargetを使ってカメラのレンダーターゲットを解除する必要があります。material);}と、引数にnullを代入することでレンダーターゲットがRenderTextureから外れ、画面にRenderTextureが描画されるようになります。カメラのレンダーターゲットからRenderTextureが外れたのであればGraphics.Blitは不要ではないか?という疑問が湧いてきます。カメラがレンダリングするバッファはRenderTexutreのrtと指定されているため、この設定が外れるわけではありません。一時的にレンダーターゲットから外しているだけで、次フレームの描画ループになったときには再度元のレンダーターゲットに戻っています。nullこの2つの記述は内部処理として同じなので覚えておきたいところです。Graphics.SetRenderTargetより最後に検証プロジェクトを作ってみてやっと理解できた気がします。SetRenderBuffersは一度指定すると解除することが出来ないっぽいのですが、そういうものなのでしょうか...調べても分かりませんでした。今回の流れを図でまとめています。1.初期状態2.SetTargetBuffers実行3.Graphics.Blit実行4.Graphics.SetRenderTarget(null)を実行CameraクラスにSetRenderBuffersと同じようなtargetTextureプロパティも存在します。コチラはまた余力がある際に調査しいます。今回のサンプルプロジェクトです。素材はコチラのサイトから使わせてもらいました。SetTargetBuffers、Blit、SetRenderTargetの関係性の謎にせまるTweet読者になるボタンを押して貰えるととてもがんばれます。大庭俊介(bao_bao)渋谷のUnityエンジニア。スマホゲーム作って生活しています。設計、組み込み、演出一通りを自分1人で完結して作るのが得意です。よろしければTwitterフォローお願いします。(@ohbashunsuke)株式会社サムザップでUnityエンジニアとしてスマホゲーム作っています。(1)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。