矢量操作表达式

对矢量输入值执行操作的表达式。

Choose your operating system:

Windows

macOS

Linux

AppendVector

AppendVector(追加矢量) 表达式允许您将通道组合在一起,以创建通道数比原始矢量更多的矢量。例如,您可以使用两个 常量 值并进行追加,以建立双通道 Constant2Vector(常量 2 矢量) 值。这有助于将单个纹理中的通道重新排序,或者将多个灰阶纹理组合成一个 RGB 彩色纹理。

项目

说明

输入

A

接收作为追加目标的值。

B

接收要追加的值。

示例: 对 0.2 和 0.4 执行追加的结果是 (0.2,0.4);对 (0.2,0.4) 和 (1.0) 执行追加的结果是 (0.2,0.4,1.0)。

AppendVectorExample.png

ComponentMask

ComponentMask(分量蒙版) 表达式允许从输入中选择通道(R、G、B 和/或 A)的特定子集以传递到输出。尝试传递输入中不存在的通道将导致错误,除非输入是单个常量值。在这种情况下,会将单个值传递到每个通道。选择传递的当前通道将显示在表达式的标题栏中。

项目

说明

属性

R

如果选中此项目,那么会将输入值的红色通道(第一个通道)传递到输出。

G

如果选中此项目,那么会将输入值的绿色通道(第二个通道)传递到输出。

B

如果选中此项目,那么会将输入值的蓝色通道(第三个通道)传递到输出。

A

如果选中此项目,那么会将输入值的阿尔法通道(第四个通道)传递到输出。

示例:如果 ComponentMask (分量蒙版)的输入为(0.2,0.4,1.0),则 G 通道将输出 (0.4),并在作为色彩矢量使用时显示40%亮度的灰度值。

ComponentMaskExample.png

CrossProduct

CrossProduct 表达式计算两个三通道矢量值输入的交叉乘积,并输出产生的三通道矢量值。假定空间中有两个矢量,则交叉乘积是一个同时垂直于两个输入的矢量。

项目

说明

输入

A

接受一个三通道矢量值。

B

接受一个三通道矢量值。

使用示例: CrossProduct常用于计算垂直于另外两个方向的方向。

DeriveNormalZ

DeriveNormalZ(派生法线 Z) 表达式在给定 X 和 Y 分量的情况下派生切线空间法线的 Z 分量,并输出所产生的三通道切线空间法线。Z 计算方法为:Z = sqrt(1 - (x * x + y * y));

项目

说明

输入

输入 XY(InXY)

以双通道矢量值形式接收切线空间法线的 X 和 Y 分量。

DeriveNormalZExample.png

DotProduct

DotProduct 表达式计算点积,点积可以描述为一个矢量投影到另一个矢量上的长度,也可以描述为两个矢量之间的余弦乘以它们的幅值。许多技术使用这种算法来计算衰减。DotProduct要求两个矢量输入具有相同数量的通道。

项目

说明

输入

A

接受一个值或任意长度的矢量。

B

接受一个值或具有与 A 相同长度的矢量。

Normalize

Normalize 表达式计算并输出其输入的归一化值。归一化矢量(也称"单位矢量")的整体长度为1.0。这意味着输入的每个分量都除以矢量的总大小(长度)。

示例: 通过Normalize传递(0,2,0)或(0,0.2,0)都将输出(0,1,0)。通过Normalize传递(0,1,-1)将输出(0, 0.707, -0.707)。全零矢量是唯一的例外,它不会改变。

Normalized Input Vector

Non-Normalized Input Vector

没有必要对插入到法线材质输出中的表达式进行归一化。

Transform

Transform(转换) 表达式将三通道矢量值从一种参考坐标系转换到另一种参考坐标系。

默认情况下,材质的所有着色器计算都在切线空间中完成。矢量常量、摄像机矢量和光线矢量等在材质中使用之前,都会转换到切线空间。Transform(转换)表达式允许将这些矢量从切线空间转换到全局空间、局部空间或视图空间坐标系。另外,它允许将全局空间和局部空间矢量转换到任何其他参考坐标系。

项目

说明

属性

源(Source)

指定要转换的矢量的当前坐标系。这可以是以下其中一项:全局(World)、局部(Local)或切线(Tangent)。

目标(Destination)

指定要将矢量转换到的目标坐标系。这可以是以下其中一项:全局(World)、视图(View)、局部(Local)或切线(Tangent)。

Transform(转换)节点会对镜像 UV 加以考虑,例如,以使凸显仅影响人物的右侧边缘。

对于生成全局空间法线以便对立方体贴图进行取样,Transform(转换)节点非常有用。法线贴图可转换到全局空间。以下示例将法线转换到全局空间,以便对立方体贴图进行取样:

TransformExample1.png

将法线转换到视图空间可用于创建边缘效果。这可通过使用网格法线生成纹理坐标(通常称为"球面映射")来实现。使用这种方法,正对着摄像机的法线将映射到纹理坐标的中心,而垂直于摄像机的法线将映射到纹理坐标的边缘。以下是球面映射示例:

SphereMapTestTexture.png

值为 (0,0,1) 的 Constant3Vector(常量 3 矢量)输送到设置了 TRANSFORM_View 的 Transform(转换),接着将结果传递到 ComponentMask(分量蒙版)(仅传递 R 和 G)。因为 Transform(转换)将输出 -1 到 1 范围内的值,我们必须使这些值偏离以使其处于 0-1 范围内。实现方法是乘以 0.5 再加上 0.5。然后,直接将结果连接到纹理的"坐标"(Coordinates)。任何纹理都有效;我建立了包含三个环形的纹理,以使效果明显。

SphereMapTestTexture.png

要将此效果与法线贴图配合使用,只需将 Constant3Vector(常量 3 矢量)替换为法线贴图纹理。

在以下示例中,将此球面映射材质应用于团状岩石网格:

SphereMapRockExample.png

由于插值器受限制,VertexColor(顶点颜色)与 Transform(转换)节点互斥。 如果您同时使用 Transform(转换)节点和 VertexColor(顶点颜色),那么 VertexColor(顶点颜色)的结果为全白色。

目前,Transform(转换)节点无法正确处理不一致的比例缩放。

TransformPosition

建议您不要使用此节点,因为用于偏离原始位置派生全局位置时,会产生严重的精度问题!请改为使用 WorldPosition(全局位置)节点。

TransformPosition(转换位置) 表达式可将屏幕空间中的任何位置转换到表达式的 TransformType 变量所指定的目标空间。目前只支持转换到全局空间。此表达式可用来获取材质中的全局空间坐标。要显现全局位置,您可以将它直接连接到"自发光"(Emissive):

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消