式コントローラの技法

この項では、有効な式の技法についてまとめました。

一般的な式

この項では、アニメート時にさまざまな状況で役立つと思われる式を紹介します。

円形パス

[ Radius * cos(360*Time),
Radius * sin(360*Time), 0 ]

Time は、NT や S など、定義済みの時間変数の 1 つです。

2 つの Radius に別々の値を指定すると、楕円パスができます。

0 (ゼロ)以外の値を Z コンポーネントに指定すると、パスは平面ではなくなります。

その他のオブジェクト

[X, Y, Z] + Position

Position は、2 番目のオブジェクトの位置コントローラです。

ベクトル[X, Y, Z]は、2 番目のオブジェクトからのオフセットです。[0,0,0]の場合、2 つのオブジェクトが同じ位置を占めています。ここにはベクトル式を指定することもできます。その場合は、オブジェクトそのものの動きを指定します。

2 つのオブジェクト間でオブジェクトを保持

(Position1 + Position2) / 2

Position1Position2 は、2 つのオブジェクトの位置コントローラです。

除数 2 により、オブジェクトは 2 つの他のオブジェクトの間の半分の位置に配置されます。他の値は、オブジェクトを他の位置に配置するための値です。

オブジェクト間でのバウンド

(1+sin(360*Time))/2 * (Pos1-Pos2) + Pos2

Time は、NT や S などの定義済みの値の 1 つを使用します。Pos1Pos2 は、他の 2 つのオブジェクトの位置コントローラです。

補助式(1+sin(360*Time))/2 は、時間を追って 0 と 1 の間で振動する値です。(Pos1-Pos2)は他の 2 つのオブジェクトの間のベクトルです。2 つを掛けて、Pos2 をオフセットとして加算すると、オブジェクトがベクトル沿いに配置されます。

カメラ距離によるオブジェクトのセグメント数の変更

この式では、カメラ距離に基づいて、円柱内のセグメント数を変更します。この値は、円柱の[セグメント](Segments)作成パラメータに割り当てられます。

if ( (length(Camera-Myself) > 35),
3 + (50*Height) / length(Camera-Myself),
MaxSegs)

Camera はカメラの位置コントローラ、Myself は円柱の位置コントローラ、Height (= 70)は円柱の高さ、MaxSegs (= 100)はセグメント数の最大値です。

カメラが近い場合、セグメント数が増えるので円柱がスムーズになり、カメラからの距離がある場合はスムージングには重点を置かずに、少ないセグメント数でレンダリング速度を優先します。

if() 関数では、最初の引数が真のとき 2 番目の引数を返し、真でない場合は、3 番目の引数を返します。この例では、カメラから円柱までの距離が 35 単位を超える場合、式でセグメント数を計算します。カメラが 35 単位以内の距離にある場合、セグメント数は MaxSegs 定数になります。

距離がしきい値の 35 に減少したので、2 番目の引数の値が採用されました。セグメント数は MaxSegs まで増加します。「3+」の加算では、たとえ除算で端数処理して 0 (ゼロ)になっても、円柱の最小セグメント数 3 が確保されます(セグメントは整数)。

注: カメラと円柱のどちらか、またはその両方が移動しているかどうかは、この式にとっては問題ではありません。