【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なしの場合
※ドキュメント通り、機能しないパターン
Camera.enabled = falseの場合は"No cameras rendering"と表示されています。
コンソールで、GetComponent<Camera>().Render()
は実行されているはずです。
よって、ドキュメント通りCamera.Render()
はサポートされていない
Camera.enabled = false かつ Output Textureありの場合
※ドキュメントとは異なり、機能するパターン
Output Textureを設定しています。
こちらのシーンはCameraが描画したRenderTextureをQuadに反映して、そのQuadをMainCameraから見ています。
Camera.enabled = falseですが、Cameraを動かすとQuadの映像も動いていますね。
よって、ドキュメントとは異なりCamera.Render()
は機能していると考えられます。
雑感
多分、ほとんどの人が「だから何?」って思われたと思いますが、
ドキュメントを見ると"Not Supported"ってあったので、自分は「完全に機能していない」とずっと勘違いしていました。。。
でも、これがないと正直Universal RPでミラーもポータルも作りづらかったので、ちょっと積んでましたw。
確認して良かった、って話です。
仕様かどうかはわからなかったので、一応Bug Report経由でドキュメントのことを問い合わせています。
ドキュメントには明記されていない?みたいですが、こっちの方が自然な仕様だと思いますね。
最後まで読んでいただいてありがとうございました。