DreamShaderLang
语言核心

类型和值

DreamShaderLang 的标量、向量、纹理、Path 与字面量规则。

DreamShaderLang 的公开语法主要围绕材质图与 HLSL helper。PropertiesInputsOutputsGraph 支持一组有限但实用的类型。

标量类型

类型说明
float / float11 分量浮点。
half / half11 分量 half。
int1 分量整数。
uint1 分量无符号整数。
bool1 分量布尔。

在材质图中,这些最终都按 Unreal 材质表达式的标量输出处理。

向量类型

类型族支持类型
floatfloat2 / float3 / float4
halfhalf2 / half3 / half4
intint2 / int3 / int4
uintuint2 / uint3 / uint4
boolbool2 / bool3 / bool4

GLSL 风格别名

别名等价类型
vec2 / vec3 / vec4float2 / float3 / float4
ivec2 / ivec3 / ivec4int2 / int3 / int4
uvec2 / uvec3 / uvec4uint2 / uint3 / uint4
bvec2 / bvec3 / bvec4bool2 / bool3 / bool4

Function 的 HLSL 代码会把这些别名规范化成 HLSL 风格类型。mat2 / mat3 / mat4 会规范化为 float2x2 / float3x3 / float4x4,主要用于 helper 代码;GraphProperties 和输出 pin 当前主要面向标量、向量和纹理。

纹理类型

类型用途
Texture2D2D 纹理对象。
TextureCubeCube 纹理对象。
Texture2DArray2D Array 纹理对象。
SamplerState采样器类型,主要用于 helper 参数。

纹理值可以作为 Properties,也可以作为 Function / ShaderFunction 参数。Graph if 不能在两条分支之间选择纹理对象。

字面量

标量

float a = 1.0;
float b = -0.5;
float c = 1e-3;

向量构造

vec2 uv = vec2(0.5, 0.5);
vec3 color = vec3(1.0, 0.2, 0.1);
float4 rgba = float4(color, 1.0);

构造器支持不同分量值组合,只要最终能合并成目标向量宽度。

Brace initializer

vec3 color = {1.0, 0.2, 0.1};
float4 rgba = {color, 1.0};

Brace initializer 常用于把已有标量或向量拼成目标类型。

字符串

字符串字面量主要用于 UE.* 的命名参数:

float pulse = UE.Expression(
    Class="Sine",
    OutputType="float1",
    Input=UE.Time());

普通图表达式中不能把字符串当作值参与运算。

Path(...)

纹理 property 可以使用 Path(...) 指定默认 Unreal 资产。

Properties = {
    Texture2D MainTex = Path(Game, "/Textures/T_Main");
    Texture2D DefaultTex = Path("/Engine/EngineResources/DefaultTexture");
    TextureCube SkyTex = Path(Engine, "/EngineResources/DefaultTextureCube");
}

规则:

形式结果
Path(Game, "/Textures/T_Main")/Game/Textures/T_Main.T_Main
Path(Engine, "/EngineResources/DefaultTexture")/Engine/EngineResources/DefaultTexture.DefaultTexture
Path("/Game/Textures/T_Main")保留 /Game 根。
Path("/Engine/EngineResources/DefaultTexture")保留 /Engine 根。

如果路径没有写 .AssetName,生成器会根据最后一段自动补齐对象路径。

已移除别名

早期别名 Scalar / Color / Vector 已移除。请使用:

旧写法新写法
Scalarfloat
Vectorfloat2 / float3 / float4
Colorfloat3 / float4vec3 / vec4

On this page