4.2 KiB
4.2 KiB
CameraRenderRequest
命名空间: XCEngine::Rendering
类型: struct
头文件: XCEngine/Rendering/CameraRenderRequest.h
描述: 把一次单相机渲染提交所需的主场景、目标表面、object-id 输出和 builtin 后处理配置打包成显式请求对象。
概览
CameraRenderRequest 是 SceneRenderer 和 CameraRenderer 之间的主要数据契约。它不负责自己执行绘制,而是把这次提交要用到的输入集中起来:
- 主场景渲染的
scene、camera、context和surface - 可选的 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 / maskoutlineStyle控制轮廓颜色、宽度与调试模式
它的 IsRequested() 规则很宽松:只要 gridPassData.valid 为真,或者 selectedObjectIds 非空,就会被视为请求了 builtin post-process。
当前数据契约
- IsValid 只检查
scene、camera和context,不会验证surface、objectId或builtinPostProcess是否完整。 CameraRenderer::Render()会额外拒绝:surface的 render area 宽高为0objectId.IsRequested()但objectId.IsValid()为假builtinPostProcess.objectIdTextureView非空,但没有请求objectId输出
- builtin post-process 更细的回退逻辑由
BuiltinPostProcessPassSequenceBuilder决定,而不是在CameraRenderRequest自身完成。
真实使用位置
SceneRenderer负责构建和排序多个CameraRenderRequest。- 编辑器 scene viewport 会在
ViewportHostRenderFlowUtils.h里填充objectId与builtinPostProcess。 tests/Rendering/unit/test_camera_scene_renderer.cpp验证了 render area、clear override、object-id pass 与 builtin post-process 的真实接入时序。