docs: sync rendering builtin pass docs
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
|
||||
**头文件**: `XCEngine/Rendering/Passes/BuiltinObjectIdOutlinePass.h`
|
||||
|
||||
**描述**: 内建的全屏后处理 pass,读取 object-id 纹理并把选中对象轮廓或调试 selection mask 合成到当前颜色目标。
|
||||
**描述**: 内建的全屏后处理 pass,读取 object-id 纹理并把选中对象轮廓或调试 selection mask 合成到当前颜色目标;真正使用哪份 shader 由调用方通过 `shaderPath` 注入。
|
||||
|
||||
## 概览
|
||||
|
||||
@@ -18,6 +18,16 @@
|
||||
|
||||
因此它更接近一个“builtin selection feedback compositor”,而不是一个通用 post-process 框架。
|
||||
|
||||
和早期实现不同,当前类已经不再把 outline shader 写死为 engine builtin 资源。源码里的职责边界是:
|
||||
|
||||
- `BuiltinObjectIdOutlinePass`
|
||||
只负责资源创建、object-id 采样、常量编码和一次全屏三角形执行。
|
||||
- editor 调用方
|
||||
通过 [SetShaderPath](SetShaderPath.md) 或构造函数参数注入具体 shader 路径。
|
||||
- `SceneViewportSelectionOutlinePass`
|
||||
当前用 [SceneViewportShaderPaths](../../../Editor/Viewport/SceneViewportShaderPaths/SceneViewportShaderPaths.md)
|
||||
生成 editor-owned object-id outline shader 路径,再交给这里执行。
|
||||
|
||||
## 输入与输出契约
|
||||
|
||||
| 输入 / 输出 | 当前要求 |
|
||||
@@ -31,10 +41,10 @@
|
||||
|
||||
## 当前渲染算法
|
||||
|
||||
按 `BuiltinObjectIdOutlinePass.cpp` 与 builtin shader 的当前实现,流程是:
|
||||
按 `BuiltinObjectIdOutlinePass.cpp` 与当前配置 shader 的实现,流程是:
|
||||
|
||||
1. 校验上下文、后端、object-id SRV 和选中对象列表。
|
||||
2. 懒初始化内部资源,必要时重新创建 pipeline layout、pipeline state 和两个 descriptor set。
|
||||
2. 懒初始化内部资源,必要时重新创建 pipeline layout、pipeline state 和两个 descriptor set;这一步要求 `shaderPath` 非空且可成功加载。
|
||||
3. 从 `surface.GetWidth()` / `GetHeight()` 计算视口尺寸与 texel size。
|
||||
4. 用 `EncodeObjectIdToColor()` 把选中对象 ID 编码进常量缓冲,最多写入 `kMaxSelectedObjectCount = 256` 项。
|
||||
5. 绑定一个 CBV set 和一个 SRV set,设置目标为 `surface` 的第一个颜色附件。
|
||||
@@ -43,6 +53,7 @@
|
||||
## 生命周期
|
||||
|
||||
- [Constructor](Constructor.md) 只做状态清零,不会立刻创建 GPU 资源。
|
||||
- [SetShaderPath](SetShaderPath.md) 更新路径时,会立刻销毁当前缓存的 RHI 资源,等待下一次 `Render()` 重新初始化。
|
||||
- 第一次 [Render](Render.md) 成功进入初始化路径时,才会真正创建 descriptor 和 PSO。
|
||||
- [Shutdown](Shutdown.md) 会显式销毁所有内部缓存对象。
|
||||
- [Destructor](Destructor.md) 当前是默认析构,因此如果把它作为长期 renderer 成员使用,调用方仍需在销毁前显式执行 `Shutdown()`。
|
||||
@@ -50,6 +61,7 @@
|
||||
## 当前实现边界
|
||||
|
||||
- 只接受 `D3D12`,其它后端直接返回 `false`。
|
||||
- 在第一次创建资源前必须先提供有效 `shaderPath`;空路径会记录错误并返回 `false`。
|
||||
- 不处理资源状态切换,也不负责清屏;这些由调用方保证。
|
||||
- 当前完全忽略 `surface.GetRenderArea()`,viewport 和 scissor 都直接取整张 surface 的宽高。
|
||||
- 只使用第一个颜色附件;多 render target 场景不会同步写其它附件。
|
||||
@@ -58,14 +70,17 @@
|
||||
|
||||
| 方法 | 说明 |
|
||||
|------|------|
|
||||
| [Constructor](Constructor.md) | 创建一个空的 outline pass 对象。 |
|
||||
| [Constructor](Constructor.md) | 创建一个 outline pass 对象,并可选地预置 shader 路径。 |
|
||||
| [Destructor](Destructor.md) | 默认析构;不会自动释放内部 RHI 资源。 |
|
||||
| [SetShaderPath](SetShaderPath.md) | 更新当前要加载的 shader 路径,并清空已创建资源。 |
|
||||
| [GetShaderPath](GetShaderPath.md) | 返回当前记录的 shader 路径。 |
|
||||
| [Shutdown](Shutdown.md) | 销毁已创建的 pipeline、descriptor 和 shader handle。 |
|
||||
| [Render](Render.md) | 读取 object-id SRV,并把轮廓或 debug mask 写入颜色目标。 |
|
||||
|
||||
## 真实使用位置
|
||||
|
||||
- `editor/src/Viewport/Passes/SceneViewportSelectionOutlinePass.cpp` 用 `SceneViewportSelectionOutlinePassRenderer` 包装它。
|
||||
- `editor/src/Viewport/Passes/SceneViewportSelectionOutlinePass.cpp` 用 `SceneViewportSelectionOutlinePassRenderer` 包装它,
|
||||
并通过 `GetSceneViewportObjectIdOutlineShaderPath()` 注入 editor-owned shader 路径。
|
||||
- [SceneViewportRenderPlan](../../../Editor/Viewport/SceneViewportRenderPlan/SceneViewportRenderPlan.md) 决定当前帧是否要创建 selection outline pass。
|
||||
- [CameraRenderer](../../CameraRenderer/CameraRenderer.md) 在主场景与 object-id pass 之后执行这些 `postScenePasses`。
|
||||
- `editor/src/Viewport/ViewportHostRenderFlowUtils.h` 当前为 Scene View 组装默认橙色、`2px` 的 outline style。
|
||||
@@ -73,6 +88,9 @@
|
||||
## 相关文档
|
||||
|
||||
- [Passes](../Passes.md)
|
||||
- [SetShaderPath](SetShaderPath.md)
|
||||
- [GetShaderPath](GetShaderPath.md)
|
||||
- [ObjectIdOutlineStyle](../ObjectIdOutlineStyle/ObjectIdOutlineStyle.md)
|
||||
- [CameraRenderer](../../CameraRenderer/CameraRenderer.md)
|
||||
- [RenderSurface](../../RenderSurface/RenderSurface.md)
|
||||
- [SceneViewportShaderPaths](../../../Editor/Viewport/SceneViewportShaderPaths/SceneViewportShaderPaths.md)
|
||||
|
||||
Reference in New Issue
Block a user