Files
XCEngine/docs/Unity_SRP_API_Reference.md
ssdfasd 0ce312e648 Remove RHI interface inheritance from all D3D12 backend classes
- D3D12Device, D3D12CommandQueue, D3D12CommandAllocator, D3D12Fence
- D3D12DescriptorHeap, D3D12QueryHeap, D3D12RootSignature
- D3D12PipelineState, D3D12Sampler, D3D12Shader
- D3D12Buffer, D3D12Texture, D3D12SwapChain

All D3D12 backend classes now directly use D3D12 APIs without
going through RHI interface abstraction. This decouples the
D3D12 backend from the RHI abstraction layer.

Test: D3D12 rendering test passed (screenshot comparison 100% match)
2026-03-16 15:48:14 +08:00

425 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` | 调用 RenderPipelineManager.beginCameraRendering 委托 |
| `BeginContextRendering` | 调用 RenderPipelineManager.beginContextRendering 和 RenderPipelineManager.beginFrameRendering 委托 |
| `EndCameraRendering` | 调用 RenderPipelineManager.endCameraRendering 委托 |
| `EndContextRendering` | 调用 RenderPipelineManager.endContextRendering 和 RenderPipelineManager.endFrameRendering 委托 |
| `SubmitRenderRequest` | 使用渲染管线向相机提交渲染请求(在 Unity 渲染循环之外) |
| `SupportsRenderRequest` | 检查渲染管线是否支持使用相机的 RequestData 类型 |
---
### 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`
**描述**: 渲染上下文的可编写脚本表示。用于调度和执行渲染命令。
**主要方法**:
| 方法 | 描述 |
|------|------|
| `BeginRenderPass()` | 开始渲染 pass |
| `EndRenderPass()` | 结束渲染 pass |
| `ExecuteCommandBuffer()` | 执行命令缓冲区 |
| `Submit()` | 提交所有待处理的渲染命令 |
| `SetupCameraProperties()` | 设置相机属性 |
---
### 2.4 ScriptableRenderPass 类
**命名空间**: `UnityEngine.Rendering`
**描述**: 可编写脚本的渲染 Pass 基类。用于实现自定义渲染 passes。
**主要成员**:
| 成员 | 描述 |
|------|------|
| `renderPassEvent` | 指定 Pass 在渲染管线中的执行时机 |
| `ConfigureInput()` | 配置渲染器输入 |
| `ConfigureTarget()` | 配置渲染目标 |
| `Execute()` | 执行 Pass 的渲染逻辑 |
| `FrameCleanup()` | 帧清理回调 |
| `OnCameraSetup()` | 相机设置回调 |
| `OnCameraCleanup()` | 相机清理回调 |
---
### 2.5 ScriptableRenderer 类
**命名空间**: `UnityEngine.Rendering`
**描述**: 可编写脚本的渲染器实现基类。
**主要方法**:
| 方法 | 描述 |
|------|------|
| `EnqueuePass()` | 将渲染 Pass 加入队列 |
| `Execute()` | 执行渲染 |
| `Initialize()` | 初始化渲染器 |
| `Submit()` | 提交渲染 |
---
### 2.6 RenderPassEvent 枚举
**命名空间**: `UnityEngine.Rendering`
**描述**: 指定渲染 Pass 在渲染管线中的执行时机。
**枚举值**:
| 值 | 描述 |
|------|------|
| `BeforeRendering` | 渲染开始前 |
| `BeforeRenderingShadows` | 阴影渲染前 |
| `BeforeRenderingPrePasses` | 预 Pass 前 |
| `BeforeRenderingOpaques` | 不透明物体前 |
| `BeforeRenderingGbuffer` | G-Buffer 前 |
| `BeforeRenderingLit` | 光照物体前 |
| `BeforeRenderingTransparents` | 透明物体前 |
| `BeforeRenderingOverlays` | 覆盖层前 |
| `AfterRendering` | 渲染结束后 |
| `AfterRenderingShadows` | 阴影渲染后 |
| `AfterRenderingPrePasses` | 预 Pass 后 |
| `AfterRenderingOpaques` | 不透明物体后 |
| `AfterRenderingGbuffer` | G-Buffer 后 |
| `AfterRenderingLit` | 光照物体后 |
| `AfterRenderingTransparents` | 透明物体后 |
| `AfterRenderingOverlays` | 覆盖层后 |
---
## 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 池化管理器,用于优化内存分配。
---
## 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`
URP 是建立在 SRP Core 之上的渲染管线,提供了更简化的 API。
### 5.1 UniversalRenderPipeline 类
**命名空间**: `UnityEngine.Rendering.Universal`
**描述**: URP 的主渲染管线类。
### 5.2 UniversalRenderPipelineAsset 类
**命名空间**: `UnityEngine.Rendering.Universal`
**描述**: URP 的渲染管线资源资产。
### 5.3 ForwardRenderer 类
**命名空间**: `UnityEngine.Rendering.Universal`
**描述**: URP 的前向渲染器实现。
### 5.4 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 的渲染器实现。
---
## 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 类 |
| `ProfilingSampler` | CPU/GPU 性能分析采样器 |
| `ProfilingScope` | 性能分析作用域 |
### 7.3 资源管理类
| 类名 | 描述 |
|------|------|
| `RenderPipelineGlobalSettings` | 渲染管线全局设置 |
| `RenderPipelineResources` | 渲染管线资源资产基类 |
| `ConstantBuffer` | 常量缓冲区管理 |
---
## 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/)
---
*文档生成时间: 2026-03-16*
*Unity 版本: 2023.1+*