Align managed SRP camera request planning
This commit is contained in:
@@ -107,6 +107,7 @@ SceneRenderer
|
||||
`DefaultSceneRendererUsesManagedUniversalPipelineForPlannedMainSceneAndPostProcessRender` 保证 managed URP 通过显式 renderer/pass 录制主场景和后处理。
|
||||
`ManagedRenderContextExposes*ThroughRenderingData` 保证 managed renderer 可通过 `RenderingData` 观察 camera / lighting / shadow / environment / final color / stage color 数据。
|
||||
`ManagedStageRecorderRecordsMainSceneThroughScriptableRenderContext` 保证主场景通过 `ScriptableRenderContext` 的显式 draw 能力录制。
|
||||
`ScriptCoreUniversalRendererFeatureConfiguresCameraRequestPolicy` 保证 URP renderer feature 能通过产品层相机请求策略真正禁用 native 默认方向光阴影规划。
|
||||
|
||||
## 10. 后续演进方向
|
||||
- 继续补齐 URP 上层组织能力,但不能破坏 builtin / programmable 的显式切换语义。
|
||||
@@ -119,4 +120,5 @@ SceneRenderer
|
||||
- 确立 managed 公开层只通过 `DrawRenderers(...)`、`DrawSkybox()`、`DrawOpaqueRenderers()`、`DrawTransparentRenderers()` 表达 native draw 能力;pass / feature / stage 的组织权归 managed SRP / URP。
|
||||
- `ScriptableRenderer` 统一驱动 renderer feature 的 frame-plan、scene-setup、directional-shadow execution 配置;`RendererBackedRenderPipelineAsset` 清掉 native 默认 optional stage 后再让 renderer / feature 显式请求。
|
||||
- `CameraRenderRequestContext.hasDirectionalShadow` 和 `ClearDirectionalShadow()` 从 ScriptCore public surface 收回 internal,避免 core public API 泄漏 native shadow 规划控制。
|
||||
- 收口 managed 相机请求策略顺序:`MonoManagedRenderPipelineAssetRuntime::ConfigureCameraRenderRequest` 先生成 native 默认方向光阴影基线给 managed / URP 观察,再按 managed 最终策略重算或清除,避免 `ClearDirectionalShadow()` 之后又被 native 默认规划补回。
|
||||
- 当时验证:`xcengine_managed_assemblies`、`scripting_tests` 构建通过;聚焦 `MonoScriptRuntimeTest` 12 项 SRP / URP / API surface 测试通过。
|
||||
|
||||
@@ -2104,13 +2104,21 @@ void MonoManagedRenderPipelineAssetRuntime::ConfigureCameraRenderRequest(
|
||||
size_t renderedRequestCount,
|
||||
const Rendering::DirectionalShadowPlanningSettings&
|
||||
directionalShadowSettings) const {
|
||||
const auto applyDefaultDirectionalShadowPolicy =
|
||||
[&request,
|
||||
renderedBaseCameraCount,
|
||||
renderedRequestCount](
|
||||
const Rendering::DirectionalShadowPlanningSettings& settings) {
|
||||
request.directionalShadow = {};
|
||||
Rendering::ApplyDefaultRenderPipelineAssetCameraRenderRequestPolicy(
|
||||
request,
|
||||
renderedBaseCameraCount,
|
||||
renderedRequestCount,
|
||||
settings);
|
||||
};
|
||||
|
||||
if (!EnsureManagedAsset()) {
|
||||
request.directionalShadow = {};
|
||||
Rendering::ApplyDefaultRenderPipelineAssetCameraRenderRequestPolicy(
|
||||
request,
|
||||
renderedBaseCameraCount,
|
||||
renderedRequestCount,
|
||||
directionalShadowSettings);
|
||||
applyDefaultDirectionalShadowPolicy(directionalShadowSettings);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2118,12 +2126,7 @@ void MonoManagedRenderPipelineAssetRuntime::ConfigureCameraRenderRequest(
|
||||
MonoMethod* const method =
|
||||
ResolveConfigureCameraRenderRequestMethod(assetObject);
|
||||
if (assetObject == nullptr || method == nullptr) {
|
||||
request.directionalShadow = {};
|
||||
Rendering::ApplyDefaultRenderPipelineAssetCameraRenderRequestPolicy(
|
||||
request,
|
||||
renderedBaseCameraCount,
|
||||
renderedRequestCount,
|
||||
directionalShadowSettings);
|
||||
applyDefaultDirectionalShadowPolicy(directionalShadowSettings);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2134,6 +2137,8 @@ void MonoManagedRenderPipelineAssetRuntime::ConfigureCameraRenderRequest(
|
||||
requestContextState.renderedRequestCount = renderedRequestCount;
|
||||
requestContextState.directionalShadowPlanningSettings =
|
||||
directionalShadowSettings;
|
||||
applyDefaultDirectionalShadowPolicy(
|
||||
requestContextState.directionalShadowPlanningSettings);
|
||||
const uint64_t requestContextHandle =
|
||||
RegisterManagedCameraRenderRequestContextState(
|
||||
requestContextState);
|
||||
@@ -2143,12 +2148,6 @@ void MonoManagedRenderPipelineAssetRuntime::ConfigureCameraRenderRequest(
|
||||
if (requestContextObject == nullptr) {
|
||||
UnregisterManagedCameraRenderRequestContextState(
|
||||
requestContextHandle);
|
||||
request.directionalShadow = {};
|
||||
Rendering::ApplyDefaultRenderPipelineAssetCameraRenderRequestPolicy(
|
||||
request,
|
||||
renderedBaseCameraCount,
|
||||
renderedRequestCount,
|
||||
directionalShadowSettings);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2159,12 +2158,8 @@ void MonoManagedRenderPipelineAssetRuntime::ConfigureCameraRenderRequest(
|
||||
args,
|
||||
nullptr);
|
||||
request.directionalShadow = {};
|
||||
if (requestContextState.suppressDirectionalShadow) {
|
||||
} else {
|
||||
Rendering::ApplyDefaultRenderPipelineAssetCameraRenderRequestPolicy(
|
||||
request,
|
||||
renderedBaseCameraCount,
|
||||
renderedRequestCount,
|
||||
if (!requestContextState.suppressDirectionalShadow) {
|
||||
applyDefaultDirectionalShadowPolicy(
|
||||
requestContextState.directionalShadowPlanningSettings);
|
||||
}
|
||||
UnregisterManagedCameraRenderRequestContextState(
|
||||
|
||||
Reference in New Issue
Block a user