Files
XCEngine/docs/api/XCEngine/Rendering/Rendering.md

125 lines
5.7 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.
# Rendering
**命名空间**: `XCEngine::Rendering`
**类型**: `module`
**描述**: 当前场景渲染主链路所在模块,覆盖 request 规划、场景提取、frame data、主管线执行、资源缓存、shadow-caster / depth-only / object-id 输出,以及调用方注入的 pre / post / overlay pass。
## 概览
当前 `Rendering` 模块已经不再是简单的“scene -> pipeline”两段式结构而是一条更完整的提交流程
1. [Planning](Planning/Planning.md) 规划并排序 `CameraRenderRequest`
2. [Execution](Execution/Execution.md) 执行单个 request 或 request 数组。
3. [Extraction](Extraction/Extraction.md) 生成 `RenderSceneData`
4. [RenderPipelineAsset](RenderPipelineAsset/RenderPipelineAsset.md) 决定当前主管线实例如何创建。
5. [RenderPipeline](RenderPipeline/RenderPipeline.md) 执行主场景绘制。
6. [Caches](Caches/Caches.md)、[Passes](Passes/Passes.md) 和 [Picking](Picking/Picking.md) 子模块补上资源复用、shadow-caster、depth-only、object-id 与其它附加阶段。
默认主链路当前是:
- [BuiltinForwardPipelineAsset](Pipelines/BuiltinForwardPipelineAsset/BuiltinForwardPipelineAsset.md)
- [BuiltinForwardPipeline](Pipelines/BuiltinForwardPipeline/BuiltinForwardPipeline.md)
这套分层本身就是当前渲染架构最重要的设计点。
- `Planning` 处理“这次该画什么、顺序是什么”
- `Execution` 处理“单个 request 怎样被真正执行”
- `Extraction` 处理“场景语义怎样压平成渲染语义”
- `RenderPipeline` 处理“压平后的渲染数据怎样落到 GPU”
对商业级引擎来说,这种拆法的价值很直接:
- 相机编排规则不会和具体 pipeline 绑死
- Editor 可以在 request 层注入 object-id、outline、overlay而不必改主管线
- 同一条主管线既能服务运行时,也能服务 Scene View、离屏目标和工具链
## 当前主流程
对一台相机的大致流程是:
1. `SceneRenderer` 生成 `CameraRenderRequest`
2. `CameraRenderer` 校验 request 和 render-area。
3. `RenderSceneExtractor` 基于相机和 render-area 提取 `RenderSceneData`
4. 执行 `preScenePasses`
5. 如有需要,执行 shadow-caster / depth-only scene pass。
6. `RenderPipeline` 绘制主颜色目标。
7. 如有需要,执行 object-id pass。
8. 执行 `postScenePasses``overlayPasses`
Scene View 里的无限网格、选中轮廓和编辑器 overlay当前都不是 `CameraRenderer` 内部动态规划出来的,而是先在 Editor 层组装成 request plan再通过 `postScenePasses` / `overlayPasses` 接入这条主链。
如果你想理解这条链路里最容易写错的部分,优先看:
- 哪些相机会进入本次提交
- base / overlay 如何排序
- `CameraClearMode::Auto` 为什么不是无脑清颜色
- normalized viewport 怎样和已有 `RenderSurface::renderArea` 叠加
这些规则目前都集中收口在 request planning 这一层,而不是散落在 `CameraRenderer` 或 builtin pipeline 里。
## 材质与 shader 语义如何进入主链路
[RenderMaterialUtility](RenderMaterialUtility/RenderMaterialUtility.md) 当前负责把材质里的:
- `shaderPass`
- `LightMode`
- `renderQueue`
- `renderState`
翻译成渲染链路可消费的规则。
在默认 builtin forward 路径里shader pass 的 `resources` 声明还会进一步参与 `PassResourceLayout` 构建,因为 [BuiltinForwardPipeline](Pipelines/BuiltinForwardPipeline/BuiltinForwardPipeline.md) 已经开始按资源契约生成 descriptor set layout。
## 当前基础设施分层
更底层的基础协议由这些分层补齐:
- [Planning](Planning/Planning.md)
- [Execution](Execution/Execution.md)
- [FrameData](FrameData/FrameData.md)
- [Extraction](Extraction/Extraction.md)
- [Caches](Caches/Caches.md)
- [RenderPass](RenderPass/RenderPass.md)
- [Picking](Picking/Picking.md)
它们分别负责 request 规划、request 执行、frame data 协议、scene helper、GPU 资源缓存、通用 pass 生命周期和 object-id/picking 约定。
## 当前实现边界
- 默认主路径仍然是 builtin forward不是完整 SRP 或 render graph。
- `RenderPipelineAsset` 已经接入默认主链路,但当前还不是项目资源数据库里的完整 renderer asset。
- 多相机排序由 `SceneRenderer` 处理,`CameraRenderer` 只执行单个 request。
- 编辑器特有的 grid / outline / overlay 组装逻辑不在 `Rendering` 模块里完成,而是在 Editor 层先转成 `RenderPassSequence`
## 分层索引
- [Execution](Execution/Execution.md) - `Execution/`
- [Planning](Planning/Planning.md) - `Planning/`
- [FrameData](FrameData/FrameData.md) - `FrameData/`
- [Extraction](Extraction/Extraction.md) - `Extraction/`
- [Caches](Caches/Caches.md) - `Caches/`
- [Passes](Passes/Passes.md) - `Passes/`
- [Picking](Picking/Picking.md) - `Picking/`
- [RenderContext](RenderContext/RenderContext.md) - `RenderContext.h`
- [RenderPass](RenderPass/RenderPass.md) - `RenderPass.h`
- [RenderPipeline](RenderPipeline/RenderPipeline.md) - `RenderPipeline.h`
- [RenderPipelineAsset](RenderPipelineAsset/RenderPipelineAsset.md) - `RenderPipelineAsset.h`
- [RenderSurface](RenderSurface/RenderSurface.md) - `RenderSurface.h`
- [Pipelines](Pipelines/Pipelines.md) - `Pipelines/`
- [Materials](Materials/Materials.md) - `Materials/`
- [Builtin](Builtin/Builtin.md) - `Builtin/`
## 相关指南
- [Camera Request Planning And Clear Rules](../../_guides/Rendering/Camera-Request-Planning-And-Clear-Rules.md)
- [Scene Extraction And Builtin Forward Pipeline](../../_guides/Rendering/Scene-Extraction-And-Builtin-Forward-Pipeline.md)
## 相关文档
- [Components](../Components/Components.md)
- [RHI](../RHI/RHI.md)
- [XCEngine](../XCEngine.md)
- [API 索引](../../main.md)