结论是显而易见的:同一帧,对每个相机都会渲染一次。
实验准备:
脚本:
public class MyPipeline : RenderPipeline
{
CullResults cull;
Material errorMaterial;
CommandBuffer cameraBuffer = new CommandBuffer { name = "Render Camera" };
int count = 0;
public override void Render(ScriptableRenderContext renderContext, Camera[] cameras)
{
base.Render(renderContext, cameras);
string str = "xxx = " + count;
Debug.LogError(str);
count++;
str = "time frame count = " + Time.frameCount;
Debug.LogError(str);
for (int i = 0; i < cameras.Length; ++i)
{
str = "i=" + i + " name=" + cameras[i].name + " type = " + cameras[i].cameraType;
Debug.LogError(str);
}
foreach (var camera in cameras)
{
Render(renderContext, camera);
}
}
如图所示,这里有四个相机:场景中的两个:Main Camera和Camera
scene场景中的一个:SceneCamera
已经预览长宽的一个:PreviewCamera
如果我们把scene关闭掉:
则此时,只有两个场景中的相机了。
也即是在srp,传递的数组:
cameras,是将游戏的相机和预览+scene的相机分块传递的。
游戏相机作为一个数组一次传入。
scene和预览相机分两次传入。
总计:三次调用这个Render方法。