0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CameraのforceIntoRenderTextureをtrueにした際のFrameDebuggerの変化(と少しPostProcessLayerの話)

Last updated at Posted at 2020-06-27

前回の記事
CameraのDepthTextureModeをDepth有効にした際のFrameDebuggerの変化
の関連で、次は同じ条件で forceIntoRenderTexture を true にした時の変化をメモしておきます。
Camera-forceIntoRenderTexture - Unity スクリプトリファレンス

DepthCheck.cs
public class DepthCheck : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        var camera = GetComponent<Camera>();
        camera.forceIntoRenderTexture = true;
    }
}

スクリーンショット 2020-06-27 12.36.21.png

  • Event数は3
  • Statsは
    • Batches 2
    • SetPass 2
  • メイン描画の描画先は Temp Buffer になっている
  • 描画パスの末尾にImageEffectが追加されている
    • 内容としては、DrawDynamicのBlit()で、TempBufferをno nameにコピーしている

この構成どこかで見たなーと思うかもしれませんが、
PostProcessingStackV2で、PostProcessをかけた時と似たような構成になっています。

forceIntoRenderTextureをfalseにして、PostProcessLayerをカメラに付けた時の状態はこちら
スクリーンショット 2020-06-27 13.02.07.png

  • メイン描画部分のRenderTargetはTempBufferになっている
  • BeforeImageEffectsのコマンドが追加されている
    • 最初のDraw Dynamicで TempBuffer を_TargetPool0にコピー
    • 次のBuiltInStack DrawMeshで _TargetPool0 を TempBufferに戻している
  • 末尾にImageEffectsが追加されている
    • 内容としては、DrawDynamicのBlit()で、TempBufferをno nameにコピーしている

ちなみに、PostProcessLayerのDirectly to Camera Targetのフラグを立てると、BuiltInStack DrawMeshで直接no nameにコピーを行うことで、最後のTempBufferをno nameにコピーするステップを削減できます。
スクリーンショット 2020-06-27 13.10.23.png
ただやはり、 それでもメイン部の描画はTempBufferにされるところが注意点かな。


Camera-forceIntoRenderTexture - Unity スクリプトリファレンス に

If set to true camera rendering will always happen into a RenderTexture instead of direct into the backbuffer. This can be useful if you have no image effects but want to use command buffers to act on the current rendering target.
trueに設定すると、カメラのレンダリングは、バックバッファーに直接ではなく、常にRenderTextureで行われます。これは、イメージエフェクトはないが、コマンドバッファーを使用して現在のレンダリングターゲットを操作する場合に役立ちます。

とあるように、PostProcessingStackV2みたいにコマンドバッファでImageEffectっぽいことをしようと思った時は、
forceIntoRenderTextureをtrueにすることで、PostProcessingStackと同様の描画フローを辿れそうですね。


ちなみに、前回の記事
CameraのDepthTextureModeをDepth有効にした際のFrameDebuggerの変化
と一緒に指定すると、こうなります。

DepthCheck.cs
using UnityEngine;

public class DepthCheck : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        var camera = GetComponent<Camera>();
        camera.depthTextureMode = DepthTextureMode.Depth;
        camera.forceIntoRenderTexture = true;
    }
}

スクリーンショット 2020-06-27 12.27.13.png

  • 前段にUpdateDepthTextureが追加される
    • 描画先はCameraDepthTexture
  • メイン描画部はTempBufferに描画される
  • 終段にImageEffects DrawDynamicでTempBufferをno name(フレームバッファ)にコピーしている
  • Event数は5
    • 深度バッファ作成に2
    • メイン描画に2
    • 最終コピーで1
  • Statsは
    • Batches 3
    • SetPass 3

今回も作業メモとして残しておきます。
ここから深度バッファ周りを触っていく予定。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?