Transform ノード
説明
入力値 (In) の値を 1 つの座標空間から別の座標空間へ変換した結果を返します。ノードのドロップダウンメニューで、変換元と変換先の座標空間を選択できます。
ポート
Name | Direction | タイプ | 説明 |
---|---|---|---|
In | 入力 | Vector 3 | 入力値 |
Out | 出力 | Vector 3 | 出力値 |
制御
Name | タイプ | オプション | 説明 |
---|---|---|---|
From | ドロップダウン | Object、View、World、Tangent、Absolute World | 変換元の空間を選択します。 |
To | ドロップダウン | Object、View、World、Tangent、Absolute World | 変換先の空間を選択します。 |
World と Absolute World
空間オプション World と Absolute World を使用して Position の値の座標空間を変換できます。空間オプション World はスクリプタブルレンダーパイプラインのデフォルトのワールド空間を使用して位置の値を変換します。空間オプション Absolute World は、どのスクリプタブルレンダーパイプラインでも、絶対ワールド空間を使用して位置の値を変換します。
Transform ノード を使用して位置の値用ではない座標空間を変換する場合には、空間オプション 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;