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

4.8 KiB
Raw Blame History

Rendering

命名空间: XCEngine::Rendering

类型: module

描述: 提供场景提取、渲染表面描述、渲染管线抽象、GPU 资源缓存和内建前向渲染实现。

概述

当前 XCEngine::Rendering 的公开接口可以按一条很清晰的链路来理解:

  1. SceneRenderer 接收场景、相机覆盖、RHI 上下文和目标表面。
  2. RenderSceneExtractorScene 里的相机和可渲染物体整理成 RenderSceneData
  3. RenderSurface 描述当前帧要往哪里渲染,以及渲染前后资源状态怎么切换。
  4. RenderPipeline 负责真正把 RenderSceneData 变成 draw call。
  5. Pipelines::BuiltinForwardPipeline 是当前默认的具体管线实现。
  6. RenderResourceCache 在渲染时把 Mesh / Texture 上传成 RHI 资源并缓存。

这个分层思路和很多商业引擎的渲染架构是同一路数:

  • 场景系统负责维护对象和组件。
  • 渲染系统先做“提取”与“整理”。
  • 管线层再决定真正的绘制策略。

它和 Unity SRP、Unreal 渲染前的数据提取阶段相比还很轻量,但方向是对的。

当前实现成熟度

当前模块已经可以支撑基础前向渲染链路,但还明显不是完整渲染框架:

  • SceneRenderer + BuiltinForwardPipeline 已经有集成测试覆盖,能渲染纹理四边形和 backpack 场景。
  • RenderSceneExtractor 已经能选择相机并收集激活的 mesh 对象。
  • RenderSurface 已经能描述颜色/深度附件、清屏色覆盖和自动状态切换。
  • RenderResourceCache 已经能上传基础网格和 RGBA8 纹理。

但当前也有一组必须诚实写清楚的限制:

  • RenderSceneExtractor 当前不做视锥裁剪、遮挡裁剪或排序。
  • MeshRendererComponentrenderLayercastShadowsreceiveShadows 当前不会影响提取结果和绘制行为。
  • RenderResourceCache 以资源裸指针为 key不跟踪资源内容变更也不是线程安全的。
  • RenderPipelineAsset 只是抽象工厂入口,当前没有公开的具体 asset 类型。
  • BuiltinForwardPipeline 当前只覆盖非常基础的单通道前向贴图绘制。

设计要点

  • 把“场景提取”和“渲染执行”分开,是为了给未来的排序、裁剪、批处理和多管线扩展留空间。
  • RenderSurface 把 framebuffer 目标和状态切换要求抽象出来,避免管线直接依赖 swap chain 细节。
  • RenderPipeline / RenderPipelineAsset 的存在,说明这套接口是按“未来可以替换渲染管线”的方向设计的,而不是把 draw 逻辑硬编码在场景类里。
  • RenderResourceCache 把运行时 GPU 上传集中到渲染层处理,避免场景对象直接持有 RHI 对象。

测试覆盖

当前能看到的直接覆盖包括:

  • tests/Rendering/unit/test_render_scene_extractor.cpp
  • tests/Rendering/integration/textured_quad_scene/main.cpp
  • tests/Rendering/integration/backpack_scene/main.cpp
  • tests/Components/test_mesh_render_components.cpp

这说明“场景提取 + 默认前向渲染 + mesh 组件序列化”已经有基本验证,但资源缓存和管线细节仍缺少更细的单元测试。

头文件

相关指南

相关文档