矢量操作表达式

AppendVector(追加矢量)

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

项目 说明

输入

A 接收作为追加目标的值。
B 接收要追加的值。

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

AppendVectorExample.png

ComponentMask(分量蒙版)

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

项目 说明

属性

R 如果选中此项目,那么会将输入值的红色通道(第一个通道)传递到输出。
G 如果选中此项目,那么会将输入值的绿色通道(第二个通道)传递到输出。
B 如果选中此项目,那么会将输入值的蓝色通道(第三个通道)传递到输出。
A 如果选中此项目,那么会将输入值的阿尔法通道(第四个通道)传递到输出。

示例:如果 ComponentMask(分量蒙版)的输入为 (0.2,0.8,1.4) 并选中 R 和 B 通道,那么将输出 (0.2,1.4)。

ComponentMaskExample.png

CrossProduct(矢量积)

CrossProduct(矢量积)表达式计算两个三通道矢量值输入的矢量积,并输出所产生的三通道矢量值。给定空间中的两个矢量,矢量积是与两个输入都垂直的矢量。

项目 说明

输入

A 接收三通道矢量值。
B 接收三通道矢量值。

用法示例:CrossProduct(矢量积)通常用来计算与另外两个方向都垂直的方向。

CrossProductExample.png

DeriveNormalZ(派生法线 Z)

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

项目 说明

输入

输入 XY(InXY) 以双通道矢量值形式接收切线空间法线的 X 和 Y 分量。

DeriveNormalZExample.png

DotProduct(标量积)

DotProduct(标量积)表达式计算标量积,即一个矢量投射到另一个矢量上的长度。许多技术使用此计算来计算衰减。DotProduct(标量积)要求两个矢量输入具有相同数目的通道。

项目 说明

输入

A 接收一个值,或接收任意长度的矢量。
B 接收一个值,或接收任意长度的矢量。

DotProductExample.png

Normalize(规范化)

Normalize(规范化)表达式计算并输出其输入的规范化值。这表示该输入的每个分量都会除以矢量的 L-2 范数(长度)。

NormalizeExample.png

不必对连接到“法线”(Normal)材质输出的表达式进行规范化。

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