API 学习记录
一、渲染管线
1. RenderPipelineAsset
namespace UnityEngine.Rendering
用来创建特殊的
IRenderPipeline资源类型。 默认继承自IRenderPipelineAsset. 管理此资源类型的生命周期, 也可以用来管理创建以及修改的事件等。
抽象方法
protected abstract RenderPipeline CreatePipeline(), 用来创建IRenderPipeline对象。其他默认Shader 和材质。
2. RenderPipeline
namespace UnityEngine.Rendering
定义一系列命令,用来设置一帧的渲染. 默认继承自
IRenderPipelineAsset. 管理此资源类型的生命周期, 也可以用来管理创建以及修改的事件等。
渲染回调函数。 protected override void Render(ScriptableRenderContext context, Camera[] cameras)。 自定义渲染入口函数。
void ProcessRenderRequests(ScriptableRenderContext context, Camera camera, List<Camera.RenderRequest> renderRequests)
3. ScriptableRenderContext
定义自定义渲染管线使用的状态和绘制命令。
BeginRenderPass
开始执行一个新的渲染通道。任何时候只能激活一个渲染通道。BeginScopedRenderPass 使用
Using语法包裹, 代替再写 EndRenderPass。任何时候只能激活一个渲染通道。BeginScopedSubPass
在一个RenderPass 下 调用一个新的子Pass。 使用Using语法包裹, 代替再写 EndRenderSubPass。任何时候只能激活一个子渲染通道。BeginSubPass
开始执行一个新的子渲染通道。任何时候只能激活一个子渲染通道。Cull
根据ScriptableCullingParameters执行筛选,这些参数通常是从当前渲染的摄像机中获得的。Camera.TryGetCullingParametersDrawGizmos
Schedules the drawing of a subset of Gizmos (before or after post-processing) for the given Camera. 在后处理前或者后处理后 执行相机绘制 Gizmos子集合。 'PreImageEffects, PostImageEffects'DrawRenderers 执行绘制一组可见对象,并可选择重写GPU的渲染状态
DrawShadows
执行为一个光源绘制阴影投射。DrawSkybox
绘制 skyboxDrawUIOverlay 绘制 UI overlay.
DrawWireOverlay
使用 Scene View Camer 绘制wireframe overlayEndRenderPass Schedules the end of a currently active render pass.
EndSubPass
结束当前激活的 subpassExecuteCommandBuffer
执行自定义渲染的 commandbufferExecuteCommandBufferAsync 异步执行自定义的渲染 commandbuffer, 队列顺序由
ComputeQueueType决定。InvokeOnRenderObjectCallback
执行Monobehaviour脚本的OnRenderObject回调函数。SetupCameraProperties 将相机的参数设置到 Shader的全局参数。
StartMultiEye Schedules a fine-grained beginning of stereo rendering on the ScriptableRenderContext.
StereoEndRender
Schedule notification of completion of stereo rendering on a single frame.StopMultiEye
Schedules a stop of stereo rendering on the ScriptableRenderContext.Submit
提交所有绘制命令EmitGeometryForCamera Emits UI geometry for rendering for the specified camera.
EmitWorldGeometryForSceneView Emits UI geometry into the Scene view for rendering.
二、渲染
1. 基础设置
// 裁剪参数
if (!camera.TryGetCullingParameters(out var cullingParameters)) return;
//重新设置
// 裁剪参数
CullingResults cullingResults = context.Cull(ref cullingParameters);
// 设置相机参数 到Shader 全局变量。
context.SetupCameraProperties(camera);
//光照 阴影。
//
- ScriptableCullingParameters 裁剪参数。
- CullingResults 裁剪Results参数。
2. 绘制
public void DrawRenderers(Rendering.CullingResults cullingResults, ref Rendering.DrawingSettings drawingSettings, ref Rendering.FilteringSettings filteringSettings);
public void DrawRenderers(Rendering.CullingResults cullingResults, ref Rendering.DrawingSettings drawingSettings, ref Rendering.FilteringSettings filteringSettings, ref Rendering.RenderStateBlock stateBlock);
public void DrawRenderers(Rendering.CullingResults cullingResults, ref Rendering.DrawingSettings drawingSettings, ref Rendering.FilteringSettings filteringSettings, NativeArray
renderTypes, NativeArray stateBlocks);
绘制子对象集合。
cullingResults 裁剪剔除后的可见对象。 drawingSettings 设置如何绘制物体 filteringSettings 指定渲染管道应该如何进一步过滤场景中的渲染器。 stateBlock 重定义渲染状态 renderTypes 选择渲染的RenderType 集合 stateBlocks 重定义渲染状态集合
- DrawingSettings
- ShaderTagId
- SortingSettings
- SortingCriteria
- SortingLayer 通过
sorting layer排序. - RenderQueue 通过
render queue排序. - BackToFront 通过
从后往前排序 - QuantizedFrontToBack 通过
从前往后排序. - OptimizeStateChanges 对对象进行排序以减少绘制状态的变化.
- CanvasOrder 通过Canvas顺序排序渲染器.
- RendererPriority 通过
renderer priority排序渲染器. - CommonOpaque 典型的不透明对象排序。
- CommonTransparent 典型的透明度排序。
可组合排序
- SortingLayer 通过
- SetShaderPassName Set the shader passes that this draw call can render.
- FilteringSettings
- excludeMotionVectorObjects true 当前渲染的对象排除在外,默认false.
- layerMask 只渲染此layermask
- renderingLayerMask The rendering layer mask to use when filtering available renderers for drawing.
- renderQueueRange 渲染QueueRange的设置
- sortingLayerRange 渲染 sortinglayer Range的设置。