DreamShaderLang
生态与工具

编辑器支持

DreamShaderLang 的 VSCode 与 Rider 语言插件支持。

DreamShaderLang 目前提供 VSCode 和 JetBrains Rider 两套编辑器语言支持。两者都围绕 .dsm / .dsf / .dsh 文件,提供高亮、补全、导航、诊断和 Unreal Bridge 相关工作流。

支持矩阵

编辑器仓库主要能力
VSCodeTypeDreamMoon/dreamshader-language-support语法高亮、snippets、补全、Go to Definition、Find References、Hover、Signature Help、本地诊断、Unreal 桥接诊断、Package 命令和快速模板。
Ridertsdaer/dreamshader-language-support.dsm / .dsf / .dsh 文件类型、语法和 PSI 解析、高亮、补全、导航、诊断、Unreal Bridge 集成、语义 token、inlay hints 和 Package 工具。

Unreal 编辑器的 Tools > DreamShader 菜单和 DreamShader 工具栏可以打开生成的 DShader/DreamShader.code-workspace。VSCode 扩展的发布记录见 VSCode 扩展 ChangeLog

VSCode 扩展

当前 VSCode 扩展版本:1.5.3

1.5.x 系列在 parser-based 语言服务基础上补齐 Template 块、Bridge 命令、Package 工具、创作模板、callable 返回值 Hover,以及 .dsm 材质预览面板。1.4.x 中完成的 .dsf、动态 MaterialExpression fallback、VolumeTexture / Texture3DLayout / Graph region 和 Function 内置函数 metadata 仍是当前能力的一部分。

VSCode 能力概览

能力内容
语法高亮顶层块、section、类型、流程关键字、HLSL helper、GraphLayout 和 region。
补全section、类型、变量、函数、namespace、UE.*、动态 MaterialExpression、HLSL/GLSL builtin、Path(...)、Root / Path 插件名、import 路径、MaterialAttributes 成员。
作用域感知Function 体、Graph 主体和基础 if / else 分支有不同可见变量。
跳转import、FunctionNamespace::Function
Hover函数、property、output、局部变量、UE.*
Signature Help调用函数时提示参数。
References查找函数和 namespace 函数引用。
格式化文档级格式化。
诊断本地语法诊断、Graph 分支诊断和 Unreal 桥接诊断。
操作入口状态栏、CodeLens、编辑器标题栏、右键菜单、底部 Panel 中的 Bridge 视图和材质预览 Webview。
.dsf函数文件关联、模板创建、import 跳转、workspace indexing 和文件形状诊断。
预览.dsm 材质预览面板,支持 sphere / plane / cube,优先 WebSocket 直播帧并回退到文件桥。

VSCode 编辑体验

区域支持重点
Graph变量声明、赋值、UE.*、Function / GraphFunction 调用、MaterialAttributes 成员写入、基础 if / else
Function / GraphFunctionHLSL 风格 helper、in / out 签名、单输出值表达式、SelfContained / InlineGraphFunction 允许体内 UE.*
ShaderFunction / ShaderLayer / ShaderLayerBlend / VirtualFunction顶层声明、Options.Asset、输入输出 pin、ShaderFunction.Propertiesopt / default、Graph 调用和缺失项诊断。
Properties显式 Parameter 节点、const helper、StaticSwitchParameter、分号式反射属性块、UE.CollectionParam(...)
OutputsBase.* / Base.MaterialAttributes 材质属性绑定和 Expression(...).Pin[n] 输出节点绑定。
Settings常见材质设置、枚举值、Path(...) 对象引用。
LayoutNode(...)Comment(...)、布局参数补全和格式化。
import项目 .dsh.dsf 和 Package 路径提示。

VSCode 本地诊断

扩展会在编辑时标记:

诊断示例
花括号不匹配少写 }
import 无法解析import "Shared/Missing.dsh";
函数参数错误缺少 in / out
函数重复定义同名 helper。
顶层结构错误.dsm / .dsh 不符合文件模型。
Graph 非法语句无法解析表达式或赋值。
Graph 分支错误if 条件或 { ... } 块不完整。
未知变量使用未声明局部变量。
未知函数调用了未导入的 helper。
参数数量不匹配Function 输入和输出目标数量不对。
out 目标非法把表达式传给 out 参数。
VirtualFunction 缺失项缺少 Options.AssetOutputs
default 参数错误非可选函数输入使用了 default
参数反射属性错误SortPriority 不是整数,或反射属性不能写入对应 Unreal 节点。
Path(...) 错误纹理默认资产路径或 UE.CollectionParam(Collection=Path(...)) 写法不合法。
Material Layer 形状错误ShaderLayer 输出不是单个 MaterialAttributes,或 ShaderLayerBlend 缺少两个 MaterialAttributes 输入。
GraphFunction 错误普通 Function 里调用 UE.*,或 helper 递归调用。
Layout 错误Node / Comment 参数缺失、重复、类型错误或缺分号。
Region 错误#Region 缺名称、#EndRegion 不匹配或 region 未闭合。

Unreal 桥接诊断

Unreal 侧的诊断会通过桥接诊断文件回传给编辑器。VSCode 扩展会读取并回显到对应 .dsm / .dsf / .dsh。对于 import 后的错误,DreamShader 会尽量通过 source map 映射回真实源文件行列。

底部 Panel 中的 DreamShader Bridge 视图会按项目、源文件和具体问题分组显示桥接诊断,使用方式接近 VSCode 内置的“问题 / 输出”窗口。材质编译错误会保留 stage、asset path、shader platform、quality level 和原始 detail,便于在 VSCode 里直接定位生成链路问题。

Unreal 插件还会导出 Saved/DreamShader/Bridge/material-expressions.json。扩展会读取这个 manifest,把当前项目可见的 UMaterialExpression 类、属性、输入和输出 pin 用于动态补全、Hover 和 Signature Help。

材质预览

DreamShaderLang: Show Material Preview 只对当前活动的 .dsm 材质文件生效。扩展会先保存当前文档,然后向 Unreal 侧发送 previewMaterial 请求:

通道行为
WebSocket默认通道,连接 127.0.0.1:17864,用于实时接收预览结果和连续帧。
文件桥WebSocket 不可用或设置为 file 时,写入 Saved/DreamShader/Bridge/Requests/request-*.json,再读取 preview.jsonPreview/*.png

预览面板会跟随活动 .dsm 文件,提供 Refresh 和 mesh 选择。自动刷新会在编辑后保存当前 .dsm,再延迟发送预览请求。

VSCode 常用命令

DreamShaderLang: Recompile Current Source
DreamShaderLang: Recompile All Sources
DreamShaderLang: Clean Generated Shaders
DreamShaderLang: Show Bridge Panel
DreamShaderLang: Show Material Preview
DreamShaderLang: Refresh Bridge Diagnostics
DreamShaderLang: Install Package from GitHub
DreamShaderLang: Browse Package Store
DreamShaderLang: Update Installed Packages
DreamShaderLang: Remove Package
DreamShaderLang: Open Packages Folder
DreamShaderLang: Add Package Store Index Source
DreamShaderLang: Remove Package Store Index Source
DreamShaderLang: Create Package Step by Step
DreamShaderLang: Create DreamShader Material
DreamShaderLang: Create DreamShader Function File
DreamShaderLang: Create DreamShader Header
DreamShaderLang: Create DreamShader Texture Sample
DreamShaderLang: Create DreamShader Noise Material

VSCode 工作区设置

如果 VSCode 打开的不是 Unreal 项目根目录,可以在扩展设置中指定 dreamshader.projectRoot。面向公开文档时,建议只说明配置项含义,不写个人机器上的绝对路径。

Package store:

{
  "dreamshader.packageStoreIndexUrls": [
    "https://raw.githubusercontent.com/TypeDreamMoon/dreamshader-package-index/main/packages.json"
  ],
  "dreamshader.enableGitHubPackageSearch": true
}

旧配置 dreamshader.packageStoreIndexUrl 仍兼容,但推荐使用 dreamshader.packageStoreIndexUrls

预览相关设置:

设置默认值说明
dreamshader.previewWebSocketPort17864本机 Unreal 预览 WebSocket 端口。
dreamshader.previewAutoRefreshDelayMs1200编辑 .dsm 后自动保存并刷新预览前的延迟。
dreamshader.previewTransportwebsocket使用 websocket,或强制使用 file 文件桥。
dreamshader.previewLiveFrameRate2连续预览帧率上限;设为 0 可关闭连续帧。

Rider 插件

Rider 插件仓库:

https://github.com/tsdaer/dreamshader-language-support

Rider 插件侧重 JetBrains 平台内的语言体验,README 中列出的能力包括:

能力说明
文件类型识别 .dsm.dsf.dsh
PSI 解析提供 JetBrains 平台语法树基础,用于高亮、导航和诊断。
补全与导航支持语言关键字、符号、import、函数和 Package 相关工作流。
语义信息提供 semantic token、inlay hints 等编辑器增强。
Unreal Bridge集成 Unreal 侧诊断和 Bridge 工作流。
Package 工具支持 DreamShader Package 相关操作。

推荐使用方式

场景建议
新材质使用 Create DreamShader Material 模板。
新共享库使用 Create DreamShader Header 或手写 .dsh
纹理采样使用 texture sample 模板、项目共享 .dsh 或 Package。
Package通过 Package Store 安装,避免手动复制依赖。
排错先看编辑器本地诊断,再看 Unreal 桥接诊断。

本页目录