示例
常用模式
最小材质、共享头文件、函数文件、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");
}