refactor(srp): formalize default renderer asset composition

This commit is contained in:
2026-04-22 12:44:39 +08:00
parent 173ab89158
commit 6f370beb0a
5 changed files with 126 additions and 3 deletions

View File

@@ -0,0 +1,67 @@
# SRP / URP Default Renderer Asset Composition Plan
时间2026-04-22
## 背景
当前 `RendererBackedRenderPipelineAsset` 已经把 renderer data collection 的运行时管理收口了,
`UniversalRenderPipelineAsset` 的默认 renderer 资产组合仍然是隐式的:
1. 新建 asset 时,`rendererDataList` 默认还是空
2. 默认 renderer data 主要靠 runtime resolve/fallback 时再补出来
3. 这会让 asset authoring 和 runtime bootstrap 混在一起
这不够像 Unity 风格。Unity 的 pipeline asset 虽然也有 default renderer/fallback 语义,
但“这个 asset 默认有哪些 renderer data”本身应该是 asset 侧明确表达的,而不是运行时临时补洞。
## 目标
把默认 renderer data list 正式收成 asset 默认组合。
阶段完成后要达到:
1. `RendererBackedRenderPipelineAsset` 拥有明确的默认 renderer data list 重置入口
2. `UniversalRenderPipelineAsset` 通过专门工厂表达默认 renderer 组合
3. 新建 `UniversalRenderPipelineAsset` 时就有正式的默认 renderer data 列表
4. runtime fallback 只负责容错,不再承担默认 authoring 组合表达
## 范围
本阶段只处理默认 renderer asset 组合表达,不做:
- deferred renderer
- renderer inspector / editor UI
- public API 大改
- 阴影与后处理能力扩展
## 实施步骤
### 1. 给 RendererBackedRenderPipelineAsset 增加默认重置入口
职责:
- 允许 asset 明确重置到默认 renderer data list
- 把默认 list 构造和 runtime fallback 区分开
### 2. 抽出 Universal 默认 renderer data 工厂
职责:
- 创建默认 `UniversalRendererData`
- 返回默认 renderer data list
### 3. 让 UniversalRenderPipelineAsset 显式初始化默认组合
目标:
- asset 构造时就有明确默认 renderer data
- 为未来 renderer variant / preset 演进保留稳定落点
## 完成标准
满足以下条件才算本阶段收口:
1. `UniversalRenderPipelineAsset` 默认 renderer 组合不再依赖 runtime 隐式补全
2. 默认 renderer data list 有专门工厂落点
3. `XCEditor` 编译通过
4. old editor 冒烟至少 10 秒通过

View File

@@ -257,6 +257,7 @@ set(XCENGINE_RENDER_PIPELINES_UNIVERSAL_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.RenderPipelines.Universal/Rendering/Universal/StageColorData.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalAdditionalCameraData.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalDefaultRendererFeatureFactory.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalDefaultRendererDataFactory.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalFinalColorSettings.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalFinalOutputBlock.cs
${CMAKE_CURRENT_SOURCE_DIR}/XCEngine.RenderPipelines.Universal/Rendering/Universal/UniversalMainSceneData.cs

View File

@@ -139,11 +139,33 @@ namespace XCEngine.Rendering.Universal
return null;
}
protected virtual ScriptableRendererData[]
CreateDefaultRendererDataList()
{
ScriptableRendererData defaultRendererData =
CreateDefaultRendererData();
return defaultRendererData != null
? new ScriptableRendererData[]
{
defaultRendererData
}
: Array.Empty<ScriptableRendererData>();
}
protected virtual bool UsesExplicitFullscreenStagePlanning()
{
return true;
}
protected void ResetRendererDataToDefault()
{
ScriptableRendererData[] defaultRendererDataList =
CreateDefaultRendererDataList() ??
Array.Empty<ScriptableRendererData>();
rendererDataList = defaultRendererDataList;
defaultRendererIndex = 0;
}
internal ScriptableRendererData GetDefaultRendererData()
{
return m_rendererDataCollection.GetDefaultRendererData(

View File

@@ -0,0 +1,26 @@
using XCEngine;
namespace XCEngine.Rendering.Universal
{
internal static class UniversalDefaultRendererDataFactory
{
public static UniversalRendererData
CreateDefaultRendererData()
{
return ScriptableObject
.CreateInstance<UniversalRendererData>() ??
new UniversalRendererData();
}
public static ScriptableRendererData[]
CreateDefaultRendererDataList()
{
UniversalRendererData rendererData =
CreateDefaultRendererData();
return new ScriptableRendererData[]
{
rendererData
};
}
}
}

View File

@@ -15,6 +15,7 @@ namespace XCEngine.Rendering.Universal
UniversalShadowSettings.CreateDefault();
finalColor =
UniversalFinalColorSettings.CreateDefault();
ResetRendererDataToDefault();
}
protected override ScriptableRenderPipeline
@@ -87,9 +88,15 @@ namespace XCEngine.Rendering.Universal
protected override ScriptableRendererData
CreateDefaultRendererData()
{
return ScriptableObject
.CreateInstance<UniversalRendererData>() ??
new UniversalRendererData();
return UniversalDefaultRendererDataFactory
.CreateDefaultRendererData();
}
protected override ScriptableRendererData[]
CreateDefaultRendererDataList()
{
return UniversalDefaultRendererDataFactory
.CreateDefaultRendererDataList();
}
protected override int ResolveRendererIndex(