# SceneRenderRequestPlanner::BuildRequests ```cpp std::vector BuildRequests( const Components::Scene& scene, Components::CameraComponent* overrideCamera, const RenderContext& context, const RenderSurface& surface) const; ``` ## 行为说明 当前实现先调用 [CollectCameras](CollectCameras.md) 取得这次需要处理的相机列表,然后逐个调用 `SceneRenderRequestUtils::BuildCameraRenderRequest(...)` 生成请求。 构建过程中会维护两类计数: - `renderedBaseCameraCount` - 已成功加入结果数组的 request 数量 这两个计数会传给 `ResolveClearFlags()`,用于推导 `Auto` clear mode 的最终清屏行为。 在基础 request 构建成功后,当前实现还会尝试补方向光阴影规划: - 先判断这台相机当前是否应该进入自动方向光阴影路径。 - 再按相机 `cullingMask` 查找主方向光,并要求该光源开启投影阴影。 - 满足条件时,通过内部 `DirectionalShadowPlanning` helper 构建 `request.directionalShadow`。 - 如果 plan 有效,还会同步写入: - `request.shadowCaster.clearFlags = RenderClearFlags::Depth` - `request.shadowCaster.hasCameraDataOverride = true` - `request.shadowCaster.cameraDataOverride = request.directionalShadow.cameraData` ## 当前过滤规则 - 如果某台相机最终生成的 request render area 宽高为 `0`,该请求会被跳过。 - 只有真正成功加入结果数组的 base camera,才会推进 `renderedBaseCameraCount`。 - 方法不会抛出失败原因;调用方只会拿到最终保留下来的请求数组。 - 如果方向光阴影 plan 构建失败,主 request 仍然会保留,只是 `directionalShadow` 维持无效状态。 ## 返回值 - 一组已经完成基础字段填充的 [CameraRenderRequest](../CameraRenderRequest/CameraRenderRequest.md)。 - 结果可能为空,例如没有可用相机,或所有相机的 render area 都被裁成了零尺寸。 ## 相关文档 - [SceneRenderRequestPlanner](SceneRenderRequestPlanner.md) - [CollectCameras](CollectCameras.md) - [CameraRenderRequest](../CameraRenderRequest/CameraRenderRequest.md) - [SceneRenderRequestUtils](../SceneRenderRequestUtils/SceneRenderRequestUtils.md) - [SceneRenderer::BuildRenderRequests](../../Execution/SceneRenderer/BuildRenderRequests.md)