长什么样
一个 .dss 文件,就是一份材质
下面是手册里的一个完整材质:#pragma 定材质设置,uniform 是材质参数,/// 注解写参数的分组和说明,普通的 HLSL 函数是辅助逻辑,export 的那个函数就是材质本身。保存后插件把它编译成标准的材质节点图。
// M_TeleportGlow.dss#pragma material(ShadingModel = Unlit, BlendMode = Additive)/// @group Glow|Look @desc Multiplied on top of the particle colouruniform float4 Tint = float4(1, 1, 1, 1);/// @group Glow|Look @desc Overall emissive gainuniform float Intensity = 0.7;float GlowMask(float2 UV){ float2 P = UV * 2.0 - 1.0; return pow(saturate(1.0 - dot(P, P)), 2.4);}export void M_TeleportGlow(inout material m){ float2 UV = UE.TexCoord(Index = 0); m.EmissiveColor = Tint.rgb * GlowMask(UV) * Intensity;}编译成材质 M_TeleportGlow,Unlit、Additive,带 Tint 和 Intensity 两个参数
dsc compile M_TeleportGlow.dss
工作流
从源文件到材质资产
源文件说明要什么,插件负责把它变成资产,并且一直让两者保持一致。保存即编译,生成过程是幂等的。
Author
用 .dss(2.0)或 .dsm / .dsf(1.x)写材质和材质函数,#include 共享的头文件,用 Package 引入别人写好的库;VS Code 扩展负责补全、悬停和诊断。
Compile
保存即编译:解析、绑定、降成中间表示,再生成材质表达式。每条诊断都带 DSHnnnn 码,指回你实际写的那一行。
Asset
生成 UMaterial、UMaterialFunction、材质层与层混合、材质实例(.dsi),以及 UE 5.8 上的 Custom Pass 管线(.dsp)。
Rebuild
每个资产都记着它是从什么构建的:源文件、插件版本或设置一变就重建;被手改过的资产会被认出来,可以还原成源文件的样子,也可以把改动收回源文件。
工具链
插件、编辑器扩展与 Package 分发
四个部分共用同一份语法和同一条诊断通道:Unreal 侧负责编译和生成,编辑器扩展负责补全与跳转,Package 负责把可复用的库分发出去。
