srp中render方法執行分析

結論是顯而易見的:同一幀,對每個相機都會渲染一次。

實驗準備:
腳本:

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方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章