矢量操作表达式

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

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):

Tags
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback