4.8 KiB
4.8 KiB
Rendering
命名空间: XCEngine::Rendering
类型: module
描述: 提供场景提取、渲染表面描述、渲染管线抽象、GPU 资源缓存和内建前向渲染实现。
概述
当前 XCEngine::Rendering 的公开接口可以按一条很清晰的链路来理解:
- SceneRenderer 接收场景、相机覆盖、RHI 上下文和目标表面。
- RenderSceneExtractor 把
Scene里的相机和可渲染物体整理成RenderSceneData。 - RenderSurface 描述当前帧要往哪里渲染,以及渲染前后资源状态怎么切换。
- RenderPipeline 负责真正把
RenderSceneData变成 draw call。 - Pipelines::BuiltinForwardPipeline 是当前默认的具体管线实现。
- RenderResourceCache 在渲染时把
Mesh/Texture上传成 RHI 资源并缓存。
这个分层思路和很多商业引擎的渲染架构是同一路数:
- 场景系统负责维护对象和组件。
- 渲染系统先做“提取”与“整理”。
- 管线层再决定真正的绘制策略。
它和 Unity SRP、Unreal 渲染前的数据提取阶段相比还很轻量,但方向是对的。
当前实现成熟度
当前模块已经可以支撑基础前向渲染链路,但还明显不是完整渲染框架:
SceneRenderer + BuiltinForwardPipeline已经有集成测试覆盖,能渲染纹理四边形和 backpack 场景。RenderSceneExtractor已经能选择相机并收集激活的 mesh 对象。RenderSurface已经能描述颜色/深度附件、清屏色覆盖和自动状态切换。RenderResourceCache已经能上传基础网格和RGBA8纹理。
但当前也有一组必须诚实写清楚的限制:
RenderSceneExtractor当前不做视锥裁剪、遮挡裁剪或排序。MeshRendererComponent的renderLayer、castShadows、receiveShadows当前不会影响提取结果和绘制行为。RenderResourceCache以资源裸指针为 key,不跟踪资源内容变更,也不是线程安全的。RenderPipelineAsset只是抽象工厂入口,当前没有公开的具体 asset 类型。BuiltinForwardPipeline当前只覆盖非常基础的单通道前向贴图绘制。
设计要点
- 把“场景提取”和“渲染执行”分开,是为了给未来的排序、裁剪、批处理和多管线扩展留空间。
RenderSurface把 framebuffer 目标和状态切换要求抽象出来,避免管线直接依赖 swap chain 细节。RenderPipeline/RenderPipelineAsset的存在,说明这套接口是按“未来可以替换渲染管线”的方向设计的,而不是把 draw 逻辑硬编码在场景类里。RenderResourceCache把运行时 GPU 上传集中到渲染层处理,避免场景对象直接持有 RHI 对象。
测试覆盖
当前能看到的直接覆盖包括:
tests/Rendering/unit/test_render_scene_extractor.cpptests/Rendering/integration/textured_quad_scene/main.cpptests/Rendering/integration/backpack_scene/main.cpptests/Components/test_mesh_render_components.cpp
这说明“场景提取 + 默认前向渲染 + mesh 组件序列化”已经有基本验证,但资源缓存和管线细节仍缺少更细的单元测试。
头文件
- RenderCameraData -
RenderCameraData.h - RenderContext -
RenderContext.h - RenderPipeline -
RenderPipeline.h - RenderPipelineAsset -
RenderPipelineAsset.h - RenderResourceCache -
RenderResourceCache.h - RenderSceneExtractor -
RenderSceneExtractor.h - RenderSurface -
RenderSurface.h - SceneRenderer -
SceneRenderer.h - VisibleRenderObject -
VisibleRenderObject.h - Pipelines -
Pipelines/
相关指南
- Scene Extraction And Builtin Forward Pipeline - 解释为什么渲染要先做 scene extraction,再交给 builtin forward pipeline 执行,以及当前实现和商业引擎常见设计相比还差什么。