渲染入口

SRP资源控制配置,但渲染过程是由SRP渲染管线实例处理。当开发一个SRP时,您还需要创建这个类,因为这是所有渲染逻辑应该存在的地方。

在最简单的形式中,渲染管线实例非常简单,它只包含一个函数“Render”,最好的方法是认为它是一个空白画布,如果您正在编写自定义渲染管线,您可以自由地以任何您认为合适的方式执行渲染。Render调用接受两个参数

  • ScriptableRenderContext 这是一种命令缓冲上下文,您可以在其中对要执行的渲染操作进行排序。
  • 一组 Camera被认为已启用并应用于渲染。

一个基本的管线

这里的资源示例返回了一个管线实例,该管线实例类可能如下所示。

  1. public class BasicPipeInstance : RenderPipeline
  2. {
  3. private Color m_ClearColor = Color.black;
  4. public BasicPipeInstance(Color clearColor)
  5. {
  6. m_ClearColor = clearColor;
  7. }
  8. public override void Render(ScriptableRenderContext context, Camera[] cameras)
  9. {
  10. // does not so much yet :()
  11. base.Render(context, cameras);
  12. // 用配置颜色清空buffer
  13. var cmd = new CommandBuffer();
  14. cmd.ClearRenderTarget(true, true, m_ClearColor);
  15. context.ExecuteCommandBuffer(cmd);
  16. cmd.Release();
  17. context.Submit();
  18. }
  19. }

这个管线所做的是执行一个简单的绘制:将屏幕清除为给定的颜色,该颜色是在创建管线实例时由资源设置的。这里有几点需要注意:

  • 现有的Unity CommandBuffers 被用作许多操作 (本例为ClearRenderTarget)
  • CommandBuffers是根据传入的上下文安排执行的
  • 渲染的最后一步是调用Submit,这将在渲染上下文上执行所有命令序列

RenderPipeline 的Render函数用于输入自定义渲染的逻辑代码。在这里可以执行剔除、过滤、更改渲染目标和绘制等步骤。这就是构建渲染器的地方!