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