Skip to content

SRP Custom

zilch edited this page Feb 9, 2021 · 1 revision

在SRP中自定义渲染管线

RenderPipelineAsset分析

所有自定义的渲染管线资源,都要首先继承RenderPipelineAsset,并实现CreatePipeline方法:

protected override RenderPipeline CreatePipeline()
{
    throw new System.NotImplementedException();
}

在URP中,看到这块关键代码是这样的:

protected override RenderPipeline CreatePipeline()
{
    .....some code ....

    CreateRenderers();
    return new UniversalRenderPipeline(this);
}

RenderPipeline

RenderPipelineAsset.CreatePipeline需要返回RenderPipeline对象,RenderPipeline是一个abstract类,必须实现Render接口:

protected override void Render(ScriptableRenderContext context, Camera[] cameras)
{
}

Render函数提供了两个参数,分别是ScriptableRenderContext和Camera数组。 后续的渲染即围绕这两个参数展开。 我们可以根据自己的管线定义,针对不同的相机,采取不同的渲染策略。

Culling

首先是摄像机裁剪工作 。

Camera.TryGetCullingParameters(out ScriptableCullingParameters cullingParameters) => bool

从每个camera,都可以获取到ScriptableCullingParameters参数

然后利用:

ScriptableRenderContext.Cull(ScriptableCullingParameters cullingParameters) => CullingResults

可以得到CullingResults对象。

传送门 - SRP中的裁剪

完成裁剪后,就可以利用接口ScriptableRenderContext.DrawRenderers进行渲染

Clone this wiki locally