エクスプレッションを最適化する
 
 
 

Maya の内部計算は、センチメートル、ラジアン、秒の単位を使用して行われます。ラジアンは数学で使われる角度の単位であり、180 度を π で割った値(約 57.3 度)が 1 ラジアンです。

値が計測単位であるアトリビュートに数値を代入すると、デフォルトでは、その値は、プリファレンス(Preferences)ウィンドウの設定(Settings)カテゴリで指定された計測単位で解釈されます。デフォルトで選択される単位は、センチメートル、度および 1 秒当たり 24 フレーム / 秒です。

指定された計測単位が Maya の内部単位と異なる場合は、数値が内部単位に自動変換され、その後に代入が行われます。

プリファレンス(Preferences)ウィンドウの設定(Settings)にある角度(Angular)メニューから角度の単位として度を選択したものと仮定します。Ball というオブジェクトに次のエクスプレッションを作成しました。

Ball.rotateZ = 10;

10 は 10 度と解釈され、その後、ラジアンに変換されて Ball の回転 Z(Rotate Z)アトリビュートに代入されます。度からラジアンへの変換は、自動的に実行されます。したがって、Ball が単に 10 度回転するように見えます。

非パーティクル エクスプレッションの場合、このような自動変換によって Maya のパフォーマンスに影響が出ます。つまり、エクスプレッションの実行速度が落ちるため、アニメーションの再生や巻き戻しが遅くなったり、アニメーション時間が変化したりします。エクスプレッションを含むシーンのファイル操作(ファイルを開く、保存など)も遅くなります。

Maya のパフォーマンスを改善するには、内部単位への変換をオフにします。その場合、エクスプレッションで単位を変換する必要があります。

エクスプレッションの実行スピードを改善するには

  1. エクスプレッション エディタを起動します。
  2. 次のどちらかの単位変換(Convert Units)オプションを選択します。
    なし(None)

    単位は変換されません。ユーザ自身が長さの単位をセンチメートル、角度の単位をラジアン、または時間の単位を秒にして値をアトリビュートに代入する必要があります。このオプションを選択すると、実行速度が最高になります。

    角度のみ(Angular Only)

    角度の単位だけを変換し、他の単位は変換しません。長さの単位をセンチメートル、角度の単位を度、時間の単位を秒にして値をアトリビュートに代入する必要があります (これは、プリファレンス ウィンドウのデフォルトの角度単位設定をそのまま使用していることを前提としています。ラジアンを選択する場合、ラジアンの単位で角度を入力する必要があります)。

    度をラジアンに変換するのが面倒な場合は、このオプションを選択してください。エクスプレッションで角度の値を多用していなければ、速い実行速度が保たれます。

デフォルトの単位変換オプションに戻すには

  1. エクスプレッション エディタを起動します。
  2. 単位変換(Convert Units)オプションとしてすべて(All)を選択します。

    これにより、作業単位(Working Units)プリファレンス設定で指定した同じ単位ですべての測定数値を入力できるようになります。このオプションを選択すると実行速度は遅くなりますが、エクスプレッションの作成が簡単になります。

    エクスプレッションごとに異なる変換オプションを選択することができます。

プリファレンス(Preferences)ウィンドウの単位タブで、リニア(Linear)単位としてミリメートル(millimeters)角度(Angular)単位として度(degrees)を設定したと仮定します。次のエクスプレッションを作成したと仮定します。

Ball.translateX = 5;
Ball.rotateZ = 10;

エクスプレッション エディタの単位変換オプションとしてすべて(All)を選択している場合は、5 は 5 ミリメートル、10 は 10 度と解釈されます。

なし(None)を選択している場合は、5 は 5 センチメートル、10 は 10 ラジアンと解釈されます。

角度のみ(Angular Only)を選択している場合は、5 は 5 センチメートル、10 は 10 度と解釈されます。

式文で単位を変換するには

  1. 文で単位を数学的に変換する必要があります。

プリファレンス(Preferences)ウィンドウの単位タブで、リニア(Linear)単位としてミリメートル(millimeters)角度(Angular)単位として度(degrees)を設定したと仮定します。

次に、エクスプレッション エディタ(Expression Editor)で、単位変換(Convert Units)オプションとしてなし(None)を選択し、次のエクスプレッションを入力したと仮定します。

Ball.translateX = 5;
Ball.rotateZ = 10;

なしオプションを選択しているため、5 は 5 センチメートル、10 は 10 ラジアンと解釈されますが、これは意図した結果ではありません。

Ball の移動 X(Translate X)アトリビュートに 5 ミリメートルを代入するには、センチメートルに変換する必要があります。また、Ball の回転 Z(Rotate Z)アトリビュートに 10 度を代入するには、10 を該当するラジアン数に変換する必要があります。

このような変換を行うため、次の文を使用します。

Ball.translateX = 5.0 / 10.0;
Ball.rotateZ = 10.0 / 57.3;

1 センチメートルは 10 ミリメートルです。すなわち、1 ミリメートルは 1 センチメートルを 10 で割ったものなので、したがって、5 ミリメートルは、5 センチメートルを 10 で割った値に等しくなります。5.0 / 10.0 という演算を行うのはそのためです。

重要:浮動小数点のアトリビュートや変数を割り算する場合、5 のような端数のない値ではなく浮動小数点数 5.0 を使用します。これにより、結果が int 型に変換されることはなくなります。

1 ラジアンは 57.3 度です。つまり、1 度は 1 ラジアンを 57.3 で割った値で、10 度は 10 ラジアンを 57.3 で割った値なので、値 10.0/57.3 を使用できます。

ラジアンへの変換をより正確に行う必要がある場合には、57.3 ではなく 57.29578 で割ります。また、次のように deg_to_rad 関数を使用することもできます。

Ball.rotateZ = deg_to_rad(10.0);

deg_to_rad 関数によって、10 度が正確なラジアン値に変換されます。詳細については、 deg_to_radを参照してください。

単位変換オプションをオフにした場合に影響を受けるのはエクスプレッションだけであり、他の Maya コマンドやオプション、表示形式などは影響を受けません。たとえば、上の例のエクスプレッションでは、移動 X アトリビュートにセンチメートルが代入され、回転 Z アトリビュートにラジアンが代入されますが、チャンネル ボックス(Channel Box)ではこれらのアトリビュート値がミリメートル単位と度単位で表示されます。プリファレンスウィンドウの設定(Settings)でどの単位が選択されたかにかかわらず、チャンネル ボックスは常に値を表示します。

パーティクルのシェイプ(Shape)ノードのエクスプレッションについては、単位変換オプションをオフにできません。この種のエクスプレッションでは異なる方式で単位変換が行われ、パフォーマンスへの影響はほとんどありません。