61 lines
2.8 KiB
Markdown
61 lines
2.8 KiB
Markdown
# VisibleRenderObject
|
||
|
||
**命名空间**: `XCEngine::Rendering`
|
||
|
||
**类型**: `struct alias`
|
||
|
||
**头文件**: `XCEngine/Rendering/VisibleRenderObject.h`
|
||
|
||
**描述**: `VisibleRenderObject` 当前只是 `VisibleRenderItem` 的兼容别名。它表示 scene extraction 之后交给渲染阶段消费的一条可绘制项记录。
|
||
|
||
## 概览
|
||
|
||
头文件里的真实结构名已经是 `VisibleRenderItem`:
|
||
|
||
```cpp
|
||
using VisibleRenderObject = VisibleRenderItem;
|
||
```
|
||
|
||
因此这页保留的是历史命名入口,但语义应按当前 `VisibleRenderItem` 来理解。它不再只是“一个 mesh 对象”,而是已经带上材质槽位、section 信息、render queue 和相机距离的渲染项。
|
||
|
||
## 当前字段
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `gameObject` | `Components::GameObject*` | 来源场景对象。 |
|
||
| `meshFilter` | `Components::MeshFilterComponent*` | 提供 mesh 引用的组件。 |
|
||
| `meshRenderer` | `Components::MeshRendererComponent*` | 提供材质与渲染状态的组件。 |
|
||
| `mesh` | `Resources::Mesh*` | 当前要绘制的 mesh。 |
|
||
| `material` | `const Resources::Material*` | 当前解析出的材质指针,可为空。 |
|
||
| `materialIndex` | `Core::uint32` | 当前材质槽位索引。 |
|
||
| `sectionIndex` | `Core::uint32` | 当前 section 索引。 |
|
||
| `hasSection` | `bool` | 当前项是否绑定到特定 section。 |
|
||
| `renderQueue` | `Core::int32` | 当前项的渲染队列。 |
|
||
| `cameraDistanceSq` | `float` | 到当前相机的距离平方,用于排序。 |
|
||
| `localToWorld` | `Math::Matrix4x4` | 当前项的世界变换。 |
|
||
|
||
## 当前生成方式
|
||
|
||
- [RenderSceneExtractor](../RenderSceneExtractor/RenderSceneExtractor.md) 会递归遍历场景并调用 `AppendRenderItemsForGameObject(...)`。
|
||
- 同一个 `GameObject` 可能展开成多个 `VisibleRenderItem`,例如一个 mesh 有多个 section 时。
|
||
- `material`、`materialIndex`、`renderQueue` 和 `cameraDistanceSq` 都在提取阶段就已经写入,后续主管线不必再回到场景层重新推导。
|
||
|
||
## 当前使用位置
|
||
|
||
- `RenderSceneExtractor` 输出 `RenderSceneData::visibleItems`。
|
||
- `BuiltinForwardPipeline` 遍历这些项并决定 shader/pass、descriptor set 和 draw call。
|
||
- `BuiltinObjectIdPass` 也复用同一批 `visibleItems` 做 object-id 绘制。
|
||
|
||
## 当前限制
|
||
|
||
- 当前仍是轻量运行时结构,不是长期缓存的 render proxy。
|
||
- `cameraDistanceSq` 只是当前相机视角下的一次性排序辅助数据。
|
||
- 兼容别名 `VisibleRenderObject` 仍保留,但新文档和新实现都应优先使用 `VisibleRenderItem` 这个名称。
|
||
|
||
## 相关文档
|
||
|
||
- [Rendering](../Rendering.md)
|
||
- [RenderSceneExtractor](../RenderSceneExtractor/RenderSceneExtractor.md)
|
||
- [RenderSceneUtility](../RenderSceneUtility/RenderSceneUtility.md)
|
||
- [BuiltinForwardPipeline](../Pipelines/BuiltinForwardPipeline/BuiltinForwardPipeline.md)
|