编辑器支持
DreamShaderLang 的 VSCode 与 Rider 语言插件支持。
DreamShaderLang 目前提供 VSCode 和 JetBrains Rider 两套编辑器语言支持。两者都围绕 .dsm / .dsf / .dsh 文件,提供高亮、补全、导航、诊断和 Unreal Bridge 相关工作流。
支持矩阵
| 编辑器 | 仓库 | 主要能力 |
|---|---|---|
| VSCode | TypeDreamMoon/dreamshader-language-support | 语法高亮、snippets、补全、Go to Definition、Find References、Hover、Signature Help、本地诊断、Unreal 桥接诊断、Package 命令和快速模板。 |
| Rider | tsdaer/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 / Texture3D、Layout / Graph region 和 Function 内置函数 metadata 仍是当前能力的一部分。
VSCode 能力概览
| 能力 | 内容 |
|---|---|
| 语法高亮 | 顶层块、section、类型、流程关键字、HLSL helper、Graph、Layout 和 region。 |
| 补全 | section、类型、变量、函数、namespace、UE.*、动态 MaterialExpression、HLSL/GLSL builtin、Path(...)、Root / Path 插件名、import 路径、MaterialAttributes 成员。 |
| 作用域感知 | Function 体、Graph 主体和基础 if / else 分支有不同可见变量。 |
| 跳转 | import、Function、Namespace::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 / GraphFunction | HLSL 风格 helper、in / out 签名、单输出值表达式、SelfContained / Inline;GraphFunction 允许体内 UE.*。 |
ShaderFunction / ShaderLayer / ShaderLayerBlend / VirtualFunction | 顶层声明、Options.Asset、输入输出 pin、ShaderFunction.Properties、opt / default、Graph 调用和缺失项诊断。 |
Properties | 显式 Parameter 节点、const helper、StaticSwitchParameter、分号式反射属性块、UE.CollectionParam(...)。 |
Outputs | Base.* / Base.MaterialAttributes 材质属性绑定和 Expression(...).Pin[n] 输出节点绑定。 |
Settings | 常见材质设置、枚举值、Path(...) 对象引用。 |
Layout | Node(...)、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.Asset 或 Outputs。 |
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.json 与 Preview/*.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 MaterialVSCode 工作区设置
如果 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.previewWebSocketPort | 17864 | 本机 Unreal 预览 WebSocket 端口。 |
dreamshader.previewAutoRefreshDelayMs | 1200 | 编辑 .dsm 后自动保存并刷新预览前的延迟。 |
dreamshader.previewTransport | websocket | 使用 websocket,或强制使用 file 文件桥。 |
dreamshader.previewLiveFrameRate | 2 | 连续预览帧率上限;设为 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 桥接诊断。 |