変形の操作

 
 
 

ポイントの変形

ポイントの位置

[PointPosition]属性は、任意のジオメトリオブジェクトで取得および設定可能な3Dベクトルです。

オブジェクトの PointPosition 値を取得するときに、ICEツリーが存在するオブジェクトから見た状態(「セルフ」オブジェクト)ではなく、オブジェクトのローカルリファレンスフレームから見た状態で表されます。これは、[PointVelocity]、[PointNormal]、および類似する属性でも同じです。

一方、[PointPosition]などのデータを位置から取得する場合は、「セルフ」オブジェクトのローカルリファレンスフレームから見た状態で表されます。これにより、たとえば[GoalLocation]の位置に基づいてポイントの[Force]ベクトルまたは[PointVelocity]ベクトルを設定するのが簡単になります。

最初のフレームをグローバルフレームに変換してから、グローバルフレームを 2 番目のフレームに変換することで、2 つの異なるローカルリファレンスフレームを変換することができます。「ジオメトリ クエリを使用する」を参照してください。

ポイントの向き

[PointOrientation]は、ポイントのシェイプやスプライトを描画するときや、リジッドボディをシミュレートするときに使用される特殊な ICE 属性です。この属性は、ポイントクラウドでのみ機能し、回転およびコンポーネント調整ツールを使用してインタラクティブに操作することはできません。

オブジェクトのキネマティクス

オブジェクトのローカルまたはグローバルのキネマティクスプロパティを取得することができます。データタイプは、次に示すように、どの部分のキネマティクスプロパティが参照されているかに応じて異なります。

A

グローバルまたはローカル変換を実行すると、変換を完了するために 4x4 行列が戻されます(位置、回転、スケール)。

B

Pos は、XYZ 座標で 3D ベクトルを戻します。

C

Ori は、回転を戻します(軸および角度)。

D

Ori.Euler は、XYZ オイラー角を含む 3D ベクトルを戻します。

E

Ori.Quat は、向きを表すクォータニオンを戻します。

F

Scl は、XYZスケーリング係数を含む 3D ベクトルを戻します。

オブジェクトの速度と加速度

オブジェクトの速度または加速度の値を取得する場合、ICEツリーはこれらの値を自動的に計算します。[Global Transform]プロパティからは値は読み込まれないので、[Global Transform]プロパティエディタで速度を加速度を計算する必要があります。

回転の操作

回転は、さまざまなデータタイプで表されます。「回転」と呼ばれるデータタイプには、回転の軸と、その軸の周囲の角から構成されます。

軸と角に個別の属性としてアクセスする必要がある場合は、[Rotation to Axis and Angle]および[Axis and Angle to Rotation]ノード、または[Rotation to Scalar]および[Scalar to Rotation]ノードを使用できます。

回転の表示方法は他にもあります。

  • クォータニオン。

  • XYZ オイラー角を含む 3D ベクトル。

  • 3x3マトリクス。これは、回転とスケーリングを同時に表します。

これらの表示は、[Conversion]カテゴリのノードを使用して変換することができます。また、[Rotation]カテゴリには、回転に使用できるさまざまなノードが用意されています。これらのノードの一部は、[Conversion]、[Constant]、および[Math]カテゴリにも含まれています。

2 つの回転を組み合わせた結果(一方の回転を実行した後でもう一方の回転を実行)は、複数の方法で計算できます。

  • 2 つの回転(軸および角度)の値を乗算または加算する。

  • 2 つのクォータニオンを乗算する。

  • 2 つのマトリクスを乗算する。

オイラー角を表す 2 つの 3D ベクトルを乗算しても、正しい結果を得られないこと(および実際には幾何学的な意味を持たないこと)に注意してください。「値を比較する」を参照してください。

変換の構成と分解

[SRT to Matrix]ノードを使用して、個々の位置、回転、およびスケールの値を、4x4 行列の変換表示に構成できます。同様に、[Matrix to SRT]ノードを使用して、4x4 行列を、位置、回転、およびスケールに分解することができます。

[SRT to Matrix]ノードと[Matrix to SRT]ノードの両方とも、3x3 行列でも機能します。この場合、行列は回転とスケーリングを表すものとみなされます。データタイプがICEツリーの残りの部分で自動的に解決できない場合は、[SRT to Matrix]ノードの出力を[3x3 Matrix]または[4x4 Matrix]ノード([Constant]カテゴリにあります)に接続し、強制的にいずれかのデータタイプにする必要があります。

[Matrix to SRT]ノードの[Rotation]ポートは多形性です。接続先のノードに応じて、回転(軸と角)、クォータニオン、XYZ オイラー角を含む 3D ベクトル、または 3x3 行列を戻すことができます。必要に応じて[Constant]カテゴリのノードに接続し、特定のデータタイプを強制的に設定することができます。

ローカルおよびグローバルのリファレンスフレームの変換

ローカルおよびグローバルの位置を変換することができます。3Dベクトルを4x4 行列で乗算する場合、ICEは3Dベクトルが均一の座標の位置を表し、行列が変換を表すものとみなし、特殊なルールで計算を行います。

 

ローカルの位置をグローバルに変換するには、その位置をグローバル変換で乗算します。

 

グローバルの位置をローカルに変換するには、その位置をグローバル変換の反転で乗算します。

異なる2つのローカルリファレンスフレーム間で変換するには、最初のリファレンスフレームをグローバル座標に変換してから、グローバル座標を 2 番目のリファレンスフレームに変換します。

3Dベクトルを[PointPosition]ではなく[PointVelocity]のようなベクトルとして変換する場合は、変換の移動コンポーネントを「ゼロ設定」する必要があります。

また、[Switch Context]ノードを使用して、さまざまなコンテキストから位置またはその他の3Dベクトルを結合する必要があります。