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

4.2 KiB

CameraRenderRequest

命名空间: XCEngine::Rendering

类型: struct

头文件: XCEngine/Rendering/CameraRenderRequest.h

描述: 把一次单相机渲染提交所需的主场景、目标表面、object-id 输出和 builtin 后处理配置打包成显式请求对象。

概览

CameraRenderRequestSceneRendererCameraRenderer 之间的主要数据契约。它不负责自己执行绘制,而是把这次提交要用到的输入集中起来:

  • 主场景渲染的 scenecameracontextsurface
  • 可选的 object-id 辅助输出 objectId
  • 可选的 builtin 后处理 builtinPostProcess
  • 多相机排序与清屏控制字段
  • 在主场景前后插入自定义 pass 的钩子

相比把这些参数散落在多个函数签名里,显式请求对象更适合表达“这次 camera submission 的完整意图”,也更利于测试和编辑器视口复用。

核心字段

字段 角色
scene 本次要提取可见物体的场景。
camera 本次渲染使用的相机组件。
context 当前帧的 RHI 上下文。
surface 主颜色输出目标及其 render area。
cameraDepth 多相机排序辅助值。
cameraStackOrder base / overlay camera stack 的附加排序键。
clearFlags 写回 RenderSceneData::cameraData.clearFlags 的覆盖值。
hasClearColorOverride / clearColorOverride 是否覆盖提取到的相机清屏色。
preScenePasses 主管线执行前的可选 pass 序列。
postScenePasses 主管线与 builtin post-process 之间的可选 pass 序列。
overlayPasses builtin post-process 之后的可选叠加 pass 序列。

object-id 与 builtin 后处理

objectId

objectId 是一个 ObjectIdRenderRequest,用于描述“是否要额外渲染一张 object-id 辅助纹理”。

  • IsRequested() 只检查 surface 是否挂了颜色附件。
  • IsValid() 进一步要求:
    • 第一个颜色附件非空
    • 深度附件非空
    • render area 宽高大于 0

CameraRenderer::Render() 当前会在主场景之后、postScenePasses 之前执行 object-id pass。

builtinPostProcess

builtinPostProcess 是一个 BuiltinPostProcessRequest,用于描述 scene viewport 一类内建附加效果:

  • gridPassData 控制无限网格
  • objectIdTextureView 把 object-id 纹理作为 SRV 传给后处理
  • selectedObjectIds 决定是否需要 selection outline / mask
  • outlineStyle 控制轮廓颜色、宽度与调试模式

它的 IsRequested() 规则很宽松:只要 gridPassData.valid 为真,或者 selectedObjectIds 非空,就会被视为请求了 builtin post-process。

当前数据契约

  • IsValid 只检查 scenecameracontext,不会验证 surfaceobjectIdbuiltinPostProcess 是否完整。
  • CameraRenderer::Render() 会额外拒绝:
    • surface 的 render area 宽高为 0
    • objectId.IsRequested()objectId.IsValid() 为假
    • builtinPostProcess.objectIdTextureView 非空,但没有请求 objectId 输出
  • builtin post-process 更细的回退逻辑由 BuiltinPostProcessPassSequenceBuilder 决定,而不是在 CameraRenderRequest 自身完成。

真实使用位置

  • SceneRenderer 负责构建和排序多个 CameraRenderRequest
  • 编辑器 scene viewport 会在 ViewportHostRenderFlowUtils.h 里填充 objectIdbuiltinPostProcess
  • tests/Rendering/unit/test_camera_scene_renderer.cpp 验证了 render area、clear override、object-id pass 与 builtin post-process 的真实接入时序。

相关文档