使用ソフト
- Lightwave2020
Lightwave3Dのグラフ編集パネルにはチャンネルに対してエクスプレッションを使用する際に、記述を助ける"エクスプレッションビルダー"という機能が付属しています。しかし一部しか日本語化されておらず、マニュアルにも翻訳が掲載されていません。この記事は自分が日本語に機械翻訳して整えたものをまとめたものです。自分が見返す為に作りましたが、ここを訪れる他のLightwave3Dのユーザーにも役立つものかもしれません。(機械翻訳にはDeepLと補助としてGoogle翻訳を使用しています。)
- はじめに
- メインインフォメーション
- ファンクション
- ■LScriptファンクション
- abs (Absolute Value)
- ceil (Round Value up)
- center
- clamp (Value Limiter)
- deg (Radians into Degrees)
- fac (Factorial)
- floor (Round Value Down)
- frac (Fractional)
- mapRange (Value ReAssign)
- max (Value Comparison)
- min (Value Comparison)
- mod (Modulo)
- pow (Power)
- rad (Degrees to Radians)
- random (Number Gen)
- randu (Seeded Number Gen)
- range (Boolean Output)
- round (Up or Down)
- selector (Conditional)
- step (Conditional)
- ■マスファンクション
- ■ユーティリティファンクション
- ■条件ファンクション
- ■ベクターファンクション
- ■LScriptファンクション
- 参考リンク
はじめに
翻訳はLightwave3Dの画面をキャプチャーした画像にOCRをかけてテキスト化した後、DeepLにコピペして翻訳しています。翻訳後は元の英文と比較して日本語訳した文の意味が合っているか、内容が理解できるか等を精査、修正して掲載しています。DeepLだけではうまく翻訳できない場合は補助としてGoogle翻訳も使用しています。
記事は翻訳元の文がある画像を添付して、その下に日本語化した文章を掲載しています。元の英文に間違いがあった場合はその部分に打ち消し線を使用し、その後に正しい内容の文を続けています。
メインインフォメーション
Expression Builder Basics(エクスプレッションビルダーの基本)
◇記述( Description)
LightWave 3Dのエクスプレッション・ビルダー1.0へようこそ!
このツールは、LightWave のエクスプレッションを構築し、学習するための包括的なソリューションです。式の情報は、「記述」、「サンプル」、「アプリケーション」の3つのセクションタブに分かれています。
「記述」タブでは、選択したエクスプレッション機能について説明します。どのように動作し、どのような種類のデータを入力できるかを簡単に説明します。「サンプル」タブでは、一連のサンプル式が表示され、その出力とそれがどのように導き出されたかが説明されます。「アプリケーション」タブでは、選択した関数の実用的な応用例について説明します。
関数について学んだら、次に式を組み立てます。最初のエリアは"データインプットセレクタ"を使用して式に入力するデータの種類を決定します。
完成したら'有効'ボタンを押し、式に個性的な名前を付け、関数の"値"に変更を加えます(必要な場合)。
最後に"エクスプレッション作成"を選択すると、新しい式がグラフエディタに送信されます。
エクスプレッションビルダーの詳細については、「サンプル」タブと「アプリケーション」タブをお読みください。
◇サンプル(Example)
データ入力セレクタで使用可能なデータ型は8つあります。"Channel"、" Number"、" Sub-expression"、" Vector"、"World Vector"、そして「標準入力変数」である "Time"、"Frame"、"Value"。
"Channel"は、グラフエディターで使用可能なチャンネルまたはエンベロープを表します。標準的なモーションチャンネル (XYZ, HPB,Xscale, Yscale, Zscale) や、時間と共に変化するものが含まれます。例えば"EndoMorphs"、"Surface Color"、"Light Intensity(ライトの明るさ)"などです。
"Number"は「Integer(整数)」または「Floating Point(浮動小数点)」の数値を表します。「Integer(整数)」とは3、11、8などの"数を数える時に使う数(whole number*1 )"のことで、浮動小数点とは2 3、55.2、0.004のような"小数点を持つ数値"のことです。
" Sub-expression"は、既存の式の出力を表します。" Sub-expression"は、式の名前を次のような角括弧*2で囲んで定義します。[HipCenterX]または[My Expression]のように、式の名前を角括弧で囲んで定義します。詳細については、「Expression Syntax Basics(式の構文の基本)」を参照してください。
エクスプレッションビルダーの詳細については、「記述」と「アプリケーション」タブをお読みください。
◇アプリケーション(Application)
" Vector"と"World Vector"は、数学的な「Triplets*3」を表す入力です、
最も一般的には、3Dグラフィックスで位置、回転、スケールを定義するために使用されます。例えばアイテムの値は、そのアイテムの位置" Vector"と呼ばれます。「ベクターファンクション(Vector Functions 101)」を参照してください。
「標準入力変数」は、ほとんどの式関数で利用可能な、時間にリンクされた3つの標準データ型を表します。
"Time"は現在時刻を浮動小数点数の秒数で表します。"Frame"は現在時刻を整数フレームとして表します。例えば、フレームスライダーが45フレームに設定されている場合、"Time"変数は1.5の値を返し、"Frame"変数は45の値を返します。*4"Value" 変数は、現在式が適用されているチャンネルの現在の値を表します。(しばしば「加算」エフェクトに使用される)。もし"Value"変数をカメラのXチャンネルに使用し、そのX position が1mの場合、1が返されます。常に現在時刻のチャンネルの値を返します。
エクスプレッション・ビルダーの詳細については、「記述」と「サンプル」タブをお読みください。
Expression Syntax Basics(式の構文の基本)
◇記述( Description)
LightWave の式システムでは、「ブラケット」記法と「LScript」記法の 2 つの構文が認識されます。
「ブラケット」記法を使用してチャンネルを定義するには、グラフエディタのチャンネルビンからチャンネル名をコピーし、始終を角括弧で囲みます。[Camera.Position.X]、[Light.Rotation.H]、サブエクスプレッションの場合は[ExpressionName]などは、すべて「ブラケット」記法で定義されたチャンネルの例です。
「LSript」記法では、チャンネル定義を4つのセクションに分割します。"Iteme name"、"VectorType"、"Time Designation"、"Target Axis"です。カメラのX位置を<「LSript」記法で定義すると次のようになります。
Camera.pos(Time).x
この表記法では、"Camera"は「シーンオブジェクト(名前)」を指します。".(ドット)"はシーンオブジェクトにメッセージを送るために使われます。この場合、"pos()"メソッドは、オブジェクトにその位置ベクトルを取得したいことを伝えるために使われます。
このメソッドには時間オフセットが必要なので、"Time" 値を指定します。"Time" は、LightWave に現在時刻の参照チャンネルの値を使用するように指示します。pos() メソッドは Vector オブジェクトを返し、これに末尾の '.x' 参照が適用され、返されるベクトル値の 'X' 値が抽出されます。
Null.scale(Time).y
Camera.pos(Time).z
はすべてLScript'記法を使用して定義されたチャンネルの例です。
◇サンプル(Example)
ビルダーの外で式を構築しようとする場合、いくつかのヒントとガイドラインを考慮する必要があります。すべての関数、名前、サブエクスプレッション、データ入力において、大文字と小文字の区別は非常に重要です。
例えば、式の中でカメラの X 位置を参照する場合、[Camera.Position.X] は正しくコンパイルされますが、[camera.position.x] は正しくコンパイルされません。グラフエディタは、参照しようとしているチャンネルが見つからない場合、理解できない部分を囲んで警告します。例えば、カメラのX位置を間違って定義しようとした場合、グラフエディターは値フィールドに"[>>camera.position.x<<]"と表示します。このハイライトは、「ブラケット」記法でのみ機能します。
「LSript」記法では、大文字と小文字の区別が必要です。大文字と小文字が正しく表記されている必要がありますが、グラフエディターは問題箇所を強調表示しません。
チャンネルを手動で追加する際、大文字と小文字の綴りの問題を避けるには、単純に チャンネルビンでチャンネル名をダブルクリック(または右クリックで "エクスプレッションに付加")を選択すると、現在の式の最後に追加されます。
◇アプリケーション(Application)
"Sub-expression"は、複合式関数のサイズや見た目の複雑さを管理するのに非常に便利です。注意すべき重要な制限は、"Sub-expression"は1つの関数の深さまでしか使用できないということです。つまり、すでに別の子式を使用している式を子式として使用することはできません。
たとえば、"abs([OtherExpression]+2)"を"Sub-expression"として使用することはできません。というのは、"[OtherExpression] "という"Sub-expression"がすでに使用されているからです。
式を特定の時刻で評価し、現在の時刻の前方、または後方を調べるように指示することができます。以下は、時間を秒単位で定義し、次にフレーム単位で定義する方法です:
[Camera.Position.X, 1]は1秒後のX値を返します(Layoutの時間軸に基づく)。
[Camera.Position.X, Time - .5] は、現在時刻の1/2秒前のX値を返します。
[Camera.Position.X, Time + .5] は、現在時刻の1/2秒後のX値を返します。
[Camera.Position.X, Frame 30] は、フレーム30のX値を返します。
[Camera.Position.X, Frame - 15] は、現在時刻の15フレーム前のX値を返します。
[Camera.Position.X, Frame + 15] は、現在時刻の15フレーム後のX値を返します。
Adding Your Own Functions(独自関数の追加)
◇記述( Description)
Lightwaveのエクスプレッション・ビルダーでは、デフォルトのリストの一番下に、新しい「複合式」をいくつでも追加することができます。
これにより、既存の関数のグループを整理して、完全な説明記述、サンプル、および応用テキストを含む複合式を作成できます。
ビルダーに新しい式のセットを追加するには、次の操作を行う必要があります。
設計
1. 複合式を設計する
2. 適切にフォーマットする
3. LightWave が設定ファイルを保存するのと同じディレクトリにある「UserExpressions.lib」というテキストファイルに保存します。
すべてが正しく行われていれば、LightWave を起動すると、新しい式がエクスプレッションビルダーのリストに表示されます。最初のステップは、新しい複合式を作成することです。エクスプレッションエンジンのために新しい関数を作成することはできません。目的の結果を得るために連携して動作する既存の関数のコレクションを準備するだけであることに注意してください。
独自の関数を作成するための詳細については、「サンプル」と「アプリケーション」のタブをお読みください。また、テキストエディタでデフォルトの 'UserExpressions.lib' を見てください。
◇サンプル(Example)
6つの見出しの下に情報を配置することで、複合式を定義します:
GEEXP_NAME
新しい関数の開始位置と名前を定義します。
GEEXP_FORMAT
使用する関数とデータ入力の数(と種類)を定義します。
GEEXP DESC
新しい関数の説明を記述します。
GEEXP_EXAMPLE
新しい関数の例を示します。
GEEXP_APPL
新しい関数の実用的なアプリケーションを示します。
GEEXP_END
関数の終わりを定義します。
各見出しの前には'@'記号を付け、その行を独立させる必要があります。
また 一致する情報は、適切な見出しの直後の行になければなりません。
◇アプリケーション(Application)
複合関数の書式を定義する際には、2つの書式タイプを考慮する必要があります:
「関数定義」と「データ入力フォーマット」です。
"GEEXP FORMAT"で関数を定義する場合、入力した内容はすべて複合式として入力されます。つまり、関数の大文字と小文字を正しく入力する必要があります。大文字と小文字を間違えると、関数は正しく動作しません。
データ入力は2つのセクションで定義されています「 入力名」と「使用可能なデータ入力」です。データ入力セレクタは、開き括弧と閉じ括弧で囲む必要があります。一般的なデータ入力は次のような書式になります。
[Input Name=CNVWSFTI]
"Input Name"は"="の前に付けその後に「使用可能なデータ入力」が続く。
"C"はChannel(チャンネル)、"N" はNumber(数値)、"V" はVector(ベクトル)、"W" はWorld Vector(ワールドベクトル)、"S" はSub-expression、"F" はFrame(フレーム)、"T" はTime(時間)、"I"はValue(値)です。
利用可能な選択肢を制限するには、不要な入力指定を削除します。
"GEEXP_DESC"、"GEEXP_EXAMPLE"、"GEEXP APPL"のテキストボディは17行まで(空行は数える)、ハードラップされ、幅が86文字を超えることはできません。
ファンクション
ファンクション(関数)は数が多いため、この記事では関数の特徴だけを羅列してあります。詳しい内容の翻訳は各章に設置してあるリンクから別記事を閲覧してください。
■LScriptファンクション
詳細の日本語訳はこちらの記事を御覧ください。
abs (Absolute Value)
この関数は入力データを正の値に変換します。
ceil (Round Value up)
この関数は、浮動小数点入力値を次の整数に丸めます。
center
この関数は、2 つの入力間の中心値を返します。
clamp (Value Limiter)
この関数は、チャンネル(またはサブエクスプレッション)の出力を指定された範囲内に制限します。
deg (Radians into Degrees)
この関数は、入力データが「ラジアン」であると仮定し、それを「度」に変換します。
fac (Factorial)
floor (Round Value Down)
この関数は、浮動小数点数の入力値をその前の整数に切り捨てます。
frac (Fractional)
この関数は、引数の小数部分を返します。
mapRange (Value ReAssign)
この関数は、入力されたデータを「再マッピング」し、新たな範囲に基づいた値として出力します。
max (Value Comparison)
この関数は2つの入力を比較し、最も高い入力値と等しい結果を返します。
min (Value Comparison)
この関数は2つの入力を比較し、最も低い入力値と等しい結果を返します。
mod (Modulo)
この関数は、入力された最初の入力値を 2 番目の入力値で割った余りを返します。
pow (Power)
この関数は、最初の入力の値を受け取り、2番目の入力で指定された回数に基づいて、その値を乗算します。(べき乗)
rad (Degrees to Radians)
この関数は、入力データが「度」であると仮定し、それを「ラジアン」に変換します。
random (Number Gen)
この関数は、InputAとInputBの範囲内にある乱数を返します。
randu (Seeded Number Gen)
この関数は乱数を生成します。
range (Boolean Output)
この関数は、最初の入力値が2番目と3番目の範囲内にあるかどうかを判定します。結果は1か0で返されます。
round (Up or Down)
この関数は、最初の入力を 2 番目の入力で指定された小数点以下の桁数で丸めます。
selector (Conditional)
この関数は、1 番目と 2 番目の入力を比較します。結果は3番目または、4番目の入力値と等しい値で返されます。
step (Conditional)
この関数は、1 番目と 2 番目の入力を比較します。結果は3番目の入力値と等しい値か 0 で返されます。
■マスファンクション
詳細の日本語訳はこちらの記事を御覧ください。
acos (Arc-Co-Sine)
逆余弦関数
asin (Arc-Sine)
逆正弦関数
atan (Arc-Tangent)
逆正接関数
cos (Co-Sine)
余弦関数
cosh (Hyperbolic-Co-Sine)
双曲線余弦関数
cot (Co-Tangent)
余接関数
csc (Co-Secant)
余割関数
exp (Exponent)
指数関数
log (Logarithm)
対数関数
sec (Secant)
正割関数
sin (Sine)
正弦関数
sinh (Hyperbolic-Sine)
双曲線正弦関数
sqrt (Square Root)
平方根関数
tan (Tangent)
正接関数
tanh (Hyperbolic-Tangent)
双曲線正接関数
■ユーティリティファンクション
詳細の日本語訳はこちらの記事を御覧ください。
Average
- Average (2 Inputs)
- Average (3 Inputs)
- Average (4 Inputs)
この関数はInputに入力した値の平均を返します。
Clamped MapRange
この関数は、指定された最小出力範囲と最大出力範囲の間で出力を自動的に制限します。
Hip Center
- Hip Center (Type A)
- Hip Center (Type B)
- Hip Center (Type C)
この関数は、キャラクタの腰の位置を、X 軸または Z 軸のいずれかで、足の間の中央に自動的に配置します。
Hip Height
- Hip Height (Type A)
- Hip Height (Type B)
- Hip Height (Type C)
- Hip Height (Full Monty)
この関数は、足の相対距離に基づいてキャラクタの腰の高さを調整します。
Hip Turn Out
- Hip Turn Out (Type A)
- Hip Turn Out (Type B)
- Hip Turn Out (Type C)
この関数は、キャラクタの腰の回転を足の間の中心に自動的に配置します。
Hold Value
この関数は、最小値(Floor)または最大値(Celling)を基準値として設定し、関数に入力された値が超過した場合、基準値と同じ値を返します。(切り捨て、切り上げ)
Morph Link
この関数は、アイテムのモーションをモーフターゲットにリンクします。
Muscle Bone
- Muscle Bone (Primary)
- Muscle Bone (Optional A)
- Muscle Bone (Optional B)
この関数は筋肉のように伸縮するアクションを作成します。
Oscillator
- Oscillator (Dampened)
- Oscillator (Standard)
この関数は、時間と共に上下する波パターン(発振器)を生成します。
Projectile Motion
- Projectile Motion (Type A)
- Projectile Motion (Type B)
この関数は 弾丸や砲弾、ロケット等の発射体のような動きを生成します。
Range Finder
- Range Finder (Items)
- Range Finder (Origin)
この関数は、アイテムまでの直線距離を求めます。
Speed (Description)
この関数は1つのベクトルの値の時間変化の大きさを表します。(速度)
Value Cross Fader
この関数はInputA と InputB の値をミックスします。
Value Decay
この関数は、統計的な「J」曲線を作成します。
Velocity (Description)
この関数 は、1つのチャンネルの値の時間変化量を表します。(速度)
※SpeedとVelocityの違い*7
■条件ファンクション
詳細の日本語訳はこちらの記事を御覧ください。
Equal To
InputA == InputB ? InputC : InputD
InputAがInputBと等しい場合はInputCを結果として返し、そうでない場合はInputDを返す。
Greater Than
InputA > InputB ? inputC : InputD
InputAがInputBより大きい場合はInputCを、そうでない場合はInputDを返す。
Greater Than or Equal To
InputA >= Input3 ? InputC : InputD
InputAがInputBより大きいか等しい場合(以上)はInputCを、そうでない場合はInputDを結果として返す。
Less Than
InputA < InputB ? InputC : InputD
InputAがInputBより小さい場合はInputCを、そうでない場合はInputDを返す。
Less Than or Equal To
InputA <= InputB ? InputC : InputD
InputAがInputBより小さいか等しい場合(以下)はInputCを結果として返し、そうでない場合はInputDを返す。
Not Equal To
InputA !=? InputB ? InputC : InputD
もしInputAがInputBと等しくなければInputCを、そうでなければInputDを返す。
■ベクターファンクション
詳細の日本語訳はこちらの記事を御覧ください。
abs
- abs (Explicit)
- abs (Standard)
この関数は、入力ベクトルを修正して正のベクトル結果を生成します。結果はベクトルとして返されます。
angle
- angle (X axis,Explicit)
- angle (X axis,Standard)
- angle (Y Axis,Explicit)
- angle (Y Axis,Standard)
- angle (Z Axis,Explicit)
- angle (Z Axis,Standard)
この関数は、2つの入力ベクトルと原点<0,0,0>を比較して、角度値を返します。
ceil
- ceil (Explicit)
- ceil (Standard)
この関数は、ベクトル 'Triplet' 内の浮動小数点値を持つ入力を、次の整数に丸めます。
center
- center (Explicit)
- center (Standard)
この関数は、2つの入力ベクトル間の中心点を導出します。結果はベクトルとして返されます。
cross
- cross2d (CrossPrcduct,2D)
- cross3d (CrossPrcduct,3D)
この関数はベクトルのクロス積*8を導き出します。結果はベクトルとなります。
dot
- dot2d (Dot Product, 20)
- dot3d (Dot Product, 30)
この関数はベクトルのドット積*9を導き出します。
extent
- extent (Explicit)
- extent (Standard)
この関数は、2 つのベクトル間の 'Magnitude'*10 を返します。結果はベクトルとして返されます。
floor
- floor (Explicit)
- floor (Standard)
この関数は、ベクトル 'Triplet'内の浮動小数点値を持つ入力を、次の整数に丸めます。
max
- max (Explicit)
- max (Standard)
この関数は2つのベクトル入力を比較し、最も高い方の入力値と等しい結果を返します。結果はベクトルとして返されます。
min
- min (Explicit)
- min (Standard)
この関数は2つのベクトル入力を比較し、最も低い方の入力値と等しい結果を返します。結果はベクトルとして返されます。
mod
- mod (Explicit)
- mod (Standard)
この関数は、入力された最初のベクトル値を 2 番目の ベクトル値で割った余りを返します。( モジュロ関数*11 )
normalize
- normalize (Explicit)
- normalize (Standard)
この関数はベクトルを「正規化」ベクトルに変換します。結果はベクトルとして返されます。
round
- round (Explicit)
- round (Standard)
この関数は、最初のベクトル 'Triplet' の各値を、2 番目のベクトル 'Triplet' の値で指定された小数点以下の桁数で丸めます。
vmag
- vmag (Distance,Explicit)
- vmag (Distance,Standard)
- vmag (Explicit)
- vmag (Standard)
この関数は、ベクトル間の 'Magnitude'を返します。結果は数値になります。
参考リンク
Lightwave3Dのエクスプレッションについて、だいちゃんさんのブログで解説せれている記事が大変わかりやすかったので参考としてリンクを貼らせていただきます。
Lightwave3Dのエクスプレッションの基本的な書式について理解するには、Lightwaveのマニュアルにあるスクリプトの章を読む事が早道ですが、カンマやピリオドの意味についてはあまりにも基本的なことらしく説明されていません。この点についてはAfterEffectsのエクスプレッションの情報が役に立つかもしれませんので参考リンクを置いておきます。
*1:
whole number=整数は、正しい? | 特許翻訳 A to Z
*2:
*3:
英語「triplet」の意味・使い方・読み方 | Weblio英和辞書
*4:フレームレートが30fpsの場合
*5:
*6:
*7:
【違いで学ぶ英語】velocityとspeed - 理系のための備忘録
*8:
*9:
*10:「magnitude」とは、数学や物理では量の大きさを表す用語として用いられ、ベクトルの長さや絶対値を意味する。
*11: