2.4 KiB
2.4 KiB
RenderSceneExtractor
命名空间: XCEngine::Rendering
类型: class + struct
头文件: XCEngine/Rendering/RenderSceneExtractor.h
描述: 从 Scene 中挑选相机并收集可渲染 mesh 对象,输出渲染层使用的 RenderSceneData。
概述
RenderSceneExtractor 是当前渲染架构里最接近“scene extraction”阶段的对象。
它的职责不是绘制,而是把面向 gameplay / scene graph 的对象整理成渲染层更容易消费的数据:
- 一台要使用的相机
- 一份拍平后的 RenderCameraData
- 一组 VisibleRenderObject
这和商业引擎里把 scene traversal、visibility building、render packet generation 放在真正 draw submission 之前的设计是一致的。
RenderSceneData
| 字段 | 类型 | 说明 |
|---|---|---|
camera |
Components::CameraComponent* |
选中的相机。 |
cameraData |
RenderCameraData |
渲染阶段使用的拍平相机数据。 |
visibleObjects |
std::vector<VisibleRenderObject> |
当前提取到的可见对象列表。 |
RenderSceneData::HasCamera() 当前只是检查 camera != nullptr。
当前提取规则
相机选择当前按以下顺序执行:
- 如果
overrideCamera可用,直接使用它。 - 否则从场景里找出
IsPrimary()的可用相机,取depth最大者。 - 如果仍没有,则退回到第一个可用相机。
对象提取当前只要求:
GameObject处于IsActiveInHierarchy()- 同时有
MeshFilterComponent和MeshRendererComponent - 两个组件都启用
MeshFilterComponent提供的 mesh 非空且IsValid()
当前实现限制
- 当前没有 frustum culling。
- 当前没有 render layer 过滤。
- 当前没有透明/不透明分类、排序或 batching。
- 当前不会读取
castShadows/receiveShadows。 - 当前把“visible”理解为“满足基本组件条件且在激活层级中”,而不是严格意义上的屏幕可见。
公开方法
| 方法 | 说明 |
|---|---|
| Extract | 从场景中提取渲染数据。 |