- 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)
13 KiB
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。
示例代码:
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 创建自定义渲染管线
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
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. 官方文档资源
文档生成时间: 2026-03-16 Unity 版本: 2023.1+