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.TryGetCullingParameters

  • DrawGizmos
    Schedules the drawing of a subset of Gizmos (before or after post-processing) for the given Camera. 在后处理前或者后处理后 执行相机绘制 Gizmos子集合。 'PreImageEffects, PostImageEffects'

  • DrawRenderers 执行绘制一组可见对象,并可选择重写GPU的渲染状态

  • DrawShadows
    执行为一个光源绘制阴影投射。

  • DrawSkybox
    绘制 skybox

  • DrawUIOverlay 绘制 UI overlay.

  • DrawWireOverlay
    使用 Scene View Camer 绘制 wireframe overlay

  • EndRenderPass Schedules the end of a currently active render pass.

  • EndSubPass
    结束当前激活的 subpass

  • ExecuteCommandBuffer
    执行自定义渲染的 commandbuffer

  • ExecuteCommandBufferAsync 异步执行自定义的渲染 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 典型的透明度排序。

    可组合排序

  • 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的设置。

3. Drawcall API


文章作者: Yonggang Long
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Yonggang Long !
 上一篇
2022-08-10 Yonggang Long
下一篇 
2022-08-10 Yonggang Long
  目录