DreamShaderLang
设置

枚举取值

全部可接受的 ShadingModel、BlendMode、Domain 拼写,值的匹配方式,以及项目映射如何扩展或覆盖内置表。

三个 Settings 键取引擎枚举:ShadingModelBlendMode(也可写 RenderType)和 MaterialDomain(也可写 Domain)。它们不走通用的 反射枚举匹配 —— 它们有自己的别名表,本页完整列出。

Settings [=] {
    [ShadingModel                 = <shading-model>;]
    [{ BlendMode | RenderType }   = <blend-mode>;]
    [{ MaterialDomain | Domain }  = <domain>;]
}

值是怎么匹配的

  1. 值先规范化:trim、小写,再删除所有空格、_-
  2. 先扫描该键的项目映射表。第一个规范化键命中即胜出并立即返回 —— 项目条目会覆盖内置拼写, 不会继续回落。
  3. 只有在没有项目条目命中时,才构建并同样扫描内置表。
  4. 命中的值若是枚举的 _MAX 哨兵,算作失败;所以指向 MSM_MAX / BLEND_MAX / MD_MAX 的项目条目会让那个拼写不再解析成功。

由于第 1 步,"Default Lit""DefaultLit""default_lit""DEFAULT-LIT" 是同一个别名。 下面的表列的是插件注册的原始拼写,每个拼写的各种分隔符变体同样有效

内置表分两阶段构建:反射阶段遍历引擎枚举并剥掉枚举项前缀,显式阶段再补上手写拼写。 显式阶段不会用相同的键覆盖反射阶段的条目,所以有几行显式条目其实是保留下来便于阅读的空操作。

ShadingModel

EMaterialShadingModel 反射而来,剥掉 MSM_ 前缀。

别名来源引擎枚举项
Unlit反射MSM_Unlit
DefaultLit反射MSM_DefaultLit
Subsurface反射MSM_Subsurface
PreintegratedSkin反射MSM_PreintegratedSkin
ClearCoat反射MSM_ClearCoat
SubsurfaceProfile反射MSM_SubsurfaceProfile
TwoSidedFoliage反射MSM_TwoSidedFoliage
Hair反射MSM_Hair
Cloth反射MSM_Cloth
Eye反射MSM_Eye
SingleLayerWater反射MSM_SingleLayerWater
ThinTranslucent反射MSM_ThinTranslucent
Strata反射 since UE 5.4MSM_Strata
Default Lit显式别名MSM_DefaultLit
Lit显式别名MSM_DefaultLit
Preintegrated Skin显式别名MSM_PreintegratedSkin
Clear Coat显式别名MSM_ClearCoat
Subsurface Profile显式别名MSM_SubsurfaceProfile
Two Sided Foliage显式别名MSM_TwoSidedFoliage
Single Layer Water显式别名MSM_SingleLayerWater
Thin Translucent显式别名MSM_ThinTranslucent
Substrate显式别名 since UE 5.4MSM_Strata
Strata显式别名 since UE 5.4 —— 空操作,反射阶段已注册该键MSM_Strata

在 UE 5.4 – 5.8 上共 15 个不同的规范化别名;UE 5.3 上是 13 个,因为它既没有 strata 也没有 substrate

被排除的:MSM_NUMMSM_MAX,以及被刻意排除的 MSM_FromMaterialExpression。 写 ShadingModel = "FromMaterialExpression"; 是错误,它不是从图里驱动 shading model 的办法。

Substrate / Strata 需要 since UE 5.4。在 UE 5.3 上它们会被专门的信息拒绝: ShadingModel="Substrate" requires Unreal Engine 5.4 or newer.,而不是通用的“不支持”错误。

BlendMode

EBlendMode 反射而来,剥掉 BLEND_ 前缀。键也可以写作 RenderType

别名来源引擎枚举项
Opaque反射BLEND_Opaque
Masked反射BLEND_Masked
Translucent反射BLEND_Translucent
Additive反射BLEND_Additive
Modulate反射BLEND_Modulate
AlphaComposite反射BLEND_AlphaComposite
AlphaHoldout反射BLEND_AlphaHoldout
TranslucentColoredTransmittance反射BLEND_TranslucentColoredTransmittance
Cutout显式别名BLEND_Masked
Transparent显式别名BLEND_Translucent
PremultipliedAlpha显式别名BLEND_AlphaComposite
Premultiplied显式别名BLEND_AlphaComposite

在原版 UE 5.4 – 5.8 上共 12 个不同的规范化别名TranslucentColoredTransmittance 是 Substrate 专有枚举项,所以这个数量与引擎版本相关。

被排除的:BLEND_MAX,以及两个被引擎标记为 hidden 的枚举项 —— BLEND_TranslucentGreyTransmittanceBLEND_ColoredTransmittanceOnly。它们都是表中已有值的别名, 所以没有任何值因此不可达。

TranslucentColoredTransmittance 挺不过反编译。反编译器会把 BLEND_TranslucentColoredTransmittance 写回成 "Translucent",所以 UMaterial.dsmUMaterial 的往返会降级混合模式。反编译这类材质后请手工补回该设置。

Domain

EMaterialDomain 反射而来,剥掉 MD_ 前缀。键也可以写作 MaterialDomain;两者同时出现时它胜出。

别名来源引擎枚举项
Surface反射MD_Surface
DeferredDecal反射MD_DeferredDecal
LightFunction反射MD_LightFunction
Volume反射MD_Volume
PostProcess反射MD_PostProcess
UI反射MD_UI
RuntimeVirtualTexture反射 —— 引擎里是 hidden,插件刻意保留MD_RuntimeVirtualTexture
DeferredDecal显式别名 —— 空操作,反射阶段已注册该键MD_DeferredDecal
Decal显式别名MD_DeferredDecal
Light Function显式别名MD_LightFunction
Post Process显式别名MD_PostProcess
UserInterface显式别名MD_UI
User Interface显式别名MD_UI
Runtime Virtual Texture显式别名MD_RuntimeVirtualTexture
VirtualTexture显式别名MD_RuntimeVirtualTexture
Virtual Texture显式别名MD_RuntimeVirtualTexture

10 个不同的规范化别名,在 UE 5.3 – 5.8 上保持稳定。

被排除的:MD_MAX。其他 hidden 枚举项都会跳过,MD_RuntimeVirtualTexture 是唯一刻意的例外 —— 引擎把它标为 hidden,插件保留了它。

添加项目专属拼写

项目设置上有三个 TMap 属性用来扩展这些表。它们位于 Project Settings ▸ DreamPlugin ▸ Dream Shader ▸ Mappings,且默认为空 —— 上面的内置表从不写进这三个 map,所以面板是空的并不代表“没有别名”。

设置值类型扩展
ShadingModelMappingsEMaterialShadingModelShadingModel
BlendModeMappingsEBlendModeBlendMode / RenderType
MaterialDomainMappingsEMaterialDomainMaterialDomain / Domain
条目效果
键规范化后与某个内置别名相同覆盖内置值,使用项目里的值
全新的键新增一个可接受的拼写
任何映射到 MSM_MAX / BLEND_MAX / MD_MAX 的键让该拼写解析失败,且不会回落到内置表

键在规范化后比较,所以条目里的大小写、空格、下划线和连字符都无关紧要。

两个规范化后相同的项目条目,扫描顺序由哈希表决定 —— 谁胜出是未定义的。不要同时添加 My Modelmy_model

备注

  • 反射阶段遍历的是编译进引擎的枚举内容。改过的引擎会自动贡献它自己的值:一个新增了 MSM_Toon 的引擎,不用改插件也不用配项目映射,ShadingModel = "Toon"; 就能用。上面的表描述的是原版 UE 5.3 – 5.8。
  • 插件自己做版本门控的只有 Strata / Substrate,它们只在 UE 5.4 及以上注册。
  • Hidden 元数据的值只在保留编辑器数据的构建里被过滤。材质生成本来就是编辑器专用的, 所以实际生效的正是这种配置。
  • Saved/DreamShader/Bridge/settings.json 会导出这些表供编辑器补全使用。它按规范化别名去重, 所以里面有 "Default Lit" 而没有 "DefaultLit"两者都能编译 —— 那份清单是补全用的, 不是接受集合。
  • 不写某个键不会保留上次的值:重新生成的材质会先被重置为 Opaque / DefaultLit / Surface。 见材质 Settings

诊断

消息触发原因
Unsupported ShadingModel '{Value}'.值既不匹配项目映射也不匹配内置别名,或命中了映射到 MSM_MAX 的条目。
ShadingModel="Substrate" requires Unreal Engine 5.4 or newer.在 UE 5.3 上值 trim 并折叠大小写后是 Substrate 或 Strata。
Unsupported BlendMode/RenderType '{Value}'.BlendMode / RenderType 的值没有匹配项。
Unsupported MaterialDomain '{Value}'.MaterialDomain / Domain 的值没有匹配项。

这四条都在校验阶段抛出,早于对材质的任何写入。

示例

Shader(Name="Docs/M_EnumSpellings")
{
    Properties { vec3 Tint = vec3(0.9, 0.2, 0.1); }

    Settings {
        Domain       = "User Interface";   // -> MD_UI
        ShadingModel = "Lit";              // -> MSM_DefaultLit
        RenderType   = "Premultiplied";    // -> BLEND_AlphaComposite
    }

    Outputs {
        vec3  Color;
        float Alpha;
        Base.EmissiveColor = Color;
        Base.Opacity       = Alpha;
    }

    Graph {
        Color = Tint;
        Alpha = 0.75;
    }
}

生成后的材质状态:

MaterialDomain = MD_UI
ShadingModel   = MSM_DefaultLit
BlendMode      = BLEND_AlphaComposite

下一步

本页目录