3ds Max では、(定数以外の)数式を使用してパラメータ値を表すことができます。たとえば、数字 144 を表すために式 24*6 を使用できます。
数式を使用すると、次のようなオブジェクト プロパティを制御できます。
パラメータ ワイヤリング、式コントローラ、数式評価はいずれも式を使用します。このトピックでは、この式の使い方について説明します。
式は、単一の値を戻す数値関数です。式を使用すると、次のようなシーン要素を制御できます。
| シーン要素 | 計算可能なプロパティ |
|---|---|
| 作成パラメータ | すべての数値作成パラメータ |
| 変換 | 位置[X, Y, Z] X 回転 Y 回転 Z 回転 スケール[X%, Y%, Z%] |
| モディファイヤ | すべての数値モディファイヤ パラメータ(作成パラメータを含む) |
| マテリアル | 色[R, G, B] すべての数値マテリアル パラメータ |
以下のリンクは、このトピック内のセクションにジャンプします。
式の戻り値の型はコントローラの種類によって異なります。
パラメータが整数値を持つ場合、式は実数値を近似する整数に丸めます。
次の表では、p と q は任意のスカラー値またはスカラー式であり、V と W は任意のベクトル値またはベクトル式です(文字「x」はベクトルのクロス積演算子)。
スカラー値の算術演算子は次のとおりです。
| 演算子 | 用例 | 機能 |
|---|---|---|
| + | p+q | 加算 |
| - | p-q | 減算 |
| - | -p | 逆加算 |
| * | p*q | 乗算 |
| / | p/q | 除算 |
| ^ | p^q | べき乗(p の q 乗) |
| ** | p**q | ** は ^ と同義 |
スカラー値には論理(ブール)演算子も使用できます。次の論理演算子は、常に真で 1、偽で 0 を戻します。
| 演算子 | 用例 | 機能 |
|---|---|---|
| = | p=q | p と q が等しい |
| < | p<q | p が q 未満 |
| > | p>q | p が q より大きい |
| <= | p<=q | p が q 以下 |
| >= | p>=q | p が q 以上 |
| | | p|q | 論理 OR。 p と q のいずれかまたは両方が 0 以外であれば 1、両方が 0 であれば 0 を返す |
| & | p&q | 論理 AND。 p と q の両方が 0 以外であれば 1、その他の場合は 0 を返す |
変数名を持つベクトルでは、成分演算子(.)を使用することによって、3 つのスカラー成分のいずれかを指定できます。
| 用例 | 機能 |
|---|---|
| V.x | 第一成分(X) |
| V.y | 第二成分(Y) |
| V.z | 第三成分(Z) |
ベクトル算術演算子を次に示します。
| 演算子 | 用例 | 機能 |
|---|---|---|
| + | V+W | 加算 |
| - | V-W | 減算 |
| * | p*V | スカラー乗算 |
| * | V*p | スカラー乗算 |
| * | V*W | 内積 |
| X | VxW | 外積 |
| / | V/p | スカラー除算 |
式には 8 段階の優先順位があります。次のリストで先にあげた演算子が優先的に評価されます。
| 演算子 | 優先水準 |
|---|---|
| - + | 単項演算子(例: -8、+25) |
| . | 成分演算子(例: V.x) |
| ** ^ | |
| X | 外積 |
| * / | |
| + - | |
| = < > <= >= | |
| | & |
括弧は特殊な場合に使用します。式の一部をグループ化したり、式の内部にサブ式を形成する演算子として使用できます。 括弧で囲まれた部分は、通常の演算子の優先順位にかかわらず、優先して評価されます。
式では、式コントローラに対して記述します。変数はシンボル名で表記されます。作成した変数は、式で定数や可変値を表現する手段として利用できます。定義済みの変数も数多く提供されています。これらには、定数のものと可変値のものとがあります。
パラメータ ワイヤリングと数式評価で使用される式では、定数値を持つ定義済みの変数を使用できます。
次の定義済み変数は、常に一定の値を表します(変数名は大文字と小文字を区別して表記する必要がある)。
| 変数名 | 定数値 | 用例 |
|---|---|---|
| pi | 3.14159 | 円周率 |
| e | 2.71828 | 自然対数の底 |
| TPS | 4800 | 秒あたりティック数。3ds Max でアニメーションの時間経過を表す基本単位 |
次の定義済み変数は、時間ベースの可変値を表します(変数名は大文字と小文字を区別して表記する必要がある)。
| 変数名 | 機能 |
|---|---|
| F | フレーム数。現在のフレーム番号と同じ値になる。最初のフレームの値は 0。フレームの範囲は、アクティブな時間セグメント内のフレーム数によって左右される |
| NT | 平均化された時間。平均化された時間(NT)の範囲は、アクティブな時間セグメント内のフレーム数にかかわらず、0 ~ 1。式が NT を基にしている場合、その効果は範囲内で 1 回のみ発生。ただし、NT に係数を掛け合わせることによって、発生頻度を高めることも可能。たとえば、係数 2 を掛け合わせる(2*NT)と、式の効果は 2 回発生。NT を基に作成した式は、時間セグメントの長さによって実行速度が左右される |
| S | 秒単位の経過時間。最初のフレームから現在のフレームまでに経過した時間である。この経過時間は、アクティブな時間セグメントの合計時間によって左右される可能性がある |
| T | ティック単位の経過時間。1 ティックは 1/4800 秒に相当。最初のフレームから現在のフレームまでに経過した時間である。この経過時間は、アクティブな時間セグメントの合計時間によって左右される可能性がある |
式では、次のリストに示す関数を使用できます。リスト中の p、q、r は、それぞれスカラー値またはスカラー式を示します。V および W はベクトル値またはベクトル式を示します。
これらの関数を式で使用するには、関数名とともに適切な引数を指定します。
正弦(sin)、余弦(cos)、正接(tan)の各関数は、いずれも角度数を引数として、実数値を返します。逆三角関数は、実数値を引数として度数を返します。
| 関数 | 意味 |
|---|---|
| sin(p) | 正弦 |
| cos(p) | 余弦 |
| tan(p) | 正接 |
| asin(p) | 逆正弦 |
| acos(p) | 逆余弦 |
| atan(p) | 逆正接 |
双カーブ関数は実数値を引数として受け取り、実数値を返します。
| 関数 | 意味 |
|---|---|
| sinh(p) | 双曲正弦 |
| cosh(p) | 双曲余弦 |
| tanh(p) | 双曲正接 |
| 関数 | 意味 |
|---|---|
| radToDeg(p) | ラジアン値 p を相当する度数に変換して返す |
| degToRad(p) | 度数 p を相当するラジアン値に変換して返す |
| 関数 | 意味 |
|---|---|
| ceil(p) | p 以上の最小整数 |
| floor(p) | p 以下の最大整数 |
| 関数 | 意味 |
|---|---|
| ln(p) | 自然対数(底: e) |
| log(p) | 常用対数(底: 10) |
| exp(p) | 指数関数(exp(p)=e^p) |
| pow(p,q) | p の q 乗(p^q) |
| sqrt(p) | 平方根 |
| abs(p) | 絶対値 |
| min(p,q) | p と q を比較し、より小さい値を返す |
| max(p,q) | p と q を比較し、より大きい値を返す |
| mod(p,q) | p を q で除算した剰余 |
| 関数 | 意味 |
|---|---|
| if(p then q else if r then s) | 標準の「if/then/else if」構造を使用します。たとえば、次のように使用されます。 if (X_Position<0) then 0 else if (X_Position>=0 and X_Position<=10) then X_Position*3 else 100 X 位置が 0 以下であれは 0 を戻す、0 から 10 (0 と 10 を含む)であれば X 位置に 3 を掛ける、10 より大きければ 100。 「else if」の部分はオプションで、さまざまな条件を指定するために何度も使用ことができます。 |
| vif(c,V1,V2) | 「ベクトル IF」(c が真であれば V1、偽であれば V2 を返す。) |
| 関数 | 意味 |
|---|---|
| length(V) | V のデータ長 |
| comp(V,i) | i 番目の成分(I=0,1,2)。たとえば、comp([5,6,7],1)=6 |
| unit(V) | V と同方向の単位ベクトルを返す |
| 関数 | 意味 |
|---|---|
| noise(p,q,r) | 3D ノイズ。ランダムに生成された位置を返す |
引数 p、q、および r はランダム生成のシードとして使用します。これらの値を再利用すると、noise() は同じ値を返します。