Section
Shader、ShaderFunction 与 VirtualFunction 内部 section 的语义。
Shader、ShaderFunction 与 VirtualFunction 的主体由 section 组成。section 形式固定为:
SectionName = {
...
}分号可写可不写,但建议统一省略 section 后的分号。
Properties
Properties 用在 Shader 中声明材质参数或来自 UE.* 的内置节点属性;也可以用在 ShaderFunction 中声明材质函数内部的 parameter/helper 节点。
Properties = {
const float DebugScale = 1.0;
const Texture2D PreviewTex;
float Strength = 1.0;
vec3 Tint = vec3(1.0, 0.8, 0.6);
Texture2D MainTex = Path(Game, "/Textures/T_Main");
ScalarParameter Roughness = 0.35 [
Group="Surface";
SortPriority=10;
Description="Material roughness";
];
StaticSwitchParameter UseDetail = true [
Group="Switches";
SortPriority=30;
];
}生成器会为普通 property 创建参数节点:
| 类型 | 生成节点 |
|---|---|
| 标量 | Scalar Parameter。 |
| 向量 | Vector Parameter。 |
| 纹理 | Texture Object Parameter。 |
UE.* | 对应 Unreal MaterialExpression。 |
在声明前加 const 会生成不可外部调参的常量/helper 节点,而不是 parameter 节点。const 支持标量、向量和纹理简写类型;const Texture2D 会生成 Texture Object,可用 = Path(...) 指定预览纹理,不写时使用 Unreal 默认纹理。
除了 float / vec3 / Texture2D 简写,也可以显式声明 Unreal 参数节点类型:
| 写法 | 生成节点 |
|---|---|
ScalarParameter | Scalar Parameter。 |
VectorParameter / DoubleVectorParameter | Vector Parameter。 |
TextureObjectParameter | Texture Object Parameter。 |
TextureSampleParameter2D / TextureSampleParameterCube / TextureSampleParameter2DArray | Texture Sample Parameter。 |
StaticBoolParameter | Static Bool Parameter。 |
StaticSwitchParameter | Static Switch Parameter。 |
声明尾部可追加分号式 [...] 反射属性块:
VectorParameter Tint = float4(1.0, 0.9, 0.8, 1.0) [
Group="Surface";
SortPriority=20;
Description="Base tint";
];| 属性 | 说明 |
|---|---|
Group | 参数面板分组。 |
SortPriority | 参数排序优先级,整数。 |
Description | 节点说明,会写入 Unreal 节点 Desc。 |
属性块会按 Unreal MaterialExpression 的 UPROPERTY 反射写入节点,因此 Texture Sample Parameter 也可以配置采样属性:
TextureSampleParameter2D MetallicMap = Path(Game, "Textures/T_White_Linear") [
Group="11 - Specular";
SortPriority=51;
SamplerType="LinearColor";
SamplerSource="FromTextureAsset";
MipValueMode="None";
AutomaticViewMipBias=true;
ConstCoordinate=0;
ConstMipValue=-1;
];StaticSwitchParameter 可以在 Graph 中以同名函数形式连接 True / False 两个分支:
Graph = {
float3 finalColor = UseDetail(True=detailColor, False=baseColor);
}Inputs
Inputs 用在 ShaderFunction / VirtualFunction 中,声明材质函数输入 pin。
Inputs = {
vec3 InColor;
opt vec3 InTint = vec3(1.0, 1.0, 1.0) [
Description="Preview tint";
];
opt float Strength = 1.0 [
SortPriority=10;
];
}opt 表示该输入可选,并使用 Unreal Function Input 节点的预览值作为默认值。调用 ShaderFunction / VirtualFunction 时,可以传 default 显式跳过,也可以省略尾部可选输入:
float3 a = F_Tint(Color, default, Output="OutColor");
float3 b = F_Tint(Color, Output="OutColor");在 ShaderFunction 中,Inputs 默认值可以引用同一函数 Properties 中声明的节点,常用于纹理预览:
Properties = {
const Texture2D PreviewTex;
}
Inputs = {
opt Texture2D BaseColorTex = PreviewTex;
}Inputs / Outputs 支持属性块中的 SortPriority 和 Description。Group 也会被解析并保留在语法层,但 Unreal Function Input / Output 节点本身没有分组字段。
旧版本曾把 ShaderFunction / VirtualFunction 的 Properties 当作 Inputs 兼容写法;从 1.2.6 起,ShaderFunction.Properties 是独立的 property/helper 节点区,输入 pin 应写在 Inputs。
Outputs
Outputs 有两种语义。
在 Shader 中,它声明中间输出变量,并把变量绑定到 Unreal 材质属性或辅助输出节点:
Outputs = {
vec3 Color;
float Alpha;
Base.EmissiveColor = Color;
Base.Opacity = Alpha;
}如果需要走 Unreal 的完整 Material Attributes 输入,可以声明聚合输出并绑定到 Base.MaterialAttributes:
Outputs = {
MaterialAttributes Attrs;
Base.MaterialAttributes = Attrs;
}在 ShaderFunction / VirtualFunction 中,它声明材质函数输出 pin:
Outputs = {
vec3 OutColor;
MaterialAttributes OutAttrs;
}Outputs 也可在旧语义中写作 Results,但新文档统一使用 Outputs。
Settings
Settings 配置 Unreal 材质或材质函数属性。
Settings = {
Domain = "Surface";
BlendMode = "Opaque";
ShadingModel = "DefaultLit";
TwoSided = true;
}常用设置:
| 设置 | 示例 | 说明 |
|---|---|---|
Domain / MaterialDomain | "UI" | 材质域。 |
BlendMode / RenderType | "Translucent" | 混合模式。 |
ShadingModel | "Unlit" | Shading Model。 |
TwoSided | true | 双面渲染。 |
Wireframe | false | 线框渲染。 |
OpacityMaskClipValue | 0.3333 | Masked clip 阈值。 |
ShaderFunction 常见设置:
| 设置 | 示例 |
|---|---|
Description | "Tint helper" |
ExposeToLibrary | true |
LibraryCategories | "DreamShader,Color" |
更多见 材质设置参考。
Options
Options 用在 VirtualFunction 中,描述已有 UMaterialFunction 资产引用。
Options = {
Asset = Path(Plugins.MoonToon, "MaterialFunctions/Buffer/Writer");
Description = "Existing MoonToon material function";
}Asset 必填,支持 Game、Engine 和 Plugin.PluginName / Plugins.PluginName 根路径,也可以写完整 Unreal object path。Settings 在 VirtualFunction 中作为兼容别名可用,但新代码推荐使用 Options。
Graph
Graph 是 DreamShaderLang 的材质图 DSL。
Graph = {
vec2 uv = UE.TexCoord(Index=0);
float t = UE.Time();
Color = vec3(t, t, t);
}Shader 和 ShaderFunction 都必须用 Graph 描述图。旧的 Code = { ... } 不再用于 Shader 和 ShaderFunction。
Graph 中新增的参数相关入口包括:
float wind = UE.CollectionParam(
Collection=Path(Game, "Collections/MPC_Wind"),
Parameter="WindStrength");
float3 finalColor = UE.StaticSwitchParameter(
Name="UseDetail",
Default=true,
True=detailColor,
False=baseColor);Graph 中也可以使用 #Region / #EndRegion 对生成节点分组。区域信息会参与图布局,并可在 VSCode 中折叠:
Graph = {
#Region "Surface"
Color = BaseColor.rgb;
RoughnessOut = saturate(Roughness);
#EndRegion
}Layout
Layout 是可选的材质图布局 metadata,用于显式记录生成节点位置和注释框。它不改变材质计算结果。
Layout = {
Comment(Name="Surface", X=-400, Y=-260, W=1200, H=700, Color=float4(0.10, 0.16, 0.22, 0.35));
Node(Var="BaseColor", X=-240, Y=-80);
}| 语句 | 必填参数 | 作用 |
|---|---|---|
Node(...) | Var、X、Y | 固定某个 Graph 变量或生成节点的位置。 |
Comment(...) | Name、X、Y、W、H | 创建 Unreal 材质图注释框。 |
Comment 的 Color=float4(...) 可选。反编译导出时,如果启用了布局导出,已有材质图注释和节点区域会尽量转换成 Layout 与 Graph region。
Section 支持矩阵
| Section | Shader | ShaderFunction | VirtualFunction |
|---|---|---|---|
Properties | 支持 | 支持,声明函数内部 property/helper 节点 | 可作为 Inputs 兼容写法 |
Inputs | 不支持 | 支持 | 支持 |
Outputs | 支持输出声明和绑定 | 支持输出 pin | 支持输出 pin |
Results | 不支持 | 可作为 Outputs 兼容写法 | 可作为 Outputs 兼容写法 |
Settings | 支持 | 支持 | 可作为 Options 兼容写法 |
Options | 不支持 | 不支持 | 支持 |
Graph | 必填 | 支持 | 不支持 |
Layout | 可选 | 可选 | 不支持 |
Code | 不支持 | 不支持 | 不支持 |