DreamShaderLang
设置

材质枚举

材质枚举

材质枚举

DreamShader » 设置 » 材质枚举

以下是 Shader Settings 块的 ShadingModel、BlendMode / RenderType 以及 MaterialDomain / Domain 键所接受的值的完整拼写集合。

声明于.dsm —— 作为 Shader Settings 键的值
类型值目录
生成UMaterial::BlendMode,材质的着色模型,UMaterial::MaterialDomain

概要

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

值的匹配方式

  1. 值先被规范化:去除首尾空白、转为小写,然后删除所有空格、_ 和 -。
  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反射 (自 UE 5.4 起)MSM_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显式别名 (自 UE 5.4 起)MSM_Strata
Strata显式别名 (自 UE 5.4 起) —— 空操作,反射阶段已注册该键MSM_Strata

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

被排除的:MSM_NUM、MSM_MAX,以及被刻意排除的 MSM_FromMaterialExpression。写 ShadingModel = "FromMaterialExpression"; 是错误(DSH7129),它不是从图里驱动着色模型的办法。

在 UE 5.3 上,ShadingModel = "Substrate"; 和 ShadingModel = "Strata"; 会用自己的码 (DSH7128)被拒绝,而不是通用的「不支持」错误。见 诊断和 Substrate 内置项。

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,以及两个被引擎标记为隐藏的枚举项 —— BLEND_TranslucentGreyTransmittance 和 BLEND_ColoredTransmittanceOnly。它们都是表中已有值的别名, 所以没有任何值因此不可达。

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

Domain

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

别名来源引擎枚举项
Surface反射MD_Surface
DeferredDecal反射MD_DeferredDecal
LightFunction反射MD_LightFunction
Volume反射MD_Volume
PostProcess反射MD_PostProcess
UI反射MD_UI
RuntimeVirtualTexture反射 —— 引擎里是隐藏的,插件刻意保留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。其他隐藏枚举项都会跳过,MD_RuntimeVirtualTexture 是 唯一刻意的例外 —— 引擎把它标记为隐藏,插件保留了它。

添加项目专属拼写

项目设置上有三个 TMap<FString, …> 属性用来扩展这些表:

设置值类型扩展
ShadingModelMappingsEMaterialShadingModelShadingModel
BlendModeMappingsEBlendModeBlendMode / RenderType
MaterialDomainMappingsEMaterialDomainMaterialDomain / Domain

它们位于 Project Settings ▸ DreamPlugin ▸ Dream Shader ▸ Mappings 下,且默认为空 —— 上面的内置表从不写入其中。参见 项目设置。

条目效果
规范化后与某个内置别名相同的键覆盖内置值;使用项目里的值
全新的键新增一个可接受的拼写
任何映射到 MSM_MAX / BLEND_MAX / MD_MAX 的键让该拼写解析失败;它不会回落到内置表

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

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

备注

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

诊断

代码抛出时机
DSH7129ShadingModel 值既不匹配任何项目映射也不匹配任何内置别名,或命中了映射到 MSM_MAX 的条目
DSH7128在 UE 5.3 上,ShadingModel 值 trim 并折叠大小写后是 Substrate 或 Strata
DSH7127BlendMode / RenderType 值没有匹配项
DSH7130MaterialDomain / Domain 值没有匹配项

这四条都在校验设置时抛出,早于任何一条设置被应用;它们包在 DSH8215(会指出材质)里到达你,这次重建被回滚。

示例

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

另请参见

本页目录