lunarborの備忘録

CGソフトの使い方を記録しておけば自分とどこかの誰かに役立つだろう

エクスプレッションビルダー ベクターファンクション 日本語訳 (再構成版)

使用ソフト

  • Lightwave2020

ベクターファンクション

 

ファンクション

■abs

abs (Explicit)

◇記述( Description)

 この関数は、手動で指定した入力ベクトルを修正し、正のベクトル結果を生成します。入力ベクトルの負の値のみを正の結果に変換し、'Triplet(三つ組)'*1の他の値が正の場合は、その値は変更されません。結果はベクトルとして返されます。

abs( < InputA , InputB , InputC > )

InputA には、数値、チャネル、またはサブエクスプレッションを指定できる。
InputB には、数値、チャネル、またはサブエクスプレッションを指定できる。
InputC には、数値、チャネル、またはサブエクスプレッションを指定できる。

すべての入力は、標準入力変数(Timet Frame、Value)のいずれかを受け入れることができる。

abs (Standard)

◇記述( Description)

 この関数は、入力ベクトルを修正して正のベクトル結果を生成します。入力ベクトルの負の値を正の結果に変換するだけで、'Triplet(三つ組)' の他の値が正の場合は、その値は変更されません。結果はベクトルとして返されます。

abs( InputA )

InputA には ベクトル、または ワールドベクトル を指定します。

 

◇サンプル(Example)/◇アプリケーション(Application) ~abs共通~

 abs() 関数はベクトルまたは標準入力データを受け取ることができます。
この関数の詳細については、'LScript ファンクション' セクションのサンプルとアプリケーションを参照してください。

■angle

angle (X axis,Explicit)

◇記述( Description)

 この関数は、手動で指定した2つの入力ベクトルと<0,0,0>の原点を比較して、(X軸またはYZ平面と比較した)角度の値を返します。

angle( < InputA , InputB , InputC > < InputD , InputE , InputF > , 1 )

InputA には、チャネル、数値、またはサブエクスプレッションを指定できる。
InputB には、チャネル、数値、またはサブエクスプレッションを指定できる。
InputC には、チャネル、数値、またはサブエクスプレッションを指定できる。
InputD には、チャネル、数値、またはサブエクスプレッションを指定できる。
InputE には、チャネル、数値、またはサブエクスプレッションを指定できる。
InputF には、チャネル、数値、またはサブエクスプレッションを指定できる。
1はX軸(またはZY平面)を表す。
入力A~Fは、標準入力変数(Time、Frame、Value)のいずれかを受け付ける。

angle (X axis, Standard)

◇記述( Description)

 この関数は、2つの入力ベクトルと原点<0,0,0>を比較して、(X軸またはYZ平面と比較した)角度値を返します。入力は、位置ベクトル、スケールベクトル、またはワールドポジションベクトルのみです。

angle( InputA , InputB , 1 )

inputA には、位置ベクトル、スケールベクトル、またはワールドポジションベクトルを指定できる。
inputB には、位置ベクトル、スケールベクトル、またはワールドポジションベクトルを指定できる。

1はX軸(またはZY平面)を表す。

 

◇サンプル(Example) ~angle X axis共通~

angle( < 0, 1, 0 > , < 0, 0, 1 > , 1 )
 上記のangle()関数は、X軸と原点<0,0,0>を基準とした2つの入力位置ベクトルを比較し、90度の値を出力します。

angle( < 0, 1, 1 > , < 0, 0, 1 > , 1 )
 上記のangle()関数は45度の値を出力します。

angle( < 0, 0, -1 > , < 0, 0, 1 > , 1)
 上記のangle()関数は180度の値を出力します。

*上記の例では、ビューポートを'Right'に切り替え、上で指定した値を持つ2つのNullオブジェクトを使用し、LightのPitchにangle()関数を適用します。これは、angle()関数がどのように動作するかを説明するものです。

 

◇アプリケーション(Application) ~angle X axis共通~

※青字の部分だけ違います

 明示的(Explicit) / 標準的(Standard) なベクトル入力を持つ angle() 関数は、非常に特殊な用途を持ち、多くの主流となるエクスプレッションの応用には当てはまりません。とはいえ、ちょっと特殊な応用の例を挙げましょう。

 フロントエンドローダー*2のアニメーションを作成し、フロントリフティングバーを式で制御したい場合、angle()関数を使用できます。キャビンベースの位置とフロントスクープの位置を入力し、フロントリフティングバーのピッチにangle()関数を適用します。
(フロントリフティングバーを正しく制御するために、angle()関数の出力を再マッピングする必要があるかもしれません)

値の再マッピングについての詳細は、LScriptファンクション 'mapRange' を参照してください。

angle (Y Axis,Explicit)

◇記述( Description)

 この関数は、手動で指定した2つの入力ベクトルと<0,0,0>の原点を比較して、(Y軸またはXZ平面と比較した)角度値を返します。結果の単位は度であり、範囲は 0-180 です。

angle( < InputA , InputB , InputC > , < inputD , InputE , InputF > , 2 )

InputA には、チャネル、数値、またはサブエクスプレッションを指定できる。 
InputB には、チャネル、数値、またはサブエクスプレッションを指定できる。
InputC には、チャネル、数値、またはサブエクスプレッションを指定できる。
InputD には、チャネル、数値、またはサブエクスプレッションを指定できる。
InputE には、チャネル、数値、またはサブエクスプレッションを指定できる。
InputF には、チャネル、数値、またはサブエクスプレッションを指定できる。

2はY軸(またはXZ平面)を表す。

入力A~Fは、標準入力変数(Time、Frame、Value)のいずれかを受け付ける。

angle (Y Axis, Standard)

◇記述( Description)

 この関数は、2つの入力ベクトルと原点<0,0,0>を比較して、(Y軸またはXZ平面と比較した)角度の値を返します。入力は、位置ベクトル、スケールベクトル、またはワールドポジションベクトルのみです。結果は度単位で、範囲は 0~180 です。

angle( InputA , InputB , 2 )

inputA には、位置ベクトル、スケールベクトル、またはワールドポジションベクトルを指定できる。
inputB には、位置ベクトル、スケールベクトル、またはワールドポジションベクトルを指定できる。

2はY軸(またはXZ平面)を表す。

 

◇サンプル(Example) ~angle Y Axiz 共通~

angle( < 0, 0, 1 > , < 1, 0, 0 > , 2)
 上記のangle()関数は、Y軸と原点<0,0,0>を基準とした2つの入力位置ベクトルを比較し、90度の値を出力します。

angle( < 1, 0, 1 > , < 1, 0, 0 > , 2)
 上記のangle()関数は45度の値を出力します。

angle( < -1, 0, 0 > , < 0, 0, 1 > , 2)
 上記のangle()関数は180度の値を出力します。

*上記の例では、ビューポートを'Top'に切り替え、上で指定した値を持つ2つのNullオブジェクトを使用し、LightのHeadingにangle()関数を適用します。これで、angle()関数がどのように動作するかがわかります。

angle (Z Axis,Explicit)

◇記述( Description)

 この関数は、手動で指定した2つの入力ベクトルと<0,0,0,>の原点を比較して、(Z軸またはXY平面と比較した)角度の値を返します。結果は度単位で、範囲は0-180です。

angle( < InputA , InputB , InputC > , < InputD , InputE , InputF > , 3 )

InputA には、チャネル、数値、またはサブエクスプレッションを指定できる。 
InputB には、チャネル、数値、またはサブエクスプレッションを指定できる。 
InputC には、チャネル、数値、またはサブエクスプレッションを指定できる。 
InputD には、チャネル、数値、またはサブエクスプレッションを指定できる。 
InputE には、チャネル、数値、またはサブエクスプレッションを指定できる。 
InputF には、チャネル、数値、またはサブエクスプレッションを指定できる。 

3はZ軸(またはXY平面)を表す。
入力A~Fは、標準入力変数(Timet Frame、Value)のいずれかを受け入れることができます。

angle (Z Axis, Standard)

◇記述( Description)

 この関数は、2つの入力ベクトルと原点<0,0,0>を比較して、(Z軸またはXY平面と比較した)角度の値を返します。入力は、位置ベクトル、スケールベクトル、またはワールドポジションベクトルのみです。結果の単位は度であり、範囲は 0~180です。

angle( InputA , InputB , 3 )

InputA には、位置ベクトル、スケールベクトル、またはワールドポジションベクトルを指定できる。
InputB には、位置ベクトル、スケールベクトル、またはワールドポジションベクトルを指定できる。

3はZ軸(またはXY平面)を表す。

 

◇サンプル(Example) ~angle Z Axiz 共通~

angle( < 0, 1, 0 > , < 0, 1, 0 >, 3 )
 上記のangle()関数は、Z軸と原点<0,0,0>を基準とした2つの入力位置ベクトルを比較し、90度の値を出力します。

angle( < 1, 1, 0 > , < 1, 0, 0 > , 3)
 上記のangle()関数は45度の値を出力します。

angle( < -1, 0, 0 > , < 1, 0, 0 > , 3)
 上記のangle()関数は180度の値を出力します。

*上記の例では、ビューポートを'Back'に切り替え、上で指定した値を持つ2つのNullオブジェクトを使用し、Light's Bankにangle()関数を適用します。これで、angle()関数がどのように動作するかがわかります。

 

◇アプリケーション(Application) ~angle Y Axiz / Z Axiz 共通~

※青字の部分だけ違います

 明示的(Explicit) / 標準的(Standard) 入力を持つ angle() 関数は、非常に特殊な用途を持ち、多くの主流となるエクスプレッションの応用には当てはまりません。
とはいえ、ここでちょっと特殊な応用例を挙げましょう。

 アニメーションの中で、2つのアイテムの位置に基づいて魔法のように開く2つのドアを作る必要がある場合、angle()関数を使用することができます。2つのアイテムの位置ベクトルをangle()関数に入力し、それぞれのドアのヘッディングチャンネルに適用します。(片方のドアのangle()関数の出力をリマップする必要があります) 

値の再マッピングについての詳細はLScript関数 'mapRange'を参照してください。

■ceil

ceil (Explicit)

◇記述( Description)

 この関数は、手動で指定したベクトル 'Triplet(三つ組)' 内の浮動小数点値を持つ入力を、次の整数に丸めます。

ceil( < InputA , InputB , InputC > )

InputA には、数値、チャネル、またはサブエクスプレッションを指定できる。 
InputB には、数値、チャネル、またはサブエクスプレッションを指定できる。 
InputC には、数値、チャネル、またはサブエクスプレッションを指定できる。 

すべての入力は、標準入力変数(Time、Frame、Value)のいずれかを受け入れることができる。

ceil (Standard)

◇記述( Description)

この関数は、ベクトル 'Triplet(三つ組)' 内の浮動小数点値を持つ入力を、次の整数に丸めます。

ceil( InputA )

InputA には ベクトル、または ワールドベクトル を指定する。

 

◇サンプル(Example)/◇アプリケーション(Application) ~ceil共通~

 ceil() 関数はベクトルまたは標準入力データを受け取ることができます。
この関数の詳細については、'LScript ファンクション' セクションのサンプルとアプリケーションを参照してください。

■center

center (Explicit)

◇記述( Description)

 この関数は、手動で指定した2つのベクトル入力の間の中心点を導出します。
結果はベクトルとして返されます。

center( < InputA , InputB , InputC > , < InputD , InputE , InputF > )

InputA には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputB には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputC には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputD には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputE には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputF には、チャネル、数値、またはサブエクスプレッションを指定できる。  

すべての入力は、標準入力変数(Time、Frame、Value)のいずれかを受け入れることができる。

 

◇サンプル(Example)

center( <0,0,0> , <2,2,2> )
 上記のcenter()関数は、2つのベクトル入力を比較し、<0,0,0,>と<2,2,2>を中心とする<1,1,1>のベクトル値を出力します。

center( < Camera.wpos(Time).x , Light.wpos(Time).x , Null.wpos(Time).x > , <0,0,0> )
 カメラのワールドX位置を1、ライトのワールドX位置を1、NullのワールドX位置を1に設定すると、最初の入力ベクトルは<1,1,1>になります。
上記のcenter()関数は、<.5,.5,.5>のベクトル結果を返します。

center( < [Camera.Rotation.H) , 0 , 0 > , < (Light.Rctation.H] , 0 , 0 > )
 カメラのヘディングを30、ライトのヘディングを30に設定すると、両方の入力ベクトルは<30,0,0>に等しくなり、上記のcenter()関数は<30,0,0>の値を返します。

このように、2つの入力ベクトルが同じ値であれば、center()関数はその共通の値を結果として返します。

 

◇アプリケーション(Application)

 明示的ベクトル入力を持つcenter()関数は、非常に特殊な用途があり、多くの主流となるエクスプレッションの応用には当てはまりません。
とはいえ、ここでちょっと特殊な応用例を挙げてみましょう。

 最初の入力に左足、右足、腰のヘディング値を入力し、2番目の入力に<0,0,0>を入力すると、全体のヘディングベクトルの大きさの中間点を見つけることができます。
そしてcenter()関数の結果をvmag()関数に渡すと、その結果を使って他のエクスプレッションコントロールや診断を行うことができます。
Vector 'Magnitudes' の詳細については vmag() 関数を参照してください。

center (Standard)

◇記述( Description)

 この関数は、2つの入力ベクトル間の中心点を導出します。結果はベクトルとして返されます。
center( InputA , InputB )
InputA には ベクトル、または ワールドベクトル を指定できる。
InputB には ベクトル、または ワールドベクトル を指定できる。

 

◇サンプル(Example)

center( <0,0,0> , <2,2,2> )
 上記のcenter()関数は、2つのベクトル入力を比較し、<0,0,0>と<2,2,2>の中央に位置する<1,1,1>のベクトル値を出力します。

center( [Camera.Position] , [Light.Position] )
 カメラの位置を<1,2,3>に、ライトの位置を<3,4,5>に設定すると、上記のcenter()関数は<2,3,4>のベクトル値を出力します。

center( LtFcot.wrot(Time) , RtFoot.wrot(Time) )
LtFcotのワールド回転を<30,0,0>に、RtFootのワールド回転を<30,0,0>に設定すると、上記のcenter()関数は<30,0,0>の値を返します。

このように、2つの入力ベクトルが同じ値であれば、center()関数はその共通の値を結果として返します。

 

◇アプリケーション(Application)

 標準的なベクトル入力を持つ center() 関数は、ベクトル入力を他の式に与えて評価するのに非常に便利です。

 平均的な足の位置に基づいて、シーン内でキャラクタがどれだけ移動したかを調べたい場合、左足と右足の位置ベクトルをcenter()関数に入力し、その結果をvmag()関数に渡して原点からの直線距離を取得できます。

 キャラクタの目の赤みは、両方の眼球の平均回転をベースにして増やすことができます。両方の眼球の回転ベクトルをcenter()関数に入力し、その結果をvmag()関数に渡して平均的な目の回転を取得します。次に、この値を目の赤のカラーチャンネルに適用します。

 'Magnitudes' ベクトルの詳細については、vmag() 関数を参照してください。

■cross

cross2d (CrossPrcduct,2D)

◇記述( Description)

この関数は"Cross Product 3D"と似ていますが、完全なベクトル(3つの値すべて)を使ってクロス積*3を導き出すのではなく、2つの値(手動で指定する必要があります)だけを使います。
結果は2次元のベクトルとなります。

cross2d( InputA , InputB , InputC , InputD )

InputA には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputB には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputC には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputD には、チャネル、数値、またはサブエクスプレッションを指定できる。  

すべての入力は、標準入力変数(Timet Frame、Value)のいずれかを受け入れることができる。

cross3d (CrossPrcduct,3D)

◇記述( Description)

 この関数は、1番目のベクトルに2番目のベクトルを掛け合わせる演算を行います。これは3次元の場合であり、0,0,0をベクトルの原点と仮定します。結果はベクトルとして返されます。

cross3d( InputA , InputB )

inputA には、ベクトルまたはワールドベクトルを指定できる。
inputB には、ベクトルまたはワールドベクトルを指定できる。

 

◇サンプル(Example) ~cross共通~

 'Cross' または 'Dot' の生成例は、このバージョンのエクスプレッション・ビルダーでは利用できません。

将来のアップデートでは、完全なサンプルとアプリケーション情報が提供される予定です。

 

◇アプリケーション(Application) ~cross共通~

 'Cross' と 'Dot' の生成は非常に特殊な用途を持つため、明示的に要求された状況でのみ使用すべきです

■dot

dot2d (Dot Product, 2D)

◇記述( Description)

これはベクトルのドット積*4ですが、2次元です。

dot2d( InputA , InputB , InputC , InputD )

InputA には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputB には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputC には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputD には、チャネル、数値、またはサブエクスプレッションを指定できる。  

すべての入力は、標準入力変数(Time、Frame、Value)のいずれかを受け入れることができる。

dot3d (Dot Product, 3D)

◇記述( Description)

 これはベクトルのドット積であり、(u*v )*cos(ベクトル間の角度)の演算です。
u と v のベクトルは u と v のノルム*5です。

dot3d( InputA , InputB )

InputA には ベクトル、または ワールドベクトル を指定できる。
InputB には ベクトル、または ワールドベクトル を指定できる。

 

◇サンプル(Example) ~dot 共通~

 'Cross' または 'Dot' の生成例は、このバージョンのエクスプレッション・ビルダーでは利用できません。

将来のアップデートでは、完全なサンプルとアプリケーション情報が提供される予定です。

 

◇アプリケーション(Application) ~dot 共通~

 'Cross' と 'Dot' の生成は非常に特殊な用途を持つため、明示的に要求された状況でのみ使用すべきです

■extent

extent (Explicit)

◇記述( Description)

 この関数は、手動で指定した 2 つのベクトル間の 'Magnitude (大きさ) '*6 を返します。明示的距離 "extent()"関数の 'Magnitude' は、指定されたベクトル 'Triplet(三つ組)' の各入力間の直線距離を表すベクトルとして表現されます。結果はベクトルとして返されます。

extent( < InputA , InputB , InputC > , < InputD , InputE , InputF > )

InputA には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputB には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputC には、チャネル、数値、またはサブエクスプレッションを指定できる。  
inputD には、チャネル、数値、またはサブエクスプレッションを指定できる。  
inputE には、チャネル、数値、またはサブエクスプレッションを指定できる。  
inputF には、チャネル、数値、またはサブエクスプレッションを指定できる。  

すべての入力は、標準入力変数(Timet Frame、Value)のいずれかを受け入れることができる。

 

◇サンプル(Example)

extent( <1,1,1> , <6,10,5> )

 上記のextent()関数は、2つの入力ベクトル間の距離を求め、<5,9,4>のベクトル値を出力します。これは、各ベクトル 'Triplet(三つ組)' の3つの入力それぞれの間の直線距離を表します。

extent( < Camera.wpos(Time).x , Light.wpos(Time).x , Null.wpos(Time).x > , <1,1,1> )

CameraのワールドX位置を-1、LightのワールドX位置を-1、NullのワールドX位置を-1に設定すると、上記のextent()関数は<2,2,2>のベクトル値を出力します。

extent( < [LtFoot.Rotation.H] , 0, 0 > , < [RtFoot.Rotation.H) , 0 ,0 > )

 LtFcotのヘディングを30に設定し、RtFootのヘディングを30に設定すると、両方の入力ベクトルは<30,0,0>に等しくなり、上記のextent()関数は<0,0,0>の値を返します。

◇アプリケーション(Application)

 明示的ベクトル入力を持つextent()関数は、非常に特殊な用途があり、多くの主流となるエクスプレッションの応用には当てはまりません。とはいえ、ここでちょっと特殊な応用例を挙げてみましょう。

 個々のチャンネル(HipHeadingNull、HipPitchNull、HipBankNull)を制御するために複数のNullを使用しているキャラクタの左右の腰の間の全体的な回転差を求める場合、明示的なextent()関数に両方の腰の制御を入力できます。そして、その出力をvmag()関数に渡して、変化の大きさを測定します。

 'Magnitudes' ベクトルの詳細については vmag() 関数を参照してください。

extent (Standard)

◇記述( Description)

 この関数は、2 つのベクトル間の ''Magnitude (大きさ) '' を返します。
標準距離 extent() 関数の 'Magnitude' は、ベクトル 'Triplet(三つ組)' の各入力間の直線距離を表すベクトルとして表現されます。結果はベクトルとして返されます。

extent( InputA , InputB )

InputA には ベクトル、または ワールドベクトル を指定できる。
InputB には ベクトル、または ワールドベクトル を指定できる。

 

◇サンプル(Example)

extent( <1,1,1> , <6,10,5> )

 上記のextent()関数は、2つの入力ベクトル間の距離を求め、<5,9,4>のベクトル値を出力します。これは、各ベクトル 'Triplet(三つ組)' の3つの入力それぞれの間の直線距離を表します。

extent( [Camera.Position] , [Light.Position] )
 カメラの位置を<-1,-1,-1>に設定し、ライトの位置を上記のextent()関数に設定すると、<2,2,2>のベクトル値が出力されます。

extent( LtFcct.wrot(Time) , RtFoot.wrot(Time) )
 LtFcotのワールド回転を<30,0,0>に設定し、RtFcotのワールド回転を<30,0,0>に設定すると、上記のextent()関数は<0,0,0>の値を返します。

 

◇アプリケーション(Application)

 標準的なベクトル入力を持つ extent() 関数は、ベクトル入力を他の式に与えて評価するのに非常に便利です。

 飛行機のプロペラ(プロペラのトリミングをすべて含む)の全体的な回転値の差を求め、その結果をvmag()関数に入力して、コックピットの式で制御されるゲージを動かすことができます。

 足の位置に基づいてキャラクターの腰の高さを制御したい場合は、左足と右足の位置ベクトルをextent()関数に入力し、その結果をvmag()関数に渡して腰のY値を制御します。

 'Magnitudes'ベクトルの詳細については vmag() 関数を参照してください。

■floor

floor (Explicit)

◇記述( Description)

 この関数は、手動で指定したベクトル 'Triplet(三つ組)' 内の浮動小数点値を持つ入力を、次の整数に丸めます。

floor( < InputA , InputB , InputC > )

InputA には、数値、チャネル、またはサブエクスプレッションを指定できる。
InputB には、数値、チャネル、またはサブエクスプレッションを指定できる。 
InputC には、数値、チャネル、またはサブエクスプレッションを指定できる。 

すべての入力は、標準入力変数(Time、Frame、Value)のいずれかを受け入れることができる。

floor (Standard)

◇記述( Description)

 この関数は、ベクトル 'Triplet(三つ組)' 内の浮動小数点値を持つ入力を、次の整数に丸めます。

floor( InputA )

InputA には ベクトル、または ワールドベクトル を指定できる。 

 

◇サンプル(Example)/◇アプリケーション(Application) ~floor共通~

floor()関数はベクトルまたは標準入力データを受け取ることができます。
この関数の詳細については、'LScript ファンクション' セクションのサンプルとアプリケーションを参照してください。

■max

max (Explicit)

◇記述( Description)

 この関数は、手動で指定した 2 つのベクトル入力を比較し、最も高い方の入力値と等しい結果を返します。入力ベクトルの値は、原点 <0,0,0> からの距離に基づいています。結果はベクトルとして返されます。

max( < inputA , inputB , inputC > , < InputD , InputE , InputF > )

inputA には、チャネル、数値、またはサブエクスプレッションを指定できる。  
inputB には、チャネル、数値、またはサブエクスプレッションを指定できる。  
inputC には、チャネル、数値、またはサブエクスプレッションを指定できる。  
inputD には、チャネル、数値、またはサブエクスプレッションを指定できる。  
inputE には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputF には、チャネル、数値、またはサブエクスプレッションを指定できる。  

すべての入力は、標準入力変数(Time、Frame、Value)のいずれかを受け入れることができる。 

 

◇サンプル(Example)

max( < 1, 1, 1> , < 2, 2, 2> )
 上記のmax()関数は、2つの入力ベクトルを比較し、その結果として<2,2,2>を返します。

max( < [Camera.Position.X] , [Light.Position.X] , [Null.Scale.X] > , < 1 , 1 , 1 > )
 カメラのXポジションを0、ライトのXポジションを0、NullのXスケールを0に設定すると、最初の入力ベクトルは<0,0,0>に等しくなります。上記のmax()関数は2つの入力ベクトルを比較し、結果として<1,1,1>を返します。

max( < 2, 2, 2 > , < 2, 2, 2 > )
 上記のmax()関数は、2つの入力ベクトルを比較し、その結果として<2,2,2>を返します。上で見たように、もしベクトル入力が同じなら、その値を結果として返します。

 

◇アプリケーション(Application)

 明示的ベクトル入力を持つmax()関数は、非常に特殊な用途があり、多くの主流となるエクスプレッションの応用には当てはまりません。とはいえ、ここではちょっと特殊な応用例を示します。

 max()関数を使ってベクトルリミッターを作ることができます。これは、ベクトルの大きさを別の式の制御に使用すると同時に、大きさが特定の値以下にならないようにするのに便利です。これは、

<2,2,2>

のような出力したい最低のベクトル値と、

< [Camera.Position.X] , [Light.Position.X] , [Null.Position.X] >

のような手動で指定したベクトルをmax()関数に入れることで実現できます。
これにより、max()関数が<2,2,2>未満の値を出力することを防ぎます。

 'Magnitudes'ベクトルの詳細については vmag() 関数を参照してください。

max (Standard)

◇記述( Description)

 この関数は2つのベクトル入力を比較し、最も高い方の入力値と等しい結果を返します。入力ベクトルの値は、原点 <0,0,0> からの距離に基づいています。結果はベクトルとして返されます。

max( inputA , InputB )

InputA には ベクトル、または ワールドベクトル を指定できる。 
InputB には ベクトル、または ワールドベクトル を指定できる。 

 

◇サンプル(Example)

max( [Camera.Position] , [Light.Position] )

 カメラの位置が<1,1,1>でライトの位置が<0,0,0>の場合、上記のmax()関数は2つのベクトル入力を比較し、結果として<1,1,1,>を返します。

max( LtFoot.wpos(Time) , RtFoot.wpos(Time) )

 LtFcotのワールドポジションが<-2,0,0>で、RtFootのポジションが<-1,0,0>の場合、上記のmax()関数は2つのベクトル入力を比較し、結果として<-1,0,0>を返します。

 max()関数では、ベクトルの値は<0,0,0>の原点と比較して評価され、「最大」の結果は最大の「正」の値から導かれることを覚えておいてください。
これは、RtFootのベクトル''Magnitude (大きさ) ''が、LtFootのベクトル''Magnitude (大きさ) ''より高いにも関わらず、LtFootの位置は正の結果に近いため、max()関数では'Greater(より大きい)'とみなされることを意味します。

 

◇アプリケーション(Application)

 標準的なベクトル入力を持つmax()関数は、式の構築において便利なツールとなりますが、その有用性は時に特殊なものとなり得ます。とはいえ、いくつか応用例を挙げましょう。

 キャラクターがどれくらい前方に移動しているかを追跡したい場合、max()関数を使用して、現在最も前方にある足のベクトル位置を得ることができます。(これは、正の軸を下に移動していると仮定します)。

 max()関数を使用して、車の2つのフロントタイヤの全体的な回転量を追跡することができます。両方のタイヤの回転ベクトルを入力し、max()関数に最も回転したタイヤを出力させ、その 'Magnitude (大きさ)' を導き出すだけです。

 'Magnitudes'ベクトルの詳細については vmag() 関数を参照してください。

■min

min (Explicit)

◇記述( Description)

この関数は、手動で指定された2つのベクトル入力を比較し、最も低い方の入力値に等しい結果を返します。入力ベクトルの値は、原点 <0,0,0> からの距離に基づいています。結果はベクトルとして返されます。

min( < InputA , InputB , InputC > , < inputD , InputE , InputF > )

InputA には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputB には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputC には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputD には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputE には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputF には、チャネル、数値、またはサブエクスプレッションを指定できる。  

すべての入力は、標準入力変数(Time、Frame、Value)のいずれかを受け入れることができる。

 

◇サンプル(Example)

min( < 1, 1, 1 > , < 2, 2, 2> )

 上記のmin()関数は、2つの入力ベクトルを比較し、その結果として<1,1,1>を返します。

min( < [Camera.Position.X] , [Light.Position.X) , [Null.Scale.X) > , < 1 , 1 , 1 > )

 カメラのX位置を0、ライトのX位置を0、NullのXスケールを0に設定すると、最初の入力ベクトルは<0,0,0>に等しくなります。上記のmin()関数は、2つの入力ベクトルを比較し、その結果として<0,0,0>を返します。

min( < 2, 2, 2 > , < 2, 2, 2 > )

 上記のmin()関数は、2つの入力ベクトルを比較し、その結果として<2,2,2>を返します。上で見たように、もしベクトル入力が同じなら、その値を結果として返します。

 

◇アプリケーション(Application)

 明示的ベクトル入力を持つmin()関数は、非常に特殊な用途があり、多くの主流となるエクスプレッションの応用には当てはまりません。とはいえ、ここではちょっと特殊な応用例を紹介しましょう。

 min()関数を使ってベクトルリミッターを作ることができます。これは、ベクトルの大きさを使用して別の式を制御すると同時に、大きさが特定の値以上にならないようにするのに便利です。これは、

<2,2,2>

のように出力させたい最も高いベクトル値と、

< [Camera.Position.X] , [Light.Position.X] , [Null.Position.X]>

のように手動で指定したベクトルをmin()関数に入れることで実現できます。これにより、min()関数が<2,2,2>より大きな値を出力することを防ぎます。

 'Magnitudes'ベクトルの詳細については vmag() 関数を参照してください。

min (Standard)

◇記述( Description)

 この関数は2つのベクトル入力を比較し、最も低い方の入力値と等しい結果を返します。入力ベクトルの値は、原点 <0,0,0> からの距離に基づいています。結果はベクトルとして返されます。

min( InputA , InputB )

InputA には ベクトル、または ワールドベクトル を指定できる。 
InputB には ベクトル、または ワールドベクトル を指定できる。 

 

◇サンプル(Example)

min( [Camera.Position] , [Light.Position] )

 カメラの位置が<1,1,1>でライトの位置が<0,0,0>の場合、上記のmin()関数は2つのベクトル入力を比較し、結果として<0,0,0>を返します。

min( LtFoot.wpos(Time) , RtFoot.wpos(Time) )

 LtFcotのワールドポジションが<-2,0,0>で、RtFootのポジションが<1,0,0>の場合、上記のmin()関数は2つのベクトル入力を比較し、結果として<-2,0,0>を返します。

 min()関数では、ベクトルの値は<0,0,0>の原点と比較して評価され、「最小」の結果は最小の数値から導かれることを覚えておいてください。
つまり、RtFootのベクトル 'Magnitude (大きさ)' がLtFootのベクトル''Magnitude (大きさ) ''よりも低いにも関わらず、LtFcotの位置は正の結果から離れているので、min()関数では'Smaller(より小さい)'とみなされることを意味します。
 

 

◇アプリケーション(Application)

 標準的なベクトル入力を持つmin()関数は、式の構築において便利なツールとなりますが、その有用性は時に特殊なものとなり得ます。とはいえ、いくつか応用例を挙げてみましょう。

 キャラクタが原点にどれだけ近いかを追跡したい場合は、min()関数を使用して、現在原点に最も近い足のベクトル位置を得ることができます。(これは、正の軸を下に移動していると仮定します)。

 min()関数を使用して、車の2つのフロントタイヤの最小の全体回転量を追跡することができます。両タイヤの回転ベクトルを入力し、min()関数に最も回転量が少ないタイヤを出力させ、その 'Magnitude (大きさ) ' を導き出すだけです。

'Magnitudes'ベクトルの詳細については vmag() 関数を参照してください。

■mod

mod (Explicit)

◇記述( Description)

 これは「モジュロ」関数*7であり、入力された最初の入力ベクトル値を、手動で指定された2番目の入力ベクトル値で割った余りを返します。

mod( InputA , < InputB , InputC , InputD > )

InputA には、ベクトル、または ワールドベクトル を指定できる。 
InputB には、数値、チャネル、またはサブエクスプレッションを指定できる。 
inputC には、数値、チャネル、またはサブエクスプレッションを指定できる。 
inputD には、数値、チャネル、またはサブエクスプレッションを指定できる。 

mod (Standard)

◇記述( Description)

これは モジュロ関数で、入力された最初のベクトル値を 2 番目のベクトル値で割った余りを返します。

mod( InputA , InputB )

InputA には ベクトル、または ワールドベクトル を指定できる。 
InputB には ベクトル、または ワールドベクトル を指定できる。 

 

◇サンプル(Example)/◇アプリケーション(Application) ~mod共通~

mod()関数はベクトルまたは標準入力データを受け取ることができます。
この関数の詳細については、'LScript ファンクション' セクションのサンプルとアプリケーションを参照してください。

■normalize

normalize (Explicit)

◇記述( Description)

 この関数は、手動で指定したベクトルを「正規化」ベクトルに変換します。
 正規化されたベクトルとは、ベクトル 'Triplet(三つ組)' の各入力をベクトルのノルムで除算し、ベクトルの ''Magnitude (大きさ) '' を 1 にしたものです。その結果はベクトルとして返されます。

normalize( < InputA , InputB , InputC > )

InputA には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputB には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputC には、チャネル、数値、またはサブエクスプレッションを指定できる。  

すべての入力は、標準入力変数(Time、Frame、Value)のいずれかを受け入れることができる。

normalize (Standard)

◇記述( Description)

 この関数は標準ベクトルを「正規化」ベクトルに変換します。正規化されたベクトルとは、ベクトル 'Triplet(三つ組)' の各入力をベクトルのノルムで除算し、ベクトルの ''Magnitude (大きさ) '' を 1 にしたものです。その結果はベクトルとして返されます。

normalize( InputA )

InputA には ベクトル、または ワールドベクトル を指定できる。

 

◇サンプル(Example) ~normalize共通~

 正規化されたベクトルはすべて 'magnitude (大きさ) ' が1になりますが、正規化されたベクトルを入力とする関数で使用できる固有の 'Direction (方向)' を持っています。

正規化とは、任意の方向に伸びた任意の長さのベクトルを、正確に1 'unit (単位)' の長さになるように切断したり伸ばしたりすることだと考えてください。ベクトルの大きさは変わりますが、向いている方向は変わりません。

'Magnitudes'ベクトルの詳細については vmag() 関数を参照してください。

 

◇アプリケーション(Application) ~normalize共通~

「正規化された」ベクトルは非常に特殊な用途があり、入力としてそれを期待する関数でのみ使用されるべきです。

■round

round (Explicit)

◇記述( Description)

この関数は、最初のベクトル 'Triplet(三つ組)' の各値を、2 番目のベクトル 'Triplet(三つ組)' の値で指定された小数点以下の桁数で丸めます。

round( InputA < InputB , InputC , InputD > )

InputA には、ベクトル、または ワールドベクトル を指定できる。 
InputB には、数値、チャネル、またはサブエクスプレッションを指定できる。 
inputC には、数値、チャネル、またはサブエクスプレッションを指定できる。 
inputD には、数値、チャネル、またはサブエクスプレッションを指定できる。 

InputB, InputCおよびInputDは、標準入力変数(Time、Frame、Value)のいずれかを受け入れることができる。

round (Standard)

◇記述( Description)

 この関数は、最初のベクトル 'Triplet(三つ組)' の各値を、2 番目のベクトル 'Triplet(三つ組)' の値で指定された小数点以下の桁数で丸めます。

round( InputA , InputB )

InputA には ベクトル、または ワールドベクトル を指定できる。 
InputB には ベクトル、または ワールドベクトル を指定できる。 

 

◇サンプル(Example)/◇アプリケーション(Application) ~round共通~

round()関数は、ベクトルまたは標準入力データを受け取ることができます。
この関数の詳細については、'LScript ファンクション' セクションのサンプルとアプリケーションを参照してください。

■vmag

vmag (Distance, Explicit)

◇記述( Description)

 この関数は、手動で指定した 2 つのベクトル間の ''Magnitude (大きさ) '' を返します。明示的距離 vmag() 関数の 'Magnitude' は、手動で指定した 2 つの入力ベクトル間の距離を返します。つまり、0,0,0の原点と比較してベクトルの値を求める代わりに、指定した2つのベクトル間の 'Magnitude' (または距離) を計算します。結果は数値になります。

vmag( < InputA , InputB , InputC > - < InputD , InputE , InputF > )

InputA には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputB には、チャネル、数値、またはサブエクスプレッションを指定できる。  
InputC には、チャネル、数値、またはサブエクスプレッションを指定できる。  
inputD には、チャネル、数値、またはサブエクスプレッションを指定できる。  
inputE には、チャネル、数値、またはサブエクスプレッションを指定できる。  
inputF には、チャネル、数値、またはサブエクスプレッションを指定できる。  

すべての入力は、標準入力変数(Time、Frame、Value)のいずれかを受け入れることができる。

 

◇サンプル(Example)

vmag( < [Camera.Position.X] , [Light.Rotation.H] , 0 > - < 1 , 1 , [Null.Scale.X] > )

 カメラのX Positionを0に設定し、ライトのHeadingを0に設定すると、最初の'Explicit (明示的な)' ベクトルは0,0,0に等しくなります。
ここでNullのX scaleを1に設定すると、2番目の'Explicit (明示的な)' ベクトルは1,1,1になります。両方のベクトルを上記のvmag()関数に入力すると、1.7321*8という値が返されます。これは2つのベクトル間の数値距離です。

 

◇アプリケーション(Application)

 明示的なベクトル距離には非常に特殊な使い方があり、多くの主流な表現には当てはまりません。とはいえ、ここでは少し特殊な応用例を紹介します。

 2つの明示的ベクトル間の距離を比較することにより、LScript 関数 'mapRange' のような式を、2つのベクトル間の距離で制御することができます。

特定の回転(Heading、Pitch、Bank)を指示するために、それぞれ3つのNullコントロールで構成された2つのヒップ*9コントロールがある場合、各ヒップの各NullのH,P,B値を入力し、各コントロールの総回転の大きさの間の数値距離を得ることができます。

また、明示的な距離 vmag() 関数を一種の診断ツールとして使用することもできます。2つの明示的なベクトルを入力することで、その2つの間の数値距離を測定することができ、アニメーションの過程で2つのベクトルの間にどれだけの差異があるかを見ることができます。 

vmag (Distance, Standard)

◇記述( Description)

 この関数は、2 つのベクトル間の ''Magnitude (大きさ) '' を返します。標準距離 vmag() 関数の 'Magnitude' は、2 つの入力ベクトル間の距離を返します。つまり、0,0,0の原点と比較してベクトルの値を求める代わりに、指定した2つのベクトル間の 'Magnitude' (または距離) を計算します。結果は数値になります。

vmag( InputA - InputB )

InputA には ベクトル、または ワールドベクトル を指定できる。 
InputB には ベクトル、または ワールドベクトル を指定できる。 

 

◇サンプル(Example)

vmag( [Camera.Position] - [Light.Position] )

 上記のvmag()関数は、カメラの位置とライトの位置の間の距離に等しい値を返します。つまり、カメラの位置が0,0,0でライトの位置が0,0,1の場合、vmag()関数は1の値を返します。

vmag( [LtFoot.Position] - [RtFoot.Position] )

 上記のvmag()関数は、LtFootの位置とRtFootの位置の間の距離に等しい値を返します。つまり、LtFootの位置が-1,0,-1、RtFootの位置が1,0,1の場合、vmag()関数は2.8284という値を返します。

vmag( [LtArm.Rotation] - [RtArm.Rotation] )

 上記のvmag()関数は、LtArmの回転とRtArmの回転の間の距離に等しい値を返します。つまり、LtArmの回転が-30,0,0で、RtArmの回転が60,0,0の場合、vmag()関数は90という値を返します。
 

 

◇アプリケーション(Application)

 標準距離 vmag() 関数は、2 つのアイテムの間の距離関係に対応する必要があるすべての式に有用な線形距離を出力します。この関数は、文字の設定式で非常に便利です。

 vmag()を使ってキャラクターの足の間の距離を求め、足の間の距離が大きくなるにつれて自動的に腰を下げるように指示することができます。

 3D宇宙船でコックピットコントロールを作り、他の船や惑星、宇宙ステーションまでの距離を表示させることができます。

 ピストンエンジンのシミュレーションでは、ピストンヘッドがエンジン上部から適切な距離にあるときに、燃料噴射システムを自動的に始動させる(燃料を噴射する)式を作ることができます。

vmag (Explicit)

◇記述( Description)

 この関数は、手動で指定したベクトルの 'Magnitude (大きさ)' を返します。明示的単一ベクトル vmag() 関数の 'Magnitude' は、指定されたベクトル入力値が 0,0,0 からどれだけ離れているかを判断することによって計算されます。結果は数値になります。

vmag( < InputA , InputB , InputC > )

inputA には、チャネル、数値、またはサブエクスプレッションを指定できる。  
inputB には、チャネル、数値、またはサブエクスプレッションを指定できる。  
inputC には、チャネル、数値、またはサブエクスプレッションを指定できる。  
すべての入力は、標準入力変数(Time、Frame、Value)のいずれかを受け入れることができる。

 

◇サンプル(Example)

vmag( < [Camera.Position.X] , 1 , 0 > )

 カメラのXポジションを0に設定すると、上記のvmag()関数に入力された「明示的な」ベクトルは0, 0 1 ,0に等しくなります。つまり、vmag()関数は値1を返すことになります。

vmag( < [Camera.Position.Y] , [Light.Rotation.H] , [Null.Scale.Z] > )

 カメラのYポジションを1メートル、ライトのヘディングを1度、Nullのスケールを1に設定すると、上記のvmag()関数に入力された「明示的な」ベクトルは1,1,1に等しくなります。つまり、vmag()関数は1.7321*10という値を返すことになります。

 ここで重要なことは、「明示的な」ベクトルは数値を返すあらゆる種類の入力から作ることができるということです。つまり、「明示的な」ベクトルは、標準的な位置、回転、スケールの 'Triplets(三つ組)' に基づく必要はないということです。

詳しくはベクトル関数 'vmag (Standard Single)' を参照してください。 

 

◇アプリケーション(Application)

 明示的なベクトルの'magnitude(大きさ)'は、非常に特殊な用途があり、多くの主流な関数の応用には当てはまりません。とはいえ、ここではいくつかの応用例を紹介します。

 2つの明示的ベクトルの大きさを比較することで、LScript関数'mapRange'のように、2つの大きさの差を使用して関数を制御することができます。

特定の回転を指示するために、互いに親関係にある 3 つのアイテムがある場合(Heading、Pitch、Bankの3つの異なるNullを持つ腰のような)、腰の現実世界の回転の大きさを得るために、各NullのH,P,B値を連続して入力することができます。

 また、明示的なベクトルの'magnitude(大きさ)'を一種の診断ツールとして使用することもできます。3つの値を入力することで、vmag()関数の出力値を見て、値にどの程度の変化が起きているかを判断することができます。

vmag (Standard)

◇記述( Description)

 この関数は、ベクトルの 'Magnitude (大きさ)' を返します。

標準単一ベクトル vmag() 関数の Mgnitude は、アイテム の ベクトル入力値が 0,0,0 からどれだけ離れているかを判断することによって計算されます。結果は数値になります。

vmag( InputA )

InputA には ベクトル、または ワールドベクトル を指定できる。

 

◇サンプル(Example)

vmag( [Camera.Position] )

 カメラの位置が0,0,1の場合、上のvmag()関数は1を返します。なぜなら、カメラはZ軸の原点から1メートルしか離れていないからです。

カメラの位置が1,0,0であれば、上記のvmag()関数も1の値を返します。
この時、カメラは原点から1メートル離れていますが、Z軸ではなくX軸です。

カメラの位置を1,1,1に設定し、X,Y,Z軸で原点から1メートル離れると、vmag()関数は1.7321*11メートルの値を返します。これはカメラから原点までの直線距離です。
vmag()は、カメラからLightWaveの原点までの仮想的な巻き尺と考えてください。

回転とスケールのベクトルもvmag()関数に入力でき、アイテムの回転またはスケールの合計値が原点(常に0,0,0)からどのくらい離れているかを求めることができます。

 

◇アプリケーション(Application)

 バーチャルな飛行機のコックピット計器を作りたかったら、vmag()を使って3D平面の前方への向きを決めることができます。

 vmag()を使って、クリーチャーをつぶしたり伸ばしたりするときに、クリーチャーの目の拡大や縮小を行うことができます。

多くの場合、vmag() の出力値を、モーフターゲットや特定の入力範囲を必要とする他のコントロールと直接連動できるものに再マッピングしたいと思うかもしれません。
vmag() の出力を再マッピングするには、LScript 関数 'mapRange' を使います。

リンク

本記事に戻る

lunarbor.hatenablog.com

 

 

*1:

英語「triplet」の意味・使い方・読み方 | Weblio英和辞書

*2:

ホイールローダー - Wikipedia

*3:

クロス積 - Wikipedia

*4:

ドット積 - Wikipedia

*5:

ノルム - Wikipedia

*6:「magnitude」とは、数学や物理では量の大きさを表す用語として用いられ、ベクトルの長さや絶対値を意味する。

*7:

剰余演算 - Wikipedia

*8:辺が1の立方体の対角線の長さであり、3の平方根

*9:腰の意

*10:√3

*11:√3