DreamShaderLang
示例

常用模式

最小材质、共享头文件、函数文件、Package、Function、UE 节点、ShaderFunction 和 VirtualFunction 示例。

这些片段按常见工作流排列,可以直接复制到 .dsm / .dsf / .dsh 中改名使用。

最小 UI 材质

Shader(Name="DreamMaterials/M_Minimal")
{
    Properties = {
        vec3 Tint = vec3(1.0, 0.2, 0.2);
    }

    Settings = {
        Domain = "UI";
        ShadingModel = "Unlit";
    }

    Outputs = {
        vec3 Color;
        Base.EmissiveColor = Color;
    }

    Graph = {
        Color = Tint;
    }
}

共享 .dsh

DShader/Shared/Common.dsh

Namespace(Name="Common")
{
    Function BuildPulse(in float t, in vec2 uv, out vec3 result) {
        vec2 p = uv - 0.5;
        float ring = sin(t * 2.0 + length(p) * 12.0) * 0.5 + 0.5;
        result = vec3(ring, ring * 0.5 + 0.1, 1.0 - ring * 0.35);
    }

    Function ApplyTint(in vec3 color, in vec3 tint, out vec3 result) {
        result = color * tint;
    }
}

.dsm 中引入 .dsh

import "Shared/Common.dsh";

Shader(Name="DreamMaterials/M_Imported")
{
    Properties = {
        vec3 Tint = vec3(1.0, 1.0, 1.0);
    }

    Settings = {
        Domain = "UI";
        ShadingModel = "Unlit";
    }

    Outputs = {
        vec3 Color;
        Base.EmissiveColor = Color;
    }

    Graph = {
        vec2 uv = UE.TexCoord(Index=0);
        float t = UE.Time();
        vec3 pulse;

        Common::BuildPulse(t, uv, pulse);
        Common::ApplyTint(pulse, Tint, Color);
    }
}

Package 纹理采样

import "@typedreammoon/dreamshader-texture/Library/Texture.dsh";

Shader(Name="DreamMaterials/M_TexturePackage")
{
    Properties = {
        Texture2D MainTex = Path(Engine, "/EngineResources/DefaultTexture");
        vec3 Tint = vec3(1.0, 1.0, 1.0);
    }

    Settings = {
        Domain = "UI";
        ShadingModel = "Unlit";
    }

    Outputs = {
        vec3 Color;
        Base.EmissiveColor = Color;
    }

    Graph = {
        vec2 uv = UE.TexCoord(Index=0);
        vec3 sampled;

        Texture::Sample2DRGB(MainTex, uv, sampled);
        Color = sampled * Tint;
    }
}

SelfContained 函数

Function SelfContained Remap01(in float value, out float result) {
    result = saturate(value * 0.5 + 0.5);
}

ShaderFunction

推荐放在 DShader/Functions/F_Tint.dsf

ShaderFunction(Name="Functions/F_Tint")
{
    Inputs = {
        vec3 InColor;
        opt vec3 InTint = vec3(1.0, 1.0, 1.0) [
            Description="Preview tint";
        ];
    }

    Outputs = {
        vec3 OutColor;
    }

    Settings = {
        Description = "Tint helper";
        ExposeToLibrary = true;
        LibraryCategories = "DreamShader,Color";
    }

    Graph = {
        OutColor = InColor * InTint;
    }
}
Graph = {
    vec3 tinted = F_Tint(BaseColor, default, Output="OutColor");
}

VirtualFunction

VirtualFunction(Name="BufferWriter")
{
    Options = {
        Asset = Path(Plugins.MoonToon, "MaterialFunctions/Buffer/Writer");
        Description = "Existing MoonToon material function";
    }

    Inputs = {
        float3 Color;
        float Alpha;
    }

    Outputs = {
        float3 Result;
    }
}
Graph = {
    float3 written = BufferWriter(Color, 1.0, Output="Result");
}

参数反射属性与静态开关

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;
            Description="Use detail color";
        ];
    }

    Outputs = {
        float3 Color;
        Base.BaseColor = Color;
    }

    Graph = {
        Color = UseDetail(True=DetailColor.rgb, False=BaseColor.rgb);
    }
}

Material Parameter Collection

Graph = {
    float wind = UE.CollectionParam(
        Collection=Path(Game, "Collections/MPC_Wind"),
        Parameter="WindStrength");
}

本页目录