| On this page | |
| Since | 21.0 |
複数の入力コントロール行列からスプラインを生成します。 コントロール行列の位置によって、生成されるスプラインの形状が定義され、その行列の上部の3×3トランスフォームによって、CV付近のスプラインの座標系が定義されます。 その後、スプラインがサンプリングされ、 numsamples 個の補間されたトランスフォームサンプルが生成されます。
このノードは、rig::ControlSplineFromArrayと
rig::SampleSplineTransformsToArrayの機能を組み合わせたものです。
以下のセクションでは、このノードで利用可能なスプライン機能について説明しています。
コントロールスプライン ¶
コントロールスプラインとは、サンプリングされるスプラインのことであり、 cvs 、 order 、 splinetype のポートの値を使用して作成されます。
コントロール行列( cvs )には、スプラインのCVの位置に加え、スプラインの向きが含まれています。
各CVの向きは、正規化されたカーブパラメータの位置のcurveu = vtxnum/numvtx(通常はCV付近にあります)で適用されます。
スプラインの階数( order )は、曲線の柔軟性や形状に影響を与えます。 階数が3および4の曲線は、各CVが曲線の形状に対して比較的局所的な影響を与えつつ、滑らかな形状を生成できるため、それらの階数がよく選ばれます。 階数が2の曲線は、線形ポリラインに相当します。
スプラインは、 splinetype の値に応じて、ベジェ曲線またはNURBS曲線を作成することができます。 各スプラインタイプには、それぞれ独自の利点があります。 ベジェ曲線は、最初のCV、最後のCV、すべてのノット(複合曲線内の曲線セグメントの接合点を表現したCV)を通過します。 しかし、ベジェ曲線は、有効な曲線を形成するために特定の数のCVを必要とする制約があります。 NURBS曲線は、有効な曲線を形成するために必要となるCVの数に関しては柔軟です(最低でも order 個のCVが必要です)。 ただし、NURBS曲線は、最初のCVと最後のCVのみを通過し、他のCVの位置は近似されます。
ベジエ曲線の構築
ベジエ曲線の各セグメントは、<number_of_cvs> = orderの要件を満たさなければなりません。
複合曲線は、曲線セグメント間でCVを共有するため、追加される曲線セグメント毎にさらにorder-1個のCVが必要になります。
この要件は、<number_of_cvs> % (order-1) == 1の方程式で表すことができます。
例えば、2つの曲線セグメントで構成された4階数(3次)ベジェ曲線を作成する場合、 1つ目の曲線セグメントには4個のCV、2つ目の曲線セグメントには3個のCVが必要になります(2つ目の曲線セグメントは、最初のCVを1つ目の曲線セグメントと共有するためです)。 これによって、合計で7個のCVが必要となります。
スプラインサンプル ¶
xforms の可変長出力のすべてのコネクションに対して、コントロールスプラインからサンプルが生成されます。 そのサンプルの向きは、そのサンプルを囲んだコントロールスプラインの座標系から補間されます。
デフォルトでは、サンプルはジョイントチェーンとして使用できるように構築されます。 具体的には、サンプルのローカルのLook At軸( lookataxis )が次のサンプルの位置と一致するように補間された向きが再調整されます。 最後サンプルの lookataxis は、カーブの接線と一致します。 Look At軸の整列方法は、 lookattype ポートで調整することができます。
lookattype |
Look Atタイプ |
|---|---|
0 |
Next Sample Look At軸は、出力ジョイントチェーン内の次のサンプルに揃います。 |
1 |
Curve Tangent Look At軸は、カーブの接線ベクトルに揃います。 smooth ポートがTrueに設定されている場合、サンプルの向きに突発的な変化が生じないように、向きの遷移が滑らかに処理されます。 |
xforms サブポートに加え、サンプルは outgeo 出力ポートからもKineFXスケルトンとして利用可能です。
この場合、各スケルトンジョイントの名前は、呼応する xforms サブポート名から名前が付けられ、transformPointアトリビュートにはジョイントの向き(とスケール)が含まれます。
スプラインオフセット ¶
スプラインオフセットとは、スプラインの始点からスプライン沿いの特定の点までのオフセットのことです。 オフセットは、( startoffset 、 endoffset 、 twists 、 pins のポートで指定された)値と( startinterp 、 endinterp 、 twistinterps 、 pinintersp のポートで指定された)単位で定義されます。 オフセットの単位のことを“Interpretation”と呼びます。
interp |
Interpretation |
|---|---|
0 |
Unit Parametric オフセット値は、0がスプラインの始点、1がスプラインの終点を示した正規化されたパラメトリック値として解釈されます。 Unit Parametric オフセットは、スプラインのパラメタリゼーションの変更(例えば、コントロールスプラインのCVの追加/削除など)に対してより不変性を保ちつつ、パラメトリックドメイン内でサンプリングを行なうのに役立ちます。 |
1 |
Unit Arclength オフセット値は、正規化された弧長として解釈されます。 このオフセットは、スプラインに沿った弧長の割合を表現します。 0はカーブの始点、1はカーブの終点を示します。 Unit Arclength オフセットは、スプラインの長さが変化しても相対的な距離を維持するのに便利です。 |
2 |
Parametric オフセット値は、パラメトリック値として解釈されます。 パラメトリック値は、スプライン沿いの位置を正確に示し、スプラインの長さや形状の変更の影響を受けにくくすることができます。 |
3 |
Arclength オフセット値は円弧長として解釈されます。 Arclength オフセットは、スプラインの長さが変化した場合でも、スプライン沿いの特定の距離におけるオフセットを指定するのに役立ちます。 |
指定がない場合、Interpretationは Unit Parametric とみなされます。
startoffset と endoffset の値(およびそれに呼応する startinterp と __endinterp__の値)は、サンプリングに使用されるスプラインの有効領域を制限します。 これらのパラメータを変更することで、以下のような様々な効果を実現することができます:
-
スプラインに沿ってジョイントチェーンを伸ばす:
-
固定長ジョイントチェーンをスプラインに沿って移動させる:
固定長スプライン ¶
固定長スプラインとは、出力サンプル間の長さをユーザが定義できるスプラインのことです。 固定長スプラインは、 restlengths ポートに入力が指定され、 stretch ポートの値が0の場合に作成されます。 出力サンプルをジョイントチェーンと見なすと、各 restlengths の値は、ジョイントチェーン内の呼応するジョイントと次のジョイントとの間の距離となります。
長さが不均一な場合に対応するため、ジョイント毎に静止長を設定することができます:
restlengths エントリの数が出力サンプルの数と一致しない場合、すべてのジョイントに静止長が割り当てられるよう、ユーザが指定した最後の静止長が必要な回数だけ繰り返されます。 すべてのジョイントの静止長が均一なジョイントチェーンを生成するには、 restlengths に単一の値を入力するだけで済みます。
ピンを使用すると、固定長ジョイントチェーンをスプラインに沿ってオフセットさせることができます。 ジョイントチェーンがスプラインの startoffset または endoffset に到達すると、ジョイントは互いに重なり始めます。 ただし、 overshoot をTrueに設定すると、ジョイントチェーンはスプラインのオフセットに到達しても重なり合うことはなく、場合によってはスプラインを完全にオーバーシュートすることもあります。
伸縮性のあるスプライン ¶
伸縮性のあるスプラインとは、利用可能な長さに沿って出力サンプルを伸縮させ、 stretchtype に基づいてスプラインの startoffset と endoffset の間にサンプルを均等に分布させるスプラインのことです。
stretchtype |
ストレッチタイプ |
|---|---|
0 |
Arclength サンプルは、等間隔の弧長で分布します。
|
1 |
Parametric サンプルは、等間隔のパラメトリック間隔で分布します。
|
伸縮挙動が発生するのは、以下のいくつかの場合です:
-
restlengths ポートが接続されていない場合
-
stretch ポートの値が1の場合
-
スプラインのピンが出力ジョイントを伸縮させる場合
固定長スプラインの解が存在する場合、 stretch ポートは、その固定長の解と伸縮の解のブレンドを制御します。 0の値は、伸縮なしに相当し、1の値は、完全に伸縮した状態になります。 中間値ではブレンドが行なわれます。
Stretch and Squash ¶
stretchscale と squashscale の値をそれぞれ調整することで、出力トランスフォームにストレッチおよびスクァッシュのスケール係数を適用することができます。 値が1より大きい場合、サンプルが静止長を超えて伸びるとストレッチが発生し、サンプルが静止長よりも手前でスクァッシュが発生します。 値が1の場合、ストレッチやスクァッシュのスケールが適用されないことを示します。 stretchsquashtype ポートでは、ジョイントセグメントに適用するストレッチおよびスクァッシュのスケールのタイプを指定することができます。 以下のテーブルで色々なタイプのストレッチおよびスクァッシュを説明するために、まず等間隔に分布したピンを含んだ静止長のジョイントチェーンから始め、次にそのジョイントチェーンをストレッチします:
stretchsquashtype |
ストレッチ/スクァッシュのタイプ |
|---|---|
0 |
Joint Length 個々のジョイントが受けるストレッチまたはスクァッシュの量は、ジョイントチェーン内の隣接ジョイントに限定されます。 隣接ジョイント間の距離が長くなると、そのジョイントはストレッチします。距離が短くなると、そのジョイントはスクァッシュします。 ストレッチとスクァッシュは、ジョイントの長さとその静止長の比率を用いて計算されます(例えば、ジョイントの長さが静止長より長い場合、ストレッチが発生します):
内部ピンを移動させると、ジョイントチェーンに沿ってストレッチとスクァッシュが発生します。 各ジョイントは独立して扱われるため、ストレッチされたセグメントとスクァッシュされたセグメントの間には、ハードな遷移が生じやすいです:
|
1 |
Smoothed Segments ストレッチとスクァッシュは、 Joint Length モードと同様の方法で計算されますが、ピン間のみに適用されるため、ピンにおけるスケールはストレッチとスクァッシュの影響を受けません:
このモードは、スプラインに沿ってスライドする固定長ジョイントチェーンに最適です。 この場合、固定長ジョイントチェーン内のストレッチとスクァッシュは自然に見え、ジョイントチェーンの両端でのストレッチまたはスクァッシュは局所的な効果となります。 Note ジョイントチェーンをほとんどの場合にストレッチさせることを意図する場合、このモードは最適な選択肢にならない可能性があります。 なぜなら、ピン位置でのスケールはストレッチの影響を受けないため、ジョイントチェーンがピン位置で膨らんでしまうからです。 この膨らみは、ジョイントチェーンが均等にストレッチされている場合(ピンが等間隔に分布しており、各ジョイントチェーンセグメントが同じだけストレッチされている場合)に顕著になります。 ピンの数を変更すると、ジョイントチェーンの膨らみの数に影響します。
|
2 |
Joint Chain Length 個々のジョイントが受けるストレッチとスクァッシュの量は、隣接ジョイントからの距離に加え、ジョイントチェーンの長さによっても影響を受けます。 ストレッチとスクァッシュは、以下の比率を用いて計算されます:
内部ピンを移動させると、ピン間でストレッチとスクァッシュが生じますが、ピンのスケールはストレッチとスクァッシュによるスケールの影響を受けません。 これは Smoothed Segments モードと同様です。 一方、ジョイントチェーンの長さを変更して全体をストレッチまたはスクァッシュさせると、ピンを含めジョイントチェーン全体がスケールされます。 その結果、ジョイントチェーンが均等にストレッチされると、このモードでは Smoothed Segments モードで見られるような膨らみが生じません。 以下の画像では、 Joint Length モード、 Smoothed Segments モード、 Joint Chain Length モードの比較を載せています:
ジョイントチェーンの長さの変更はピンでのスケールに影響を与えるため、このモードは、固定長ジョイントチェーン、または、完全に伸びた状態を維持するジョイントチェーンに最適です。 |
3 |
Spline Length 個々のジョイントが受けるストレッチやスクァッシュの量は、隣接ジョイントからの距離に加え、スプラインカーブの長さによっても影響を受けます。 ストレッチとスクァッシュは、以下の比率を用いて計算されます:
Note スプラインの静止長は、ジョイントチェーンの静止長であるとみなされます。 以下の画像では、ジョイントチェーンは静止長であり、スプラインの長さが増加しています。 これによって、スクァッシュが生じます。 この結果を理解するために、ジョイントチェーンが元のスケールを維持したまま、より長いスプラインの全長に沿ってストレッチされ、その後、各セグメントが下図に示す位置にスクァッシュされた状態を想像してください:
このモードは、伸縮性のあるジョイントチェーン、特にジョイントチェーンの末端セグメントで(内部セグメントでのスケールに加えて)局所的なストレッチやスクァッシュを行ないたい場合に役立ちます。 このモードで末端セグメントを調整すると(ジョイントチェーンの長さを変更すると)、 Joint Chain Length モードの場合と同様に、ジョイントチェーン全体のジョイントはスケールされません:
このモードは、スプラインカーブの長さがピンでのスケールに影響を与えるため、固定長ジョイントチェーンには適しません。 |
ピン ¶
ピンは、固定長ジョイントチェーンの位置をスプライン上のオフセット位置に拘束します。 ピンの入力がない場合、ジョイントチェーンの始点をスプラインカーブの始点に拘束する暗黙のピンが作成されます。
以下の例では、ジョイントチェーンの開始点、中間点、終了点をスプラインの中央にピン留めすることを繰り返し行なっています:
ピンは任意の数だけ追加することができます。 以下の例では、3つのピンが設定されています。 1つ目のピンは、ジョイントチェーンの始点を単位弧長0.25に拘束しています。 2つ目のピンは、ジョイントチェーンの終点を単位弧長0.75に拘束しています。 3つ目のピンは、ジョイントチェーンの中間点をスプライン上の単位弧長0.35から0.65の間でアニメーションさせています:
また、ピンを使用して、固定長スプラインを始点から伸ばすこともできます。 以下の例では、1つのピンによってジョイントチェーンの端がスプラインの端に拘束されています。 endoffset の値は初期状態で0に設定されており、この値を大きくしていくと、ジョイントチェーンが始点の位置から伸びていく様子が確認できます:
Note
ピンは、 startoffset から endoffset の範囲に制限されます。
ツイスト ¶
コントロールスプラインは、カーブに初期方向を与えます。 コントロールフレームの回転が180度を超えると、コントロールマトリックスではその超過分の回転を処理できなくなります。 この問題に対処するため、 twists ポートを介して、コントロールフレームではなく出力ジョイントチェーンに回転を直接加えることができます。 個々のジョイントのツイストが180度を超えない限り、回転は安定した状態を維持するはずです。
以下の例では、スプラインの末端に単一のツイストが作成されています。 その回転は、0から2*PIラジアンまでアニメーションします:
このノードには、任意の数だけツイストエントリを追加することができます。 以下の例では、弧長0.25の位置と0.75の位置に0ラジアンのツイストが追加され、弧長0.5の位置には0から2*PIラジアンまでアニメーションするツイストが追加されています:
スプラインサンプル ¶
サンプルは、 xforms ポートから出力され、出力サンプルの数は numsamples の値によって決定されます。 そのサンプルの向きは、そのサンプルを囲んだコントロールスプラインの座標系から補間されます。
デフォルトでは、サンプルはジョイントチェーンとして使用できるように構築されます。 具体的には、サンプルのローカルのLook At軸( lookataxis )が次のサンプルの位置と一致するように補間された向きが再調整されます。 最後サンプルの lookataxis は、カーブの接線と一致します。 Look At軸の整列方法は、 lookattype ポートで調整することができます。
lookattype |
Look At Type |
|---|---|
0 |
次のサンプル Look At軸は、出力ジョイントチェーン内の次のサンプルに整列します。 |
1 |
Curve Tangent Look At軸は、曲線の接線ベクトルに整列します。 |
xforms 配列に加え、サンプルは outgeo 出力ポートを介してジオメトリとしても利用可能です。
outgeo ジオメトリには、ジョイントの向き(とスケール)を含んだtransform Pointアトリビュートがあります。
スプラインオフセット ¶
スプラインオフセットとは、スプラインの始点からスプライン沿いの特定の点までのオフセットのことです。 オフセットは、( startoffset 、 endoffset 、 twists 、 pins のポートで指定された)値と( startinterp 、 endinterp 、 twistinterps 、 pinintersp のポートで指定された)単位で定義されます。 オフセットの単位のことを“Interpretation”と呼びます。
interp |
Interpretation |
|---|---|
0 |
Unit Parametric オフセット値は、0がスプラインの始点、1がスプラインの終点を示した正規化されたパラメトリック値として解釈されます。 Unit Parametric オフセットは、スプラインのパラメタリゼーションの変更(例えば、コントロールスプラインのCVの追加/削除など)に対してより不変性を保ちつつ、パラメトリックドメイン内でサンプリングを行なうのに役立ちます。 |
1 |
Unit Arclength オフセット値は、正規化された弧長として解釈されます。 このオフセットは、スプラインに沿った弧長の割合を表現します。 0はカーブの始点、1はカーブの終点を示します。 Unit Arclength オフセットは、スプラインの長さが変化しても相対的な距離を維持するのに便利です。 |
2 |
Parametric オフセット値は、パラメトリック値として解釈されます。 パラメトリック値は、スプライン沿いの位置を正確に示し、スプラインの長さや形状の変更の影響を受けにくくすることができます。 |
3 |
Arclength オフセット値は円弧長として解釈されます。 Arclength オフセットは、スプラインの長さが変化した場合でも、スプライン沿いの特定の距離におけるオフセットを指定するのに役立ちます。 |
指定がない場合、Interpretationは Unit Parametric とみなされます。
startoffset と endoffset の値(およびそれに呼応する startinterp と __endinterp__の値)は、サンプリングに使用されるスプラインの有効領域を制限します。 これらのパラメータを変更することで、以下のような様々な効果を実現することができます:
-
スプラインに沿ってジョイントチェーンを伸ばす:
-
固定長ジョイントチェーンをスプラインに沿って移動させる:
固定長スプライン ¶
固定長スプラインとは、出力サンプル間の長さをユーザが定義できるスプラインのことです。 固定長スプラインは、 restlengths ポートに入力が指定され、 stretch ポートの値が0の場合に作成されます。 出力サンプルをジョイントチェーンと見なすと、各 restlengths の値は、ジョイントチェーン内の呼応するジョイントと次のジョイントとの間の距離となります。
長さが不均一な場合に対応するため、ジョイント毎に静止長を設定することができます:
restlengths エントリの数が出力サンプルの数と一致しない場合、すべてのジョイントに静止長が割り当てられるよう、ユーザが指定した最後の静止長が必要な回数だけ繰り返されます。 すべてのジョイントの静止長が均一なジョイントチェーンを生成するには、 restlengths に単一の値を入力するだけで済みます。
ピンを使用すると、固定長ジョイントチェーンをスプラインに沿ってオフセットさせることができます。 ジョイントチェーンがスプラインの startoffset または endoffset に到達すると、ジョイントは互いに重なり始めます。 ただし、 overshoot をTrueに設定すると、ジョイントチェーンはスプラインのオフセットに到達しても重なり合うことはなく、場合によってはスプラインを完全にオーバーシュートすることもあります。
伸縮性のあるスプライン ¶
伸縮性のあるスプラインとは、利用可能な長さに沿って出力サンプルを伸縮させ、 stretchtype に基づいてスプラインの startoffset と endoffset の間にサンプルを均等に分布させるスプラインのことです。
stretchtype |
ストレッチタイプ |
|---|---|
0 |
Arclength サンプルは、等間隔の弧長で分布します。
|
1 |
Parametric サンプルは、等間隔のパラメトリック間隔で分布します。
|
伸縮挙動が発生するのは、以下のいくつかの場合です:
-
restlengths ポートが接続されていない場合
-
stretch ポートの値が1の場合
-
スプラインのピンが出力ジョイントを伸縮させる場合
固定長スプラインの解が存在する場合、 stretch ポートは、その固定長の解と伸縮の解のブレンドを制御します。 0の値は、伸縮なしに相当し、1の値は、完全に伸縮した状態になります。 中間値ではブレンドが行なわれます。
Stretch and Squash ¶
stretchscale と squashscale の値をそれぞれ調整することで、出力トランスフォームにストレッチおよびスクァッシュのスケール係数を適用することができます。 値が1より大きい場合、サンプルが静止長を超えて伸びるとストレッチが発生し、サンプルが静止長よりも手前でスクァッシュが発生します。 値が1の場合、ストレッチやスクァッシュのスケールが適用されないことを示します。 stretchsquashtype ポートでは、ジョイントセグメントに適用するストレッチおよびスクァッシュのスケールのタイプを指定することができます。 以下のテーブルで色々なタイプのストレッチおよびスクァッシュを説明するために、まず等間隔に分布したピンを含んだ静止長のジョイントチェーンから始め、次にそのジョイントチェーンをストレッチします:
stretchsquashtype |
ストレッチ/スクァッシュのタイプ |
|---|---|
0 |
Joint Length 個々のジョイントが受けるストレッチまたはスクァッシュの量は、ジョイントチェーン内の隣接ジョイントに限定されます。 隣接ジョイント間の距離が長くなると、そのジョイントはストレッチします。距離が短くなると、そのジョイントはスクァッシュします。 ストレッチとスクァッシュは、ジョイントの長さとその静止長の比率を用いて計算されます(例えば、ジョイントの長さが静止長より長い場合、ストレッチが発生します):
内部ピンを移動させると、ジョイントチェーンに沿ってストレッチとスクァッシュが発生します。 各ジョイントは独立して扱われるため、ストレッチされたセグメントとスクァッシュされたセグメントの間には、ハードな遷移が生じやすいです:
|
1 |
Smoothed Segments ストレッチとスクァッシュは、 Joint Length モードと同様の方法で計算されますが、ピン間のみに適用されるため、ピンにおけるスケールはストレッチとスクァッシュの影響を受けません:
このモードは、スプラインに沿ってスライドする固定長ジョイントチェーンに最適です。 この場合、固定長ジョイントチェーン内のストレッチとスクァッシュは自然に見え、ジョイントチェーンの両端でのストレッチまたはスクァッシュは局所的な効果となります。 Note ジョイントチェーンをほとんどの場合にストレッチさせることを意図する場合、このモードは最適な選択肢にならない可能性があります。 なぜなら、ピン位置でのスケールはストレッチの影響を受けないため、ジョイントチェーンがピン位置で膨らんでしまうからです。 この膨らみは、ジョイントチェーンが均等にストレッチされている場合(ピンが等間隔に分布しており、各ジョイントチェーンセグメントが同じだけストレッチされている場合)に顕著になります。 ピンの数を変更すると、ジョイントチェーンの膨らみの数に影響します。
|
2 |
Joint Chain Length 個々のジョイントが受けるストレッチとスクァッシュの量は、隣接ジョイントからの距離に加え、ジョイントチェーンの長さによっても影響を受けます。 ストレッチとスクァッシュは、以下の比率を用いて計算されます:
内部ピンを移動させると、ピン間でストレッチとスクァッシュが生じますが、ピンのスケールはストレッチとスクァッシュによるスケールの影響を受けません。 これは Smoothed Segments モードと同様です。 一方、ジョイントチェーンの長さを変更して全体をストレッチまたはスクァッシュさせると、ピンを含めジョイントチェーン全体がスケールされます。 その結果、ジョイントチェーンが均等にストレッチされると、このモードでは Smoothed Segments モードで見られるような膨らみが生じません。 以下の画像では、 Joint Length モード、 Smoothed Segments モード、 Joint Chain Length モードの比較を載せています:
ジョイントチェーンの長さの変更はピンでのスケールに影響を与えるため、このモードは、固定長ジョイントチェーン、または、完全に伸びた状態を維持するジョイントチェーンに最適です。 |
3 |
Spline Length 個々のジョイントが受けるストレッチやスクァッシュの量は、隣接ジョイントからの距離に加え、スプラインカーブの長さによっても影響を受けます。 ストレッチとスクァッシュは、以下の比率を用いて計算されます:
Note スプラインの静止長は、ジョイントチェーンの静止長であるとみなされます。 以下の画像では、ジョイントチェーンは静止長であり、スプラインの長さが増加しています。 これによって、スクァッシュが生じます。 この結果を理解するために、ジョイントチェーンが元のスケールを維持したまま、より長いスプラインの全長に沿ってストレッチされ、その後、各セグメントが下図に示す位置にスクァッシュされた状態を想像してください:
このモードは、伸縮性のあるジョイントチェーン、特にジョイントチェーンの末端セグメントで(内部セグメントでのスケールに加えて)局所的なストレッチやスクァッシュを行ないたい場合に役立ちます。 このモードで末端セグメントを調整すると(ジョイントチェーンの長さを変更すると)、 Joint Chain Length モードの場合と同様に、ジョイントチェーン全体のジョイントはスケールされません:
このモードは、スプラインカーブの長さがピンでのスケールに影響を与えるため、固定長ジョイントチェーンには適しません。 |
ピン ¶
ピンは、固定長ジョイントチェーンの位置をスプライン上のオフセット位置に拘束します。 ピンの入力がない場合、ジョイントチェーンの始点をスプラインカーブの始点に拘束する暗黙のピンが作成されます。
以下の例では、ジョイントチェーンの開始点、中間点、終了点をスプラインの中央にピン留めすることを繰り返し行なっています:
ピンは任意の数だけ追加することができます。 以下の例では、3つのピンが設定されています。 1つ目のピンは、ジョイントチェーンの始点を単位弧長0.25に拘束しています。 2つ目のピンは、ジョイントチェーンの終点を単位弧長0.75に拘束しています。 3つ目のピンは、ジョイントチェーンの中間点をスプライン上の単位弧長0.35から0.65の間でアニメーションさせています:
また、ピンを使用して、固定長スプラインを始点から伸ばすこともできます。 以下の例では、1つのピンによってジョイントチェーンの端がスプラインの端に拘束されています。 endoffset の値は初期状態で0に設定されており、この値を大きくしていくと、ジョイントチェーンが始点の位置から伸びていく様子が確認できます:
Note
ピンは、 startoffset から endoffset の範囲に制限されます。
ツイスト ¶
コントロールスプラインは、カーブに初期方向を与えます。 コントロールフレームの回転が180度を超えると、コントロールマトリックスではその超過分の回転を処理できなくなります。 この問題に対処するため、 twists ポートを介して、コントロールフレームではなく出力ジョイントチェーンに回転を直接加えることができます。 個々のジョイントのツイストが180度を超えない限り、回転は安定した状態を維持するはずです。
以下の例では、スプラインの末端に単一のツイストが作成されています。 その回転は、0から2*PIラジアンまでアニメーションします:
このノードには、任意の数だけツイストエントリを追加することができます。 以下の例では、弧長0.25の位置と0.75の位置に0ラジアンのツイストが追加され、弧長0.5の位置には0から2*PIラジアンまでアニメーションするツイストが追加されています:
入力 ¶
cvs:
VariadicArg<Matrix4>
CVの位置と各CV付近のスプラインの座標系もMatrix4トランスフォームで指定されたCVのリスト。
splinetype:
Int
入力のCVから生成されるスプライン曲線のタイプ。 0の値はベジエ曲線を、1の値はNURBS曲線を生成します。 デフォルトはベジエ曲線です。
order:
Int
生成されるスプライン曲線の階数。 スプラインの階数が高くなるほど、各CVが曲線の形状に及ぼす影響はより広範囲になります。 階数が3および4の曲線は、各CVが曲線の形状に比較的局所的な影響を与えつつ、滑らかな形状を生成できるため、それらの階数がよく選ばれます。 階数が2の曲線は、線形ポリラインに相当します。
numsamples:
Int
評価する出力サンプルの数。
lookataxis:
Vector3
出力ジョイントチェーン内の次のサンプルに向けてサンプルを揃えるローカル空間ベクトル。 デフォルト値はX軸であるため、デフォルトでは、サンプルのトランスフォームのX軸が次のサンプルの方向を指します。
安定した結果を得るには、コントロールスプラインのtransformアトリビュートの向きがこのLook At軸と同じ軸を使用していることが重要です。
lookattype:
Int
サンプルの lookataxis の向きをどのように合わせるかを決定します。 デフォルト値の0の場合、 lookataxis はジョイントチェーン内の次のサンプルの方向に向きます。 値が1の場合、 lookataxis はカーブの接線ベクトルと一致するように向きます。
smooth:
Bool
Trueに設定すると、出力トランスフォームの向きを補間する際に、スムースステップの平滑化が使用されます。 デフォルト値はFalseです。
stretchtype:
Int
サンプルを Parametric または Arclength のどちらの方法で均等にストレッチさせるか決定します。 0の値は Arclength 、1の値は Parametric を意味します。 デフォルトは Arclength です。
stretch:
Float
固定長解と伸縮性解の間をブレンドします。 0の値は固定長解、1の値は伸縮性解を意味し、中間値はこれら2つの解のブレンドとなります。 デフォルトは1(伸縮性解)です。
stretchsquashtype:
Int
stretchscale または squashscale のスケール係数が使用される際にジョイントセグメントに適用するストレッチ/スクァッシュモデル。 デフォルトでは、 Joint Length タイプが使用されます。
stretchscale:
Float
サンプルが(静止長よりも長く)ストレッチされる際の出力トランスフォームに適用するスケール係数。 デフォルトは1で、追加のスケールが行なわれないことを意味します。 有効なスケーリング係数は、1より大きい値です。
squashscale:
Float
サンプルが(静止長よりも短く)スクァッシュされる際の出力トランスフォームに適用するスケール係数。 デフォルトは1で、追加のスケールが行なわれないことを意味します。 有効なスケーリング係数は、1より大きい値です。
startoffset:
Float
スプラインの有効領域の開始点をスプライン上の特定のオフセット位置に制限します。 デフォルトは0で、デフォルトの startinterp と組み合わせると、スプラインの有効領域がスプラインカーブの始点から始まることを意味します。
startinterp:
Int
startoffset ポートのInterpretation。 デフォルトのInterpretationは Unit Parametric です。
endoffset:
Float
スプラインの有効領域の終了点をスプライン上の特定のオフセット位置に制限します。 デフォルトは1で、デフォルトの endinterp と組み合わせると、スプラインの有効領域がスプラインカーブの終点で終了することを意味します。
endinterp:
Int
endoffset ポートのInterpretation。 デフォルトのInterpretationは Unit Parametric です。
overshoot:
Bool
Trueに設定、且つ、固定長ジョイントチェーンが startoffset または endoffset を超えて伸びている場合、ジョイントチェーンはオフセット位置で収縮することなく、その長さを維持します。 デフォルトはFalseです。
restlengths:
FloatArray
出力サンプルとジョイントチェーン内の次のサンプルとの間の距離。 各 restlengths エントリは、1つの出力サンプルの静止長に呼応します。
restlengths エントリの数が出力サンプルの数と一致しない場合、すべてのジョイントに静止長が設定されるまで最後のユーザ指定の静止長が必要な回数だけ繰り返されます。 すべてのサンプルが同じ静止長を持つジョイントチェーンを生成するには、 restlengths 値を1つ指定するだけで済み、その値がすべてのサンプルに対して繰り返されます。
ユーザ指定の静止長がない場合、静止長はストレッチされた解に基づいて設定されます。
twists:
Vector2Array
サンプルのローカル lookataxis 軸を基準に適用される追加の回転。
ツイストはVector2で表現します。
そのVector2の1番目のコンポーネントは回転角(単位はラジアン)です。
2番目のコンポーネントはスプライン上のツイストが適用されるオフセット位置です。
デフォルトでは、オフセットInterpretationは Unit Parametric ですが、 twistinterps ポートの呼応するエントリを設定することで変更することができます。
twistinterps:
IntArray
各 twistinterps エントリは、 twists ポートの呼応するエントリのオフセットInterpretationを設定します。 twistinterps の入力がない場合、デフォルトのオフセットInterpretationは Unit Parametric となります。
twistinterps エントリの数が twists エントリの数と一致しない場合、各 twists エントリに有効なInterpretationを与えるために、最後の twistinterps の値が必要に応じて繰り返し適用されます。 この動作を利用すれば、 twistinterps に希望するInterpretationのエントリを1つ追加するだけで、 twists のすべてのオフセットInterpretationを簡単に設定することができます。
pins:
Vector2Array
固定長ジョイントチェーン上の位置をスプライン上のオフセットに拘束します。
ジョイントチェーン上の位置とスプライン上のオフセットは、Vector2で指定します。
そのVector2の1番目のコンポーネントは出力ジョイントチェーン上の位置であり、そのInterpretationは常に Unit Arclength となります。
2番目のコンポーネントはスプライン沿いのオフセットです。
デフォルトでは、そのInterpretationは Unit Parametric ですが、 pininterps ポートの呼応するエントリを設定することで変更することができます。
pininterps:
IntArray
各 pininterps エントリは、 pins ポートの呼応するエントリのスプラインオフセットInterpretationを設定します。 pininterps の入力がない場合、デフォルトのスプラインオフセットInterpretationは Unit Parametric となります。
pininterps エントリの数が pins エントリの数と一致しない場合、各 pins エントリに有効なInterpretationを与えるために、最後の pininterps の値が必要に応じて繰り返し使用されます。 この動作を利用すれば、 pininterps に希望するInterpretationのエントリを1つ追加するだけで、 pins のすべてのスプラインオフセットInterpretationを簡単に設定することができます。
出力 ¶
arclength:
Float
リサンプリングされたスプラインで形成されたコントロールスプラインの弧長。 overshoot がTrueに設定、且つ、サンプルがスプラインの端点を越えて延長されている場合、その超過分も弧長に含まれます。
xforms:
Matrix4Array
サンプリングされたトランスフォーム。 サンプルの数は、 numsamples ポートによって決定されます。
| See also |