Files
XCEngine/docs/Unity SRP API参考文档.md

622 lines
20 KiB
Markdown
Raw Normal View History

# Unity SRP (Scriptable Render Pipeline) API 参考文档
## 1. 概述
Unity 的可编写脚本渲染管线 (Scriptable Render Pipeline, SRP) 是一项允许通过 C# 脚本控制渲染的功能。SRP 是通用渲染管线 (URP) 和高清渲染管线 (HDRP) 的底层技术基础。
**命名空间**: `UnityEngine.Rendering`
---
## 2. 核心类 API
### 2.1 RenderPipeline 类
**命名空间**: `UnityEngine.Rendering`
**描述**: 提供实现可编写脚本渲染管线的渲染逻辑的方式。继承自此类以重写 `Render` 方法来实现自定义 SRP。
**示例代码**:
```csharp
using UnityEngine;
using UnityEngine.Rendering;
using System.Collections.Generic;
public class CustomRenderPipeline : RenderPipeline
{
protected override void Render(ScriptableRenderContext context, List<Camera> cameras)
{
// 实现自定义 SRP 渲染逻辑
}
}
```
**属性**:
| 属性 | 描述 |
|------|------|
| `disposed` | 返回 true 表示 RenderPipeline 无效或已销毁 |
**受保护的方法**:
| 方法 | 描述 |
|------|------|
| `IsPreviewSupported()` | 指定相机是否可以预览 |
| `IsRenderRequestSupported()` | 实现此方法以指定特定的相机和渲染请求组合是否受支持 |
| `ProcessRenderRequests()` | 执行使用 RenderPipeline.SubmitRenderRequest 提交的渲染请求 |
| `Render()` | 定义此 RenderPipeline 自定义渲染的入口点方法 |
**静态方法**:
| 方法 | 描述 |
|------|------|
| `BeginCameraRendering(ScriptableRenderContext, Camera)` | 调用 RenderPipelineManager.beginCameraRendering 委托 |
| `BeginContextRendering(ScriptableRenderContext, List<Camera>)` | 调用 RenderPipelineManager.beginContextRendering 和 beginFrameRendering 委托 |
| `BeginFrameRendering(ScriptableRenderContext, List<Camera>)` | 调用 RenderPipelineManager.beginFrameRendering 委托 |
| `EndCameraRendering(ScriptableRenderContext, Camera)` | 调用 RenderPipelineManager.endCameraRendering 委托 |
| `EndContextRendering(ScriptableRenderContext, List<Camera>)` | 调用 RenderPipelineManager.endContextRendering 和 endFrameRendering 委托 |
| `EndFrameRendering(ScriptableRenderContext, List<Camera>)` | 调用 RenderPipelineManager.endFrameRendering 委托 |
| `SubmitRenderRequest(Camera, RenderRequest)` | 向相机提交渲染请求(在 Unity 渲染循环之外) |
| `SupportsRenderRequest(Camera, RequestData)` | 检查渲染管线是否支持使用相机的 RequestData 类型 |
| `ProcessRenderRequests(List<RenderRequest>)` | 执行使用 Camera.SubmitRenderRequest 提交的渲染请求 |
---
### 2.2 RenderPipelineAsset 类
**命名空间**: `UnityEngine.Rendering`
**继承**: `ScriptableObject`
**描述**: 生成特定 IRenderPipeline 的资源。IRenderPipelineAsset 的默认实现。管理继承类型的生命周期,并确保创建的 IRenderPipeline 在资源更改时失效。
**属性**:
| 属性 | 描述 |
|------|------|
| `autodeskInteractiveMaskedShader` | 获取此管线的默认 Autodesk Interactive 遮罩 Shader |
| `autodeskInteractiveShader` | 获取此管线的默认 Autodesk Interactive Shader |
| `autodeskInteractiveTransparentShader` | 获取此管线的默认 Autodesk Interactive 透明 Shader |
| `default2DMaskMaterial` | 获取 Sprite Masks 使用的默认 2D 遮罩材质 |
| `default2DMaterial` | 返回此管线的默认 2D 材质 |
| `defaultLineMaterial` | 返回此管线的默认线条材质 |
| `defaultMaterial` | 返回此管线的默认材质 |
| `defaultParticleMaterial` | 返回此管线的默认粒子材质 |
| `defaultShader` | 返回此管线的默认 Shader |
| `defaultSpeedTree7Shader` | 返回 SpeedTree v7 Shader |
| `defaultSpeedTree8Shader` | 返回 SpeedTree v8 Shader |
| `defaultSpeedTree9Shader` | 返回 SpeedTree v9 Shader |
| `defaultTerrainMaterial` | 返回此管线的默认地形材质 |
| `defaultUIETC1SupportedMaterial` | 返回默认 UI ETC1 材质 |
| `defaultUIMaterial` | 返回默认 UI 材质 |
| `defaultUIOverdrawMaterial` | 返回默认 UI overdraw 材质 |
| `pipelineType` | 返回与此 RenderPipelineAsset 实例关联的 RenderPipeline 类型 |
| `renderPipelineShaderTag` | 返回此资源描述的渲染管线的 Shader Tag 值 |
| `terrainBrushPassIndex` | 编辑器中地形笔刷的渲染索引 |
| `terrainDetailGrassBillboardShader` | 返回此管线的细节草 Billboard Shader |
| `terrainDetailGrassShader` | 返回此管线的细节草 Shader |
| `terrainDetailLitShader` | 返回此管线的细节光照 Shader |
**受保护的方法**:
| 方法 | 描述 |
|------|------|
| `CreatePipeline()` | 创建此资源特有的 IRenderPipeline |
| `EnsureGlobalSettings()` | 确保全局设置已准备好并注册到 GraphicsSettings |
| `OnDisable()` | RenderPipelineAsset 的 OnDisable 默认实现 |
| `OnValidate()` | RenderPipelineAsset 的 OnValidate 默认实现 |
---
### 2.3 ScriptableRenderContext 类
**命名空间**: `UnityEngine.Rendering`
**类型**: struct (结构体)
**描述**: 定义自定义渲染管线使用的状态和绘制命令。当定义自定义 RenderPipeline 时,使用 ScriptableRenderContext 来调度和提交状态更新以及绘制命令到 GPU。
**公共方法**:
| 方法 | 描述 |
|------|------|
| `BeginRenderPass(RenderTargetIdentifier, RenderPassAttachment, ClearFlag, Color)` | 调度新渲染 pass 的开始 |
| `BeginScopedRenderPass(...)` | 调度渲染 pass 开始,使用 using 语句会自动调用 EndRenderPass |
| `BeginScopedSubPass(...)` | 调度子 pass 开始,使用 using 语句会自动调用 EndSubPass |
| `BeginSubPass(...)` | 调度子 pass 的开始 |
| `CreateGizmoRendererList(...)` | 创建新的 Gizmo RendererList |
| `CreateRendererList(...)` | 创建新的渲染器 RendererList |
| `CreateShadowRendererList(...)` | 创建新的阴影 RendererList |
| `CreateSkyboxRendererList(...)` | 创建新的天空盒 RendererList |
| `CreateUIOverlayRendererList(...)` | 创建新的 UIOverlay RendererList |
| `CreateWireOverlayRendererList(...)` | 创建新的线框覆盖层 RendererList |
| `Cull(ScriptableCullingParameters)` | 执行基于 ScriptableCullingParameters 的剔除 |
| `CullShadowCasters(...)` | 对所有可见光源执行阴影投射体剔除 |
| `DrawGizmos(Camera, GizmoSubset)` | 调度绘制 Gizmos 子集 |
| `DrawUIOverlay(Camera)` | 绘制 UI 覆盖层 |
| `DrawWireOverlay(Camera)` | 调度线框覆盖层绘制 |
| `EndRenderPass()` | 调度当前活动渲染 pass 的结束 |
| `EndSubPass()` | 调度当前活动子 pass 的结束 |
| `ExecuteCommandBuffer(CommandBuffer)` | 调度自定义图形 CommandBuffer 的执行 |
| `ExecuteCommandBufferAsync(CommandBuffer, ComputeQueueType)` | 在异步计算队列上执行 CommandBuffer |
| `HasInvokeOnRenderObjectCallbacks()` | 检查场景中是否有注册 OnRenderObject 回调的对象 |
| `InvokeOnRenderObjectCallback(Camera)` | 调度 MonoBehaviour 脚本的 OnRenderObject 回调执行 |
| `PrepareRendererListsAsync(List<RendererList>)` | 启动在后台处理提供的 RendererLists |
| `QueryRendererListStatus(RendererList)` | 查询 RendererList 的状态 |
| `SetupCameraProperties(Camera)` | 调度相机特定全局 Shader 变量的设置 |
| `StartMultiEye(Camera)` | 调度在 ScriptableRenderContext 上开始细粒度立体渲染 |
| `StopMultiEye(Camera)` | 调度停止立体渲染 |
| `StereoEndRender(Camera)` | 调度单帧立体渲染完成通知 |
| `Submit()` | 提交所有调度的命令到渲染循环执行 |
| `SubmitForRenderPassValidation()` | 验证渲染 pass 是否可以执行调度的命令 |
**静态方法**:
| 方法 | 描述 |
|------|------|
| `EmitGeometryForCamera(Camera)` | 为指定相机发射 UI 几何体进行渲染 |
| `EmitWorldGeometryForSceneView(SceneView)` | 为场景视图发射 UI 几何体 |
| `PopDisableApiRenderers()` | 启用渲染器场景节点的即时添加和移除 |
| `PushDisableApiRenderers()` | 阻止渲染器场景节点的即时添加或移除 |
---
### 2.4 ScriptableRenderPass 类
**命名空间**: `UnityEngine.Rendering`
**描述**: 可编写脚本的渲染 Pass 基类。用于实现自定义渲染 passes。
**主要成员**:
| 成员 | 描述 |
|------|------|
| `renderPassEvent` | 指定 Pass 在渲染管线中的执行时机 |
| `ConfigureInput()` | 配置渲染器输入 |
| `ConfigureTarget()` | 配置渲染目标 |
| `Execute()` | 执行 Pass 的渲染逻辑 |
| `FrameCleanup()` | 帧清理回调 |
| `OnCameraSetup()` | 相机设置回调 |
| `OnCameraCleanup()` | 相机清理回调 |
---
### 2.5 ScriptableRenderer 类
**命名空间**: `UnityEngine.Rendering`
**描述**: 可编写脚本的渲染器实现基类。
**主要方法**:
| 方法 | 描述 |
|------|------|
| `EnqueuePass(ScriptableRenderPass)` | 将渲染 Pass 加入队列 |
| `Execute(ScriptableRenderContext, ref RenderingData)` | 执行渲染 |
| `Initialize()` | 初始化渲染器 |
| `Submit()` | 提交渲染 |
| `ConfigureCameraTarget(RenderTargetIdentifier, RenderTargetIdentifier)` | 配置相机渲染目标 |
| `ConfigureColorStoreAction(RenderTargetStoreAction)` | 配置颜色存储操作 |
| `ConfigureDepthStoreAction(RenderTargetStoreAction)` | 配置深度存储操作 |
**属性**:
| 属性 | 描述 |
|------|------|
| `supportedRenderingFeatures` | 支持的渲染特性 |
| `rendererFeatures` | 渲染器特性列表 |
| `krenderGraphResourceSet` | 渲染图资源集 |
---
### 2.6 RenderPassEvent 枚举
**命名空间**: `UnityEngine.Rendering`
**描述**: 指定渲染 Pass 在渲染管线中的执行时机。
**枚举值**:
| 值 | 描述 |
|------|------|
| `BeforeRendering` | 渲染开始前 |
| `BeforeRenderingShadows` | 阴影渲染前 |
| `BeforeRenderingPrePasses` | 预 Pass (如深度预通道) 前 |
| `BeforeRenderingOpaques` | 不透明物体渲染前 |
| `BeforeRenderingGbuffer` | G-Buffer (延迟渲染) 前 |
| `BeforeRenderingLit` | 光照物体前 |
| `BeforeRenderingTransparents` | 透明物体渲染前 |
| `BeforeRenderingOverlays` | 覆盖层 (如 UI) 前 |
| `BeforeAlphaMask` | Alpha 遮罩前 |
| `AfterRendering` | 渲染结束后 |
| `AfterRenderingShadows` | 阴影渲染后 |
| `AfterRenderingPrePasses` | 预 Pass 后 |
| `AfterRenderingOpaques` | 不透明物体渲染后 |
| `AfterRenderingGbuffer` | G-Buffer 后 |
| `AfterRenderingLit` | 光照物体后 |
| `AfterRenderingTransparents` | 透明物体渲染后 |
| `AfterRenderingOverlays` | 覆盖层后 |
| `AfterAlphaMask` | Alpha 遮罩后 |
---
### 2.7 CullingResults 类
**命名空间**: `UnityEngine.Rendering`
**描述**: 包含剔除操作的结果,用于渲染对象和光源。
**主要方法**:
| 方法 | 描述 |
|------|------|
| `FillLightAndReflectionProbeIndices(...)` | 填充光照和反射探针索引 |
| `GetLightIndexMap()` | 获取光照索引映射 |
| `GetReflectionProbeIndexMap()` | 获取反射探针索引映射 |
| `SetLightIndexMap(int[], int[])` | 设置光照索引映射 |
**属性**:
| 属性 | 描述 |
|------|------|
| `visibleLights` | 可见光源列表 |
| `visibleReflectionProbes` | 可见反射探针列表 |
| `lightAndReflectionProbeIndex` | 光照和反射探针索引数据 |
---
### 2.8 ScriptableCullingParameters 结构体
**命名空间**: `UnityEngine.Rendering`
**描述**: 包含用于剔除操作的参数。
**主要成员**:
| 成员 | 描述 |
|------|------|
| `camera` | 剔除相机 |
| `cullingPlaneSet` | 剔除平面集 |
| `cullingMask` | 剔除遮罩 |
| `lightCullingMode` | 光照剔除模式 |
| `reflectionProbeCullingMode` | 反射探针剔除模式 |
| `shadowDistance` | 阴影距离 |
| `shadowNearPlane` | 阴影近平面 |
| `maximumPortalCullingJobs` | 最大门户剔除作业数 |
**静态方法**:
| 方法 | 描述 |
|------|------|
| `GetCullingParameters(Camera, ScriptableCullingParameters)` | 从相机获取剔除参数 |
| `GetCullingParametersForEditor(Camera, ScriptableCullingParameters)` | 为编辑器获取剔除参数 |
---
## 3. CommandBuffer 相关 API
### 3.1 CommandBuffer 类
**命名空间**: `UnityEngine.Rendering`
**描述**: 用于存储渲染命令的缓冲区。
**常用方法**:
| 方法 | 描述 |
|------|------|
| `Blit()` | 执行纹理拷贝 (blit) 操作 |
| `DrawRenderer()` | 绘制渲染器 |
| `DrawMesh()` | 绘制网格 |
| `DrawMeshInstanced()` | 绘制实例化网格 |
| `SetRenderTarget()` | 设置渲染目标 |
| `SetGlobalTexture()` | 设置全局纹理 |
| `SetGlobalFloat()` | 设置全局浮点数 |
| `SetGlobalVector()` | 设置全局向量 |
| `SetGlobalMatrix()` | 设置全局矩阵 |
| `SetViewProjectionMatrices()` | 设置视图投影矩阵 |
| `ClearRenderTarget()` | 清除渲染目标 |
| `CopyTexture()` | 复制纹理 |
| `ComputeDispatch()` | 计算着色器调度 |
### 3.2 CommandBufferPool 类
**命名空间**: `UnityEngine.Rendering`
**描述**: CommandBuffer 池化管理器,用于优化内存分配。
**静态方法**:
| 方法 | 描述 |
|------|------|
| `Get(string)` | 从池中获取 CommandBuffer |
| `Release(CommandBuffer)` | 释放 CommandBuffer 回池 |
| `Create(string)` | 创建新的 CommandBuffer |
| `ReleaseAll()` | 释放所有池化的 CommandBuffer |
### 3.3 RenderingData 结构体
**命名空间**: `UnityEngine.Rendering`
**描述**: 包含传递给 ScriptableRenderPass.Execute 的渲染数据。
**属性**:
| 属性 | 描述 |
|------|------|
| `cameraData` | 相机数据 |
| `cullingResults` | 剔除结果 |
| `lightData` | 光照数据 |
| `shadowData` | 阴影数据 |
### 3.4 CameraData 结构体
**命名空间**: `UnityEngine.Rendering`
**描述**: 包含相机相关的渲染数据。
**属性**:
| 属性 | 描述 |
|------|------|
| `camera` | Unity Camera 对象 |
| `projectionMatrix` | 投影矩阵 |
| `viewMatrix` | 视图矩阵 |
| `renderer` | 渲染器 |
---
## 4. 渲染相关类
### 4.1 ShaderTagId
**命名空间**: `UnityEngine.Rendering`
**描述**: Shader 标签标识符,用于标识 Shader 的渲染通道。
### 4.2 LightProbe
**命名空间**: `UnityEngine.Rendering`
**描述**: 光照探针管理类,用于处理光照探针数据。
### 4.3 DrawRendererSettings
**命名空间**: `UnityEngine.Rendering`
**描述**: 渲染器绘制设置结构体,用于配置渲染器绘制参数。
**主要成员**:
| 成员 | 描述 |
|------|------|
| `sorting` | 排序设置 |
| `flags` | 渲染标志 |
| `rendererConfiguration` | 渲染器配置 |
| `passIndex` | Pass 索引 |
---
## 5. URP (Universal Render Pipeline) 核心 API
**包**: `com.unity.render-pipelines.universal`
**命名空间**: `UnityEngine.Rendering.Universal`
URP 是建立在 SRP Core 之上的渲染管线,提供了更简化的 API。
### 5.1 UniversalRenderPipeline 类
**命名空间**: `UnityEngine.Rendering.Universal`
**描述**: URP 的主渲染管线类。
**属性**:
| 属性 | 描述 |
|------|------|
| `asset` | 当前 URP 资源 |
| `current` | 当前活动的渲染管线 |
### 5.2 UniversalRenderPipelineAsset 类
**命名空间**: `UnityEngine.Rendering.Universal`
**描述**: URP 的渲染管线资源资产。
### 5.3 ForwardRenderer 类
**命名空间**: `UnityEngine.Rendering.Universal`
**描述**: URP 的前向渲染器实现。
### 5.4 RenderingData (URP扩展)
URP 扩展了基础的 RenderingData添加了 URP 特有的渲染数据。
### 5.5 URP 核心 Pass 类
| 类名 | 描述 |
|------|------|
| `ScriptableRenderPass` | URP 中继承自基类的渲染 Pass |
| `ScriptableBlitPass` | Blit 渲染 Pass |
| `ScriptableFullscreenPass` | 全屏渲染 Pass |
| `ColorGradingLutPass` | 颜色分级 LUT Pass |
| `BloomPass` | 泛光 Pass |
| `DepthOfFieldPass` | 景深 Pass |
| `MotionVectorPass` | 运动矢量 Pass |
### 5.6 RenderPassEvent (URP扩展)
URP 扩展了标准的 RenderPassEvent添加了 URP 特有的渲染事件。
---
## 6. HDRP (High Definition Render Pipeline) 核心 API
**包**: `com.unity.render-pipelines.high-definition`
**命名空间**: `UnityEngine.Rendering.HighDefinition`
HDRP 是建立在 SRP Core 之上的高端渲染管线,提供了高质量的渲染效果。
### 6.1 HDRenderPipeline 类
**命名空间**: `UnityEngine.Rendering.HighDefinition`
**描述**: HDRP 的主渲染管线类。
### 6.2 HDRenderPipelineAsset 类
**命名空间**: `UnityEngine.Rendering.HighDefinition`
**描述**: HDRP 的渲染管线资源资产。
### 6.3 HDRenderer 类
**命名空间**: `UnityEngine.Rendering.HighDefinition`
**描述**: HDRP 的渲染器实现。
### 6.4 HDRP 核心组件
| 类名 | 描述 |
|------|------|
| `HDRenderPipelineAsset` | HDRP 资源资产 |
| `HDRenderer` | HDRP 渲染器 |
| `HDBaker` | 光照烘焙器 |
| `RayTracingShader` | 光线追踪着色器 |
### 6.5 HDRP 专用 Pass
| Pass 类 | 描述 |
|---------|------|
| `DeferredPass` | 延迟渲染 Pass |
| `ForwardEmissivePass` | 前向发光 Pass |
| `TransparentDepthPrePass` | 透明物体深度预 Pass |
| `MotionVectorPass` | 运动矢量 Pass |
---
## 7. SRP Core 核心类 (com.unity.render-pipelines.core)
### 7.1 核心工具类
| 类名 | 描述 |
|------|------|
| `CoreUtils` | SRP 核心工具函数集合 |
| `CoreMatrixUtils` | 矩阵操作工具函数 |
| `Blitter` | Blit (纹理拷贝) 工具 |
| `RTHandle` | 可自动缩放的渲染纹理 |
| `RTHandleSystem` | RTHandle 纹理管理系统 |
| `Volume` | 通用 Volume 组件 |
| `VolumeManager` | Volume 全局管理器 |
| `VolumeProfile` | Volume 设置资源 |
| `VolumeComponent` | Volume 组件基类 |
### 7.2 调试相关类
| 类名 | 描述 |
|------|------|
| `DebugManager` | 调试窗口管理器 |
| `DebugUI` | 调试 UI 类 |
| `DebugUI.Widget` | 调试 UI 组件基类 |
| `ProfilingSampler` | CPU/GPU 性能分析采样器 |
| `ProfilingScope` | 性能分析作用域 |
| `Recorder` | 性能记录器 |
| `Profiler` | 性能分析器 |
### 7.3 资源管理类
| 类名 | 描述 |
|------|------|
| `RenderPipelineGlobalSettings` | 渲染管线全局设置 |
| `RenderPipelineResources` | 渲染管线资源资产基类 |
| `ConstantBuffer` | 常量缓冲区管理 |
| `ShaderVariation` | Shader 变体管理 |
| `MaterialDescription` | 材质描述 |
### 7.4 渲染 Pass 基类
| 类名 | 描述 |
|------|------|
| `ScriptableRenderPass` | 可编写脚本的渲染 Pass 基类 |
| `ScriptableBlitPass` | Blit 操作 Pass 基类 |
| `ScriptableCopyPass` | 拷贝 Pass 基类 |
### 7.5 渲染器特性
| 类名 | 描述 |
|------|------|
| `RenderingFeatures` | 渲染特性集合 |
| `RendererFeatures` | 渲染器特性集合 |
| `RenderPipelineFeature` | 渲染管线特性基类 |
---
## 8. 使用示例
### 8.1 创建自定义渲染管线
```csharp
using UnityEngine;
using UnityEngine.Rendering;
using System.Collections.Generic;
public class CustomRenderPipeline : RenderPipeline
{
protected override void Render(ScriptableRenderContext context, List<Camera> cameras)
{
foreach (var camera in cameras)
{
// 渲染每个相机
Render(context, camera);
}
// 提交渲染命令
context.Submit();
}
private void Render(ScriptableRenderContext context, Camera camera)
{
// 设置相机属性
context.SetupCameraProperties(camera);
// 创建命令缓冲区
CommandBuffer cmd = CommandBufferPool.Get("Clear");
cmd.ClearRenderTarget(true, true, Color.black);
context.ExecuteCommandBuffer(cmd);
CommandBufferPool.Release(cmd);
// 提交
context.Submit();
}
}
```
### 8.2 创建自定义渲染 Pass
```csharp
using UnityEngine;
using UnityEngine.Rendering;
public class CustomRenderPass : ScriptableRenderPass
{
public CustomRenderPass()
{
// 设置 Pass 执行时机
renderPassEvent = RenderPassEvent.BeforeRenderingOpaques;
}
public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
{
// 相机设置
}
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
// 执行渲染逻辑
}
public override void FrameCleanup(CommandBuffer cmd)
{
// 帧清理
}
}
```
---
## 9. 官方文档资源
- [SRP 官方文档](https://docs.unity3d.com/Manual/ScriptableRenderPipeline.html)
- [URP Scripting API](https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@latest/api/)
- [HDRP Scripting API](https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@latest/api/)
- [SRP Core Scripting API](https://docs.unity3d.com/Packages/com.unity.render-pipelines.core@latest/api/)
---
*文档版本: 1.1*
*更新日期: 2026-03-16*
*Unity 版本: 6.3 LTS (6000.3)*
*基于官方 Unity API 文档调研整理*