- Relocated OpenGLDevice, OpenGLShader, OpenGLBuffer, OpenGLVertexArray, OpenGLTexture to engine/ - Updated engine/CMakeLists.txt to include OpenGL backend source files - Updated tests/OpenGL/CMakeLists.txt to use engine backend - Added OpenGLTexture class implementation
20 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(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 创建自定义渲染管线
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. 官方文档资源
文档版本: 1.1 更新日期: 2026-03-16 Unity 版本: 6.3 LTS (6000.3) 基于官方 Unity API 文档调研整理