すぎしーのXRと3DCG

主にXR, Unity, 3DCG系の記事を投稿していきます。

【Unity】Camera.RenderはOutput Textureがある場合はUniversal Render Pipelineでもサポートされているっぽい?(Unity 2020.1.0b11時点)

概要

Camera.RenderはOutput Textureがある場合はUniversal Render Pipelineでもサポートされているみたいです。

以下のドキュメントでは"Camera.Render"項目は"Not Supported"になっていますが、完全にサポート外というわけではなくOutput Texture (targetTexture)がある場合は問題なく機能するみたいです。

Universal Render Pipeline: Feature comparison table

せっかくなので少し調べてみました。

確認時期

  • Unity 2020.1.0b11時点
    • 2020/06/07時点でのBeta版最新

実験

使用するComponent

Update()時にCamera.Render()をコールするだけのMonoBehaviour。

コールされていることの確認のため、Debug.Logを仕込んでいます。

using UnityEngine;

[RequireComponent(typeof(Camera))]
public class CameraRenderOnUpdate : MonoBehaviour
{
    void Update()
    {
        GetComponent<Camera>().Render();
        Debug.Log(Time.frameCount + ": Render");
    }
}

Camera.enabled = false かつ Output Textureなしの場合

※ドキュメント通り、機能しないパターン

f:id:tsgcpp:20200607165437j:plain
Camera.enabled = false かつ Output Textureなし の設定

www.youtube.com

Camera.enabled = falseの場合は"No cameras rendering"と表示されています。 コンソールで、GetComponent<Camera>().Render()は実行されているはずです。

よって、ドキュメント通りCamera.Render()はサポートされていない

Camera.enabled = false かつ Output Textureありの場合

※ドキュメントとは異なり、機能するパターン

Output Textureを設定しています。

f:id:tsgcpp:20200607173536j:plain
Camera.enabled = false かつ Output Textureあり の設定

www.youtube.com

こちらのシーンはCameraが描画したRenderTextureをQuadに反映して、そのQuadをMainCameraから見ています。

Camera.enabled = falseですが、Cameraを動かすとQuadの映像も動いていますね。

よって、ドキュメントとは異なりCamera.Render()は機能していると考えられます。

雑感

多分、ほとんどの人が「だから何?」って思われたと思いますが、
ドキュメントを見ると"Not Supported"ってあったので、自分は「完全に機能していない」とずっと勘違いしていました。。。

でも、これがないと正直Universal RPでミラーもポータルも作りづらかったので、ちょっと積んでましたw。

確認して良かった、って話です。

仕様かどうかはわからなかったので、一応Bug Report経由でドキュメントのことを問い合わせています。

ドキュメントには明記されていない?みたいですが、こっちの方が自然な仕様だと思いますね。

最後まで読んでいただいてありがとうございました。