結論是顯而易見的:同一幀,對每個相機都會渲染一次。
實驗準備:
腳本:
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方法。