如果您要创建自己的可编程渲染管线 (SRP),您的项目必须包含:
一个继承自 RenderPipelineAsset 并覆盖其 CreatePipeline() 方法的脚本。此脚本用于定义渲染管线资源。一个继承自 RenderPipeline 并覆盖其 Render() 方法的脚本。此脚本用于定义渲染管线实例。一个从 RenderPipelineAsset 脚本创建的渲染管线资源。此资源充当渲染管线实例的工厂类。因为这些元素非常紧密相关,所以应该同时创建它们。
创建基本渲染管线资源和渲染管线实例以下示例显示了如何为实例化渲染管线实例的基本自定义渲染管线资源创建脚本、如何创建可定义渲染管线实例的脚本以及如何创建渲染管线资源本身。
创建一个名为 ExampleRenderPipelineAsset.cs 的 C# 脚本。
将以下代码复制并粘贴到新脚本中:
using UnityEngine;using UnityEngine.Rendering;// CreateAssetMenu 属性让您可以在 Unity Editor 中创建此类的实例。[CreateAssetMenu(menuName = "Rendering/ExampleRenderPipelineAsset")]public class ExampleRenderPipelineAsset : RenderPipelineAsset{ // Unity 在渲染第一帧之前调用此方法。 // 如果渲染管线资源上的设置改变,Unity 将销毁当前的渲染管线实例,并在渲染下一帧之前再次调用此方法。 protected override RenderPipeline CreatePipeline() { // 实例化此自定义 SRP 用于渲染的渲染管线。 return new ExampleRenderPipelineInstance(); }}创建一个名为 ExampleRenderPipelineInstance.cs 的 C# 脚本。
将以下代码复制并粘贴到新脚本中:
using UnityEngine;using UnityEngine.Rendering;public class ExampleRenderPipelineInstance : RenderPipeline{ public ExampleRenderPipelineInstance() { } // 对于当前正在渲染的每个 CameraType,Unity 每帧调用一次此方法。 protected override void Render (ScriptableRenderContext context, Camera[] cameras) { // 可以在此处编写自定义渲染代码。通过自定义此方法可以自定义 SRP。 }}在 Project 视图中,单击添加 (+) 按钮,或者打开上下文菜单并导航至 Create,然后选择 Rendering > Example Render Pipeline Asset。Unity 在 Project 视图中创建新的渲染管线资源。
创建可配置的渲染管线资源和渲染管线实例默认情况下,渲染管线资源存储有关用于渲染的渲染管线实例以及 Editor 中使用的默认材质和着色器的信息。在 RenderPipelineAsset 脚本中,您可以扩展渲染管线资源以存储