DreamShaderLang
为了代替虚幻引擎材质“连连看”而生的文本化材质语言。
一句话来说,DreamShaderLang 是为了代替虚幻引擎材质“连连看”而生的语言。
DreamShaderLang 是 DreamShader 插件的源语言。它用 .dsm 和 .dsh 文件描述 Unreal 材质、材质函数、共享 helper、包依赖和材质图连接关系,然后由插件生成标准 UMaterial 与 UMaterialFunction 资产。
这套文档以语言为中心组织,目标是让 DreamShaderLang 像常见编程语言一样可学习、可查询、可引用。
核心模型
| 概念 | 作用 |
|---|---|
.dsm | Dream Shader Material。生成材质或材质函数的主文件。 |
.dsh | Dream Shader Header。存放共享 Function、Namespace 与 import。 |
Shader | 顶层材质声明,生成 Unreal UMaterial。 |
ShaderFunction | 顶层材质函数声明,生成 Unreal UMaterialFunction。 |
Graph | 生成 Unreal 材质节点的图 DSL。 |
Function | HLSL 风格 helper,供 Graph 调用。 |
Namespace | 组织共享 helper,调用形式为 Namespace::Function(...)。 |
Package | 可分发的 .dsh 共享库,安装到 DShader/Packages。 |
公开仓库
| 项目 | 链接 |
|---|---|
| DreamShader 插件 | TypeDreamMoon/DreamShader |
| VSCode 扩展 | TypeDreamMoon/dreamshader-language-support |
| Package Store Index | TypeDreamMoon/dreamshader-package-index |
语言分层
DreamShaderLang 不是把 HLSL 直接塞进材质文件。它分成三层:
| 层级 | 写在哪里 | 适合表达 |
|---|---|---|
| 资产层 | Shader / ShaderFunction | Unreal 资产名称、属性、设置、输出绑定。 |
| 图层 | Graph = { ... } | 变量、节点、表达式、UE.*、材质函数调用、基础 if / else。 |
| Helper 层 | Function / Namespace | 可复用 HLSL 计算、循环、复杂流程、自包含 Custom 节点代码。 |
最小材质
Shader(Name="DreamMaterials/M_Minimal")
{
Properties = {
vec3 Tint = vec3(1.0, 0.2, 0.2);
}
Settings = {
Domain = "UI";
ShadingModel = "Unlit";
}
Outputs = {
vec3 Color;
Base.EmissiveColor = Color;
}
Graph = {
Color = Tint;
}
}推荐阅读顺序
| 目标 | 页面 |
|---|---|
| 第一次写材质 | 安装与准备、第一个材质 |
| 理解项目结构 | 项目布局、文件模型 |
| 学语言核心 | 顶层声明、Section、类型和值 |
| 写共享逻辑 | Function 与 Namespace、Import 与 Namespace |
| 写材质图 | Graph 语言、UE 节点入口参考 |
| 查资产输出 | 材质设置、输出绑定、Package 参考 |
| 看示例 | 常用模式、配方示例 |
| 排错与生成 | 资产生成、诊断、限制 |
| 了解插件和工具 | DreamShader 插件、VSCode 扩展、Package 作者工作流 |
| 补充着色语言背景 | HLSL 简介、GLSL 简介、关键字速查 |
当前版本
| 项目 | 内容 |
|---|---|
| DreamShader 插件 | 1.1.0 |
| 语言 | DreamShaderLang |
| 文件扩展名 | .dsm / .dsh |
| 作者 | TypeDreamMoon |
| 主要产物 | UMaterial / UMaterialFunction |