示例
配方
可组合的 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;
}
}自定义 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;
}
}