Transform 节点
描述
返回将输入值 (In) 从一个坐标空间变换为另一个坐标空间的结果。选择节点上的下拉选项来定义变换的起始空间和目标空间。
端口
名称 | 方向 | 类型 | 描述 |
---|---|---|---|
In | 输入 | 矢量 3 | 输入值 |
Out | 输出 | 矢量 3 | 输出值 |
控件
名称 | 类型 | 选项 | 描述 |
---|---|---|---|
From | 下拉选单 | Object、View、World、Tangent、Absolute World | 选择变换的起始空间 |
To | 下拉选单 | Object、View、World、Tangent、Absolute World | 选择变换的目标空间 |
World 和 Absolute World
使用 World 和 Absolute World 空间选项来变换位置值的坐标空间。World 空间选项使用可编程渲染管线的默认世界空间来变换位置值。Absolute World 空间选项在所有可编程渲染管线中使用绝对世界空间来变换位置值。
如果使用 Transform 节点 变换的坐标空间不是用于位置值的坐标空间,Unity 建议使用 World 空间选项。对不代表位置的值使用 Absolute World 可能会导致意外行为。
生成的代码示例
以下示例代码表示此节点在每个 Base 模式下的一种可能结果。
World > World
float3 _Transform_Out = In;
World > Object
float3 _Transform_Out = TransformWorldToObject(In);
World > Tangent
float3x3 tangentTransform_World = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal);
float3 _Transform_Out = TransformWorldToTangent(In, tangentTransform_World);
World > View
float3 _Transform_Out = TransformWorldToView(In)
World > Absolute World
float3 _Transform_Out = GetAbsolutePositionWS(In);
Object > World
float3 _Transform_Out = TransformObjectToWorld(In);
Object > Object
float3 _Transform_Out = In;
Object > Tangent
float3x3 tangentTransform_World = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal);
float3 _Transform_Out = TransformWorldToTangent(TransformObjectToWorld(In), tangentTransform_World);
Object > View
float3 _Transform_Out = TransformWorldToView(TransformObjectToWorld(In));
Object > Absolute World
float3 _Transform_Out = GetAbsolutePositionWS(TransformObjectToWorld(In));
Tangent > World
float3x3 transposeTangent = transpose(float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal));
float3 _Transform_Out = mul(In, transposeTangent).xyz;
Tangent > Object
float3x3 transposeTangent = transpose(float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal));
float3 _Transform_Out = TransformWorldToObject(mul(In, transposeTangent).xyz);
Tangent > Tangent
float3 _Transform_Out = In;
Tangent > View
float3x3 transposeTangent = transpose(float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal));
float3 _Transform_Out = TransformWorldToView(mul(In, transposeTangent).xyz);
Tangent > Absolute World
float3x3 transposeTangent = transpose(float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal));
float3 _Transform_Out = GetAbsolutePositionWS(mul(In, transposeTangent)).xyz;
View > World
float3 _Transform_Out = mul(UNITY_MATRIX_I_V, float4(In, 1)).xyz;
View > Object
float3 _Transform_Out = TransformWorldToObject(mul(UNITY_MATRIX_I_V, float4(In, 1) ).xyz);
View > Tangent
float3x3 tangentTransform_World = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal);
float3 _Transform_Out = TransformWorldToTangent(mul(UNITY_MATRIX_I_V, float4(In, 1) ).xyz, tangentTransform_World);
View > View
float3 _Transform_Out = In;
View > Absolute World
float3 _Transform_Out = GetAbsolutePositionWS(mul(UNITY_MATRIX_I_V, float4(In, 1))).xyz;
Absolute World > World
float3 _Transform_Out = GetCameraRelativePositionWS(In);
Absolute World > Object
float3 _Transform_Out = TransformWorldToObject(In);
Absolute World > Tangent
float3x3 tangentTransform_World = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal);
float3 _Transform_Out = TransformWorldToTangent(In, tangentTransform_World);
Absolute World > View
float3 _Transform_Out = TransformWorldToView(In)
Absolute World > Absolute World
float3 _Transform_Out = In;