3.0 KiB
3.0 KiB
RenderMaterialResolve
命名空间: XCEngine::Rendering
类型: utility header
头文件: XCEngine/Rendering/Materials/RenderMaterialResolve.h
描述: 渲染材质解析辅助头,负责把 Material、MeshRendererComponent 与 VisibleRenderItem 翻译成 builtin pass 可直接消费的材质、常量、render queue 与 skybox 语义。
头文件中的主要类型
BuiltinForwardMaterialDataBuiltinSkyboxTextureModeBuiltinSkyboxMaterialDataMaterialConstantLayoutViewMaterialConstantPayloadView
当前公开能力
这份头文件当前主要承接四类解析:
- builtin pass 匹配
- base-color / alpha-cutoff / skybox 材质数据解析
- schema-driven 逐材质常量 payload 暴露
VisibleRenderItem最终材质与 render queue 解析
关键 helper
FindShaderPropertyBySemantic(...)ResolveBuiltinBaseColorFactor(...)ResolveBuiltinBaseColorTexture(...)ResolveBuiltinAlphaCutoff(...)BuildBuiltinForwardMaterialData(...)IsCubemapSkyboxTextureType(...)IsPanoramicSkyboxTextureType(...)ResolveSkyboxPanoramicTexture(...)ResolveSkyboxCubemapTexture(...)ResolveSkyboxTextureMode(...)ResolveSkyboxTint(...)ResolveSkyboxExposure(...)ResolveSkyboxRotationDegrees(...)BuildBuiltinSkyboxMaterialData(...)ResolveSchemaMaterialConstantPayload(...)ResolveMaterial(...)TryResolveRenderQueueTagValue(...)TryResolveShaderPassRenderQueue(...)ResolveMaterialRenderQueue(...)IsTransparentRenderQueue(...)HasLegacyMaterialBuiltinPassHints(...)LegacyMaterialBuiltinPassHintsMatch(...)CanUseLegacyMaterialPassFallback(...)MatchesBuiltinPass(...)
当前实现边界
- 它只负责材质语义解析,不直接创建 descriptor set 或 pipeline state。
ResolveSchemaMaterialConstantPayload(...)暴露的是借用视图,不负责重新打包或持有内存;只有常量布局和常量 buffer 都非空时才会返回有效 payload。MaterialConstantPayloadView::IsValid()还要求layout.size == size,因此文档使用时应把它视为“布局与字节载荷配对成功”的结果,而不只是 data 指针非空。ResolveMaterialRenderQueue(...)当前优先尊重材质自身renderQueue覆盖;只有它仍等于默认Geometry队列时,才会继续读取显式shaderPass或 shader passQueuetag。ResolveSkyboxTextureMode(...)先尝试 panoramic,再尝试 cubemap;如果两者都能解析到,当前会优先返回Panoramic。MatchesBuiltinPass(...)会先看 shader 是否已经声明显式 builtin metadata;只有缺少这层 metadata 时,才会回退到Material::GetShaderPass()/LightMode这套兼容提示,并最终把完全无提示的材质视作ForwardLit。