UE 节点入口参考
Graph 与 Properties 中可用的 UE.* 材质节点创建入口。
UE.* 是 DreamShaderLang 创建 Unreal MaterialExpression 的入口。它可以在 Graph 表达式中使用,也可以在 GraphFunction 体内使用,还可以在 Properties 中声明为预置节点。
这些入口和 .dsh 共享库无关。即使项目没有内置库文件,UE.* 仍然是语言层的节点创建语法。
Graph 调用
Graph = {
float2 uv = UE.TexCoord(Index=0);
float time = UE.Time();
float pulse = UE.Expression(Class="Sine", OutputType="float1", Input=time);
}常用 UE.* 节点入口:
| 调用 | 输出 | 说明 |
|---|---|---|
UE.TexCoord(...) | float2 | Texture Coordinate。 |
UE.Time(...) | float1 | Time。 |
UE.Panner(...) | float2 | Panner。 |
UE.WorldPosition() | float3 | World Position。 |
UE.ObjectPositionWS() | float3 | Object Position WS。 |
UE.CameraVectorWS() | float3 | Camera Vector WS。 |
UE.ScreenPosition() | float4 | Screen Position。 |
UE.VertexColor() | float4 | Vertex Color。 |
UE.TransformVector(...) | float3 | Vector Transform。 |
UE.TransformPosition(...) | float3 | Position Transform。 |
UE.CollectionParam(...) | float1 / float4 | Material Parameter Collection 参数。 |
UE.StaticSwitchParameter(...) | 分支类型 | Static Switch Parameter。 |
UE.Expression(...) | 显式指定 | 泛型 MaterialExpression 创建入口。 |
UE.TexCoord
float2 uv = UE.TexCoord(Index=0);
float2 tiled = UE.TexCoord(Index=0, UTiling=2.0, VTiling=2.0);参数:
| 参数 | 类型 | 说明 |
|---|---|---|
Index | 整数字面量 | UV channel。 |
UTiling | 数字字面量 | U 平铺。 |
VTiling | 数字字面量 | V 平铺。 |
UnMirrorU | 布尔字面量 | 设置 UnMirrorU。 |
UnMirrorV | 布尔字面量 | 设置 UnMirrorV。 |
UE.Time
float t = UE.Time();
float looped = UE.Time(Period=2.0, IgnorePause=true);参数:
| 参数 | 类型 |
|---|---|
Period | 数字字面量 |
IgnorePause | 布尔字面量 |
UE.Panner
float2 uv = UE.TexCoord(Index=0);
float t = UE.Time();
float2 panned = UE.Panner(Coordinate=uv, Time=t, SpeedX=0.1, SpeedY=0.0);参数:
| 参数 | 类型 | 说明 |
|---|---|---|
Coordinate | float2 表达式 | 输入 UV。 |
Time | float 表达式 | 时间输入。 |
Speed | float2 表达式 | 速度输入。 |
SpeedX | 数字字面量 | X 速度。 |
SpeedY | 数字字面量 | Y 速度。 |
FractionalPart | 布尔字面量 | 使用小数部分。 |
Transform
vec3 worldNormal = UE.TransformVector(
Input=LocalNormal,
Source="Tangent",
Destination="World");
vec3 worldPos = UE.TransformPosition(
Input=LocalPosition,
Source="Local",
Destination="World");UE.TransformVector 的坐标系:
Tangent, Local, World, View, Camera, InstanceUE.TransformPosition 的坐标系:
Local, World, PeriodicWorld, TranslatedWorld, FirstPerson, View, Camera, Instance动态 MaterialExpression 元数据
DreamShader 插件会在编辑器桥接目录导出 reflected MaterialExpression manifest:
Saved/DreamShader/Bridge/material-expressions.jsonVSCode 扩展会读取这个文件,把当前引擎和项目可见的 UMaterialExpression 类、可编辑属性、输入 pin、输出 pin 和 DreamShader 输出类型提示合并进补全、Hover 和 Signature Help。手写的稳定 UE.* 元数据仍作为覆盖项保留。
泛型 UE.Expression
UE.Expression 可以创建任意可解析的 UMaterialExpression 子类。
float pulse = UE.Expression(
Class="Sine",
OutputType="float1",
Input=UE.Time());规则:
| 参数 | 必需 | 说明 |
|---|---|---|
Class | 是 | MaterialExpression 类名,可省略 MaterialExpression 前缀。 |
OutputType / ResultType | 是 | 告诉 DreamShader 输出类型。 |
Output / OutputName | 否 | 按输出名选择输出 pin。 |
OutputIndex | 否 | 按索引选择输出 pin。 |
其他命名参数会尝试绑定到该 MaterialExpression 的 UPROPERTY:
| 属性类型 | 参数值 |
|---|---|
FExpressionInput | Graph 表达式。 |
| 普通属性 | 字面量。 |
示例:
float r = UE.Expression(
Class="ComponentMask",
OutputType="float1",
Input=UV,
R=true);UE.CollectionParam
UE.CollectionParam 读取 Material Parameter Collection 中的标量或向量参数。
float wind = UE.CollectionParam(
Collection=Path(Game, "Collections/MPC_Wind"),
Parameter="WindStrength");参数:
| 参数 | 必需 | 说明 |
|---|---|---|
Collection / Asset | 是 | Path(...) 或完整 Unreal object path。 |
Parameter / ParameterName | 是 | MPC 中的参数名。 |
Group | 否 | 参数分组。 |
SortPriority | 否 | 排序优先级。 |
Description | 否 | 节点说明。 |
生成器会加载目标 UMaterialParameterCollection 并检查参数是否存在。标量参数返回 float,向量参数返回 float4。
UE.StaticSwitchParameter
UE.StaticSwitchParameter 创建一个带 True / False 输入的静态开关参数。
float3 color = UE.StaticSwitchParameter(
Name="UseDetail",
Default=true,
True=detailColor,
False=baseColor,
Description="Choose detail branch");参数:
| 参数 | 必需 | 说明 |
|---|---|---|
Name | 是 | 参数名。 |
Default | 否 | 默认布尔值。 |
True | 是 | True 分支表达式。 |
False | 是 | False 分支表达式。 |
Group | 否 | 参数分组。 |
SortPriority | 否 | 排序优先级。 |
Description | 否 | 节点说明。 |
两条分支必须是相同分量数量的数值类型,不能直接切换纹理对象。
Properties 中的 UE.*
Properties 也可以声明 UE.* 节点,让它像 property 一样在 Graph 中可用。
Properties = {
UE.TexCoord(Index=0) UV;
UE.Time(Period=4.0) Time;
}
Graph = {
Color = vec3(Time, UV.x, UV.y);
}Properties 中的 UE.* 不支持等号默认值,参数应写在括号里。
// 正确
UE.TexCoord(Index=0) UV;
// 错误
UE.TexCoord UV = 0;泛型 property 节点
Properties 中也可以用 OutputType 触发泛型 MaterialExpression:
Properties = {
UE.Expression(Class="Sine", OutputType="float1", Input=Time) Pulse;
}不过更常见的写法是在 Graph 中直接调用 UE.Expression(...),因为 Graph 中的输入关系更清晰。