示例
配方
可组合的 DreamShaderLang 材质片段。
时间脉冲
Graph = {
float t = UE.Time();
float pulse = UE.Expression(
Class="Sine",
OutputType="float1",
Input=t);
Color = Tint * (pulse * 0.5 + 0.5);
}UV 平移
Graph = {
vec2 uv = UE.TexCoord(Index=0);
float t = UE.Time();
vec2 moved = UE.Panner(Coordinate=uv, Time=t, SpeedX=0.1, SpeedY=0.0);
}条件着色
Graph = {
vec2 uv = UE.TexCoord(Index=0);
float mask = UE.Expression(
Class="ComponentMask",
OutputType="float1",
Input=uv,
R=true);
if (mask > 0.5) {
Color = vec3(1.0, 0.2, 0.2);
} else {
Color = vec3(0.0, 0.0, 0.0);
}
}透明 UI 材质
Shader(Name="DreamMaterials/M_UI_Transparent")
{
Properties = {
vec3 Tint = vec3(1.0, 1.0, 1.0);
float Alpha = 0.75;
}
Settings = {
Domain = "UI";
ShadingModel = "Unlit";
BlendMode = "Translucent";
}
Outputs = {
vec3 Color;
float OpacityValue;
Base.EmissiveColor = Color;
Base.Opacity = OpacityValue;
}
Graph = {
Color = Tint;
OpacityValue = Alpha;
}
}Surface PBR 骨架
Shader(Name="DreamMaterials/M_Surface_PBR")
{
Properties = {
vec3 BaseTint = vec3(0.8, 0.6, 0.4);
float Rough = 0.5;
float Metal = 0.0;
}
Settings = {
Domain = "Surface";
BlendMode = "Opaque";
ShadingModel = "DefaultLit";
}
Outputs = {
vec3 Base;
float RoughnessValue;
float MetallicValue;
Base.BaseColor = Base;
Base.Roughness = RoughnessValue;
Base.Metallic = MetallicValue;
}
Graph = {
Base = BaseTint;
RoughnessValue = Rough;
MetallicValue = Metal;
}
}参数分组与排序
Properties = {
VectorParameter BaseColor = float4(0.8, 0.6, 0.4, 1.0) [
Group="Surface";
SortPriority=10;
Description="Base material color";
];
ScalarParameter Roughness = 0.5 [
Group="Surface";
SortPriority=20;
];
ScalarParameter Metallic = 0.0 [
Group="Surface";
SortPriority=30;
];
}Static Switch 分支
Shader(Name="DreamMaterials/M_StaticSwitch")
{
Properties = {
VectorParameter BaseColor = float4(0.1, 0.2, 0.3, 1.0) [
Group="Surface";
SortPriority=10;
];
VectorParameter DetailColor = float4(1.0, 0.8, 0.3, 1.0) [
Group="Surface";
SortPriority=20;
];
StaticSwitchParameter UseDetail = true [
Group="Switches";
SortPriority=30;
];
}
Outputs = {
float3 Color;
Base.BaseColor = Color;
}
Graph = {
Color = UseDetail(True=DetailColor.rgb, False=BaseColor.rgb);
}
}Material Parameter Collection
Graph = {
float windStrength = UE.CollectionParam(
Collection=Path(Game, "Collections/MPC_Wind"),
Parameter="WindStrength");
Color = Tint * windStrength;
}可选材质函数输入
推荐放在 .dsf 函数文件中,例如 DShader/Functions/F_DebugColor.dsf。
ShaderFunction(Name="Functions/F_DebugColor")
{
Inputs = {
float3 InColor;
opt float4 ColorA = float4(0.3, 0.3, 0.7, 0.7) [
Description="Preview color A";
];
opt float4 ColorB = float4(0.0, 0.35, 1.0, 0.65) [
Description="Preview color B";
];
}
Outputs = {
float3 Result;
}
Graph = {
Result = InColor;
}
}调用时可以传 default 跳过可选输入:
Graph = {
float3 debug = F_DebugColor(BaseColor, default, default, Output="Result");
}自定义 MaterialExpression 输出
Graph = {
vec2 uv = UE.TexCoord(Index=0);
float r = UE.Expression(
Class="ComponentMask",
OutputType="float1",
Input=uv,
R=true);
Color = vec3(r, r, r);
}多输出 helper
Function SplitBrightness(in vec3 color, out vec3 normalized, out float brightness) {
brightness = max(max(color.r, color.g), color.b);
normalized = color / max(brightness, 0.0001);
}
Shader(Name="DreamMaterials/M_Brightness")
{
Properties = {
vec3 Tint = vec3(1.0, 0.5, 0.25);
}
Settings = {
Domain = "UI";
ShadingModel = "Unlit";
}
Outputs = {
vec3 Color;
Base.EmissiveColor = Color;
}
Graph = {
vec3 normalized;
float brightness;
SplitBrightness(Tint, normalized, brightness);
Color = normalized * brightness;
}
}