DreamShaderLang
编译器行为

当前限制

DreamShaderLang 1.1.1 的边界、兼容性和推荐替代写法。

DreamShaderLang 的当前目标是稳定生成 Unreal 材质图,而不是成为完整通用编程语言。理解边界能避免把逻辑写到不合适的层级。

Graph 限制

限制替代
不支持 for / while放进 Function
不支持任意 HLSL 语句放进 Function
Function 不能作为返回值表达式使用显式 out 参数。
Function 调用只支持位置参数按签名顺序传参。
条件两侧必须是标量使用 swizzle 或 ComponentMask。
if 不能选择纹理对象分支选择采样结果或数值。
字符串只用于 UE.* 命名参数不要作为普通变量值。

类型限制

区域支持重点
Properties标量、向量、纹理和 UE.*
Graph标量、向量、纹理对象引用。
ShaderFunction pin标量、向量、纹理。
Function HLSL更自由,可写 HLSL 风格逻辑。

mat2 / mat3 / mat4 这类别名更适合 helper 代码,不应作为 Graph 变量或材质输出 pin 的主要类型。

Import 与 Package 限制

限制说明
.dsh 不直接生成资产必须由 .dsm 引用或作为共享库。
循环 import 不允许需要拆分公共依赖。
Package 示例不会自动编译示例 .dsm 需要复制到项目源码目录。
Package 更新依赖 gitVSCode 安装和更新需要本机可用 git

诊断边界

VSCode 诊断是开发辅助,不等同于完整编译器语义系统。最终结果仍以 Unreal 侧解析、生成和材质编译为准。

可能出现:

情况说明
VSCode 没报错,但 Unreal 报错生成器或材质编译阶段发现更深层问题。
Unreal 材质编译错误行列不精确Custom 节点内部错误可能来自 Unreal 原始信息。
泛型 UE.Expression 报错较晚需要创建具体 MaterialExpression 后才知道属性是否存在。

版本迁移提示

旧写法新写法
ShaderCode = { ... }Graph = { ... }
ShaderFunctionCode = { ... }Graph = { ... }
Scalarfloat
Vectorfloat2 / float3 / float4
Colorvec3 / vec4float3 / float4
返回值风格 Function显式 out 参数

设计原则

想做的事放在哪里
连材质节点Graph
写复用公式Function
写复杂流程或循环Function
管理材质属性Properties / Settings
管理输出Outputs
共享一组 helper.dsh + Namespace
分发共享库Package

On this page