エクスプレッションでカスタム アトリビュートを使用する

オブジェクトにカスタム アトリビュートを追加し、エクスプレッション内で使用すると効果的な場合があります。カスタム アトリビュートを使用して、他の複数のアトリビュートを制御することができます。また、他のアトリビュートによって読み取られる値を保存するための一時変数として、カスタム アトリビュートを使用することもできます。

カスタム アトリビュートは、オブジェクトの特性に対しては直接的な影響を及ぼしません。

パーティクルへのカスタム アトリビュートの追加と使用方法の詳細については、カスタム アトリビュートに代入するを参照してください。

次のエクスプレッションを使用して、Planet という NURBS 球を XY 平面上の円周軌道に沿って動かすと仮定します。

Planet.tx = sin(time);
Planet.ty = cos(time);

Planet の軌道は、ワールド座標の原点を中心とし、半径の大きさは 1 単位です。

次の手順で、distance というカスタム アトリビュートを作成し、時間の経過に伴って Planet の軌道の半径を大きくします。

注:

図の小さいボールの連なりは、Planet の円形軌道を表しています。これらのボールは Planet の動きを単に視覚的に分かりやすく表現したもので、アニメーションまたはエクスプレッションの一部ではありません。

カスタム アトリビュートを追加して軌道を変更するには

  1. Planet を選択します。
  2. 修正 > アトリビュートの追加(Modify > Add Attribute)を選択します。
  3. アトリビュートの追加(Add Attribute)ウィンドウのロング ネーム(Long Name)テキスト フィールドに distance と入力します。
  4. アトリビュートの作成: キー設定可(Make attribute: Keyable)がオンに設定されていることを確認します。
  5. データ型(Data Type)float に、アトリビュート タイプ(Attribute Type)スカラー(Scalar)に設定します。
  6. 最小(Minimum)に 1、最大(Maximum)に 10、既定(Default)に 4 をそれぞれ入力します。

    最小(Minimum)最大(Maximum)は、アトリビュート エディタ(Attribute Editor)またはチャネル ボックス(Channel Box)に入力できるアトリビュート値の最大値と最小値を設定します。

    既定は、アトリビュートの既定値を設定します。

    エクスプレッションは、最小(Minimum)最大(Maximum)の値によって制限されるわけではありません。エクスプレッションで指定する値が、アトリビュートに代入されます。

    エクスプレッションでは、アトリビュート エディタ(Attribute Editor)またはチャネル ボックス(Channel Box)に入力された値あるいは既定(Default)値を読み取ることができます。

  7. 追加(Add)ボタンをクリックしてアトリビュートを追加し、アトリビュートの追加(Add Attribute)ウィンドウを閉じます。

    エクスプレッション エディタ(Expression Editor)アトリビュート(Attributes)リストに Planet の距離(Distance)アトリビュートが表示されます。これで、どのエクスプレッションでも距離アトリビュートの値を設定または参照することができます。

  8. エクスプレッションを次のように変更します。
    Planet.tx = distance * sin(time);
    Planet.ty = distance * cos(time);
    

    sin (time)と cos (time)の値に距離アトリビュートの値を掛けることにより、Planet の円形軌道の半径は距離アトリビュートを使用して計算される値になります。正弦関数と余弦関数の詳細については、便利な関数を参照してください。

    Planet に距離アトリビュートを追加した場合、その既定値を 4 と指定したため、アニメーションを再生すると、Planet はワールド座標の原点から 4 グリッド単位の半径の円形軌道を描きます。

    エクスプレッションを使用して、時間の経過に伴って距離アトリビュートの値を変化させることができます。

  9. エクスプレッションを次のように変更します。
    distance = time;
    Planet.tx = distance * sin(time);
    Planet.ty = distance * cos(time);
    

    距離に時間(time)の値を代入することにより、アニメーションの再生時間が増加するのに伴い、Planet の円形軌道の半径が増加します。アニメーションを再生すると、Planet は一定の割合で外側へ広がるらせん状の軌道を描きます。

    エクスプレッションを使用して距離アトリビュートを制御する代わりに、時間の経過に伴って距離アトリビュートの値にキーフレームを設定することもできます。

    たとえば、距離アトリビュートに対し、フレーム 1 に 1、フレーム 200 に 10 というキーフレーム値を設定すると、1~200 フレームまで再生する間に、Planet は一定の割合で外側に広がるらせん状の軌道を描きます。アニメーション時間の経過に伴い、Planet の距離アトリビュートの値がリニア補間され、1 から 10 まで増加します。

    距離アトリビュートのアニメートに使用できるのは、キーフレームまたはエクスプレッションのどちらか一方であり、両方を使用することはできません。

    ヒント: エクスプレッションで制御しているアトリビュートを、キーフレームで制御できるように変更するには、エクスプレッション エディタを使用して、そのアトリビュートに値を代入するすべてのエクスプレッションを削除し、編集(Edit)ボタンをクリックします。次にチャネル ボックス(Channel Box)を使用してアトリビュートの値を初期値に戻し、必要なキーフレームを設定します。

    反対に、キーフレームで制御しているアトリビュートを、エクスプレッションで制御できるように変更するには、チャネル ボックス(Channel Box)でそのアトリビュートのテキスト フィールドをクリックし、チャネル > 選択項目の削除(Channels > Delete Selected)を選択します。次にエクスプレッションを使用して、アトリビュートに値を代入します。