アクション クリップにFカーブを使用したアニメーション データがあるとき、クリップ エフェクトのエクスプレッションにあるそのデータを変更することができます。データを変更する場合は、クリップ エフェクトを作成し、そのクリップ エフェクトからいくつかの変数および関数を使用して、元のアクションのソース アニメーションの最上位にあるデータを変更することができます。
アクションを格納しているライブラリからのアニメーションは、特定の目的または状況にフィットするように変更する必要があります。たとえば、キャラクタにウォークサイクルが設定されていて、キャラクタは障害物の上を歩かなければならない場合、障害物の上を越えるように脚をアニメートする必要があります。
指定したキャラクタ用に作成またはキャプチャされたアニメーションを、プロポーションが異なる別のキャラクタに適用する必要があります。
多数のキーを持つアニメーション(モーション キャプチャ アニメーションなど)を調整する必要があるとしても、元のアニメーションの編集が容易でないと、あまり調整を行いたくないものです。
キー ポイント(赤)の移動によってカーブのピークが変わります。
クリップ エフェクトは、アクション ソースに影響を与えたり(そのソースからインスタンス作成されたすべてのクリップに影響を与える)、アクション ソースを再作成せずに個々のクリップ内のアニメーションを変更します。この操作は、ノイズ、オフセット、および他のハイレベルの操作など、値をクリップにのみ追加することで行います。
つまり、元のソースを基本として個々のアニメーション「チャンネル」を調整し、動きの性質を変更できます。たとえば、クリップを編集する必要なしに、アニメーションをモーション キャプチャ カーブに追加することも可能です。
各クリップ エフェクトは、そのアクション クリップまたはコンパウンド クリップに関連した個々のオブジェクトです。アクション クリップ自体の上に黄色のバーとして Animation Mixer で表示されます。エフェクトは独立したユニットであるため、簡単に有効にしたり無効にしたりでき、クリップの元のアニメーションとクリップ エフェクト後のアニメーションを切り替えることができます。これにより、アニメーションの変更を簡単にテストできます。
クリップ エフェクトを、クリップ内の個々のアイテム(パラメータ)、すべてのクリップ自体(すべてのパラメータ)、またはコンパウンド内の複数のクリップ上のすべてのエフェクトのコンパウンド クリップに適用することができます。
同じクリップに複数のクリップ エフェクトを適用することはできませんが、コンパウンド クリップの作成とクリップ エフェクトのコンパウンド クリップへの適用により、複数のクリップ エフェクトの「結果」を得ることはできます。コンパウンド クリップがある場合、レイヤにこれらをネストすることにより、複雑なエフェクトを得ることができます。
たとえば、個々のクリップにエフェクトがある場合は、このすべてのクリップをコンパウンド クリップに配置して、クリップ エフェクトをコンパウンド クリップに適用します(ノイズ、ワープ、ランダム値などを追加するように)。この簡単な例については、「例: ネストされたクリップ エフェクトの作成」を参照してください。
クリップ エフェクトを作成した後、Animation Mixer で結果が計算されます。複数のエフェクトがクリップに適用される際は、初めから最後までのシークエンスで計算を実行します。
クリップ エフェクトを使用する基本的方法は、クリップ エフェクトのエクスプレッションとアクション クリップ内の各アイテム(パラメータ)との関連付けです。つまり、アクション クリップ アイテムのエントリ分のクリップ エフェクトを作成できます。
各アイテムのクリップ エフェクト エクスプレッションは、アクション クリップ内にある関連付けられたソースを参照して、そのソースをさまざまな方法で変更または上書きします。たとえば、脚の X 位置のクリップ エフェクトのエクスプレッションに this+3 を追加すると、アクション クリップはミキサに値を追加します。最初にアニメーションのソースを参照して結果を取得した後、その結果に値 3 を加算します。
クリップ エフェクトのエクスプレッションは空白(既定)にしておくことができます。この場合、アニメーションは通常のアクションを実行します。特殊なエフェクト変数を使用して算術関数を構築することもできます(詳細については、「エフェクト変数を作成する」を参照)。
[Instanced Action]プロパティ エディタで、[クリップ項目情報](Clip Item Information)タブをクリックします。
[クリップ エフェクト](Clip Effect)列に式を入力します。変数および 対応するオペレータと関数にリストされている、変数と算術オペレータを使用することができます。
標準的な切り取り、コピー、および貼り付け操作のショートカット(それぞれ[Ctrl]+[X]、[Ctrl]+[C]、および[Ctrl]+[V])を使用して、[クリップ エフェクト]列で式のコピーと貼り付けを実行できます。
アイテム番号をクリックしてアイテムを選択し([Shift]キーを押しながらクリックするか、[Ctrl]キーを押しながらクリックして複数のアイテムを選択するか、[クリップ エフェクト](Clip)列をクリックしてすべてのアイテムを選択します)、次に[Fx のクリア](Clear Fx)ボタンをクリックして選択したアイテムの[クリップ エフェクト]列に対して記述されたエクスプレッションを消去します。
エクスプレッションで参照されるカスタム変数を定義することもできます(詳細については、「エフェクト変数を作成する」を参照)。
その変数は、名前で参照すれば、任意のクリップ エフェクト エクスプレッションで参照できます。たとえば、定義したエフェクト変数が「Banana」と呼ばれている場合は、this+Banana を使用してエクスプレッションで問い合わせることができます。これらの変数のすべては、同一のクリップ エフェクト エクスプレッションに結合できます。たとえば、this+45*param+(Banana/weight)+gtime です。
クリップ エフェクトが黄色のバーとしてクリップの上に作成され、表示されます。
エフェクトがどこに存在するのかを確認するには、Explorer を開き、モデルの[Mixer] [Tracks] [Animation] [Mixer_Anim_Track n] [Clip list] [Clip name] [Instanced Action] [Clip Effect] [Items]フォルダを参照します。
クリップのパスを迅速に開くには、ミキサでクリップを選択して、Explorer で[E]キーを押します。この方法により、対象となるクリップとそのノードだけが Explorer に表示されます。
Explorer でフィルタ プリセット ボタンから[表示](Show) [アニメート済み](Animated)または[アニメート可能なパラメータ](Animatable Parameters)を選択して、そのパラメータを確認してください。
この例では、アクション クリップにオフセットを追加し、その後にコンパウンド クリップを作成して、コンパウンド クリップにジッター エフェクトのカスタム値を追加する方法を説明します。
[アクション](Actions) [格納](Store) [変換 - F カーブ](Transformation - Fcurves)を選択し、このアニメーションのアクションを格納します。
アクション クリップを右クリックして、[クリップ プロパティ](Clip Properties)を選択します。[Instanced Action]プロパティ エディタで、[クリップ項目情報](Clip Item Information)タブをクリックします。
2つのアクション クリップを選択し、[クリップ](Clip) [コンパウンドの作成](Create Compound)を選択します。これにより、コンパウンド内で複数のクリップを組み合わせることができ、両方のクリップに全体的なエフェクトを適用できます。
コンパウンド クリップを選択し、[jitter] というカスタム パラメータを作成します([作成](Create) [パラメータ](Parameter) [新規カスタム パラメータ](New Custom Parameter)を選択)。[最大]を10に変更し、[OK]をクリックします。
カスタム パラメータの作成については、「カスタム パラメータとプロキシ パラメータについて」(「カスタマイズ」)を参照してください。
コンパウンド クリップを右クリックして、[クリップ プロパティ](Clip Properties)を選択します。jitter カスタム パラメータは、[インスタンス化されたアクション]>[クリップ エフェクト]ページに変数として表示されます。
jitter カスタム パラメータのアニメーション アイコンを右クリックして、[Expression Editor]を選択します。Expression Editor で、ランダム関数を追加して、それに任意の値を設定します。エクスプレッションは次のようになります。
エクスプレッションの詳細については、「エクスプレッションによるアニメーション」(「アニメーション」)を参照してください。
コンパウンドでクリップの[クリップ項目情報]タブを開きます。[クリップ エフェクト](Clip Effect)列で、各クリップのエフェクト アイテムに対して this+jitter を入力することによって、作成したカスタム パラメータ(変数)を参照します([Ctrl]+[C]キーおよび[Ctrl]+[V]キーを使用してコピーと貼り付けを行います)。
アニメーションを再生すると、振動が脚全体に反映されていることがわかります。アニメーションに適用されるジッターの量は、[jitter]スライダ上のエクスプレッションでコントロールされています。
クリップ エフェクト エクスプレッションを使用すると、クリップ エフェクトを 1 クリップ アイテムに 1 つずつ定義できます。
アイテム番号をクリックしてアイテムを選択します([Shift]キーを押しながらクリック、[Ctrl]キーを押しながらクリックして複数のアイテムを選択、または、[Clip]列をクリックしてすべてのアイテムを選択します)。
[Fx のクリア](Clear Fx)ボタンをクリックして、選択したアイテムの[クリップ エフェクト]列に記述されたエクスプレッションを消去します。
プリセットを保存することはできません。ただし、標準的なコピーおよび貼り付け操作のショートカット(それぞれ[Ctrl]+[C]キーと[Ctrl]+[V]キー)を使用して、それぞれのクリップ エフェクト エクスプレッションのコピーおよび貼り付けを実行できます。
また、スクリプティング コマンドを使用すれば、クリップ エフェクト アイテムの読み込みと書き込みもできます。GetNumMappingRules()、[GetMappingRule()]、[SetMappingRule()]コマンドと一緒に、MappingTemplateパラメータの値として、[clipname.actionclip]を使用します。詳細については、オンライン ヘルプのコマンドおよびオブジェクト モデル リファレンスを参照してください。
クリップ エフェクト エクスプレッションの記述では、以下の特殊な変数を使用できます。
変数 |
意味 |
---|---|
this |
パラメータの元の値。新しい値ではなく、元の値を基準にしたオフセットを作成するときに使います。 |
cid |
サイクル ID 番号。Animation Mixer でアクション クリップをサイクルまたはバウンスすると、元のクリップの cid は 0、最初のサイクルの cid は 1、などとなります。サイクル ID 番号を使うと、サイクルに基づいて値を連続的に増減できます。たとえば、ホイールが回転するごとに自動車を前進させる場合などです。「クリップ エフェクトのサイクルを使用する」を参照してください。 |
time |
秒単位で表したクリップ ソースの現在のローカル時間。クリップをサイクルさせたりバウンスさせたりする場合、最初のサイクル値は 2 番目のサイクルで繰り返される、といった具合です。 |
フレーム(frame) |
クリップ ソースの現在のローカル フレーム。ここでもクリップをサイクルさせたりバウンスさせたりする場合、値は繰り返されます。クリップがスケーリングやオフセットされても、常に整数であることに注意してください。 |
gtime |
シーンの現在のグローバル時間。 |
gframe |
シーンの現在のグローバル フレーム。 |
ウェイト(weight) |
クリップの現在のミックス ウェイト値。 |
カスタム パラメータ名 |
クリップにカスタム パラメータを作成すると、クリップ エフェクト エクスプレッションでこの名前を使用することにより、カスタム パラメータにアクセスできます。 「カスタム パラメータを使用してエフェクト変数を作成する」を参照してください。 |
param |
検証のアイテム エフェクト変数。 「エフェクト変数を作成する」を参照してください。 |
iwarp |
元の値を使用したワープとしてのアイテム エフェクト変数。「クリップ エフェクトのワープを使用する」を参照してください。 |
warp |
クリップにカスタム パラメータを作成した場合、クリップ エフェクト エクスプレッションでこの名前を使用すると、ソース アイテムが wrap パラメータで検出された場所に置かれます。 「クリップ エフェクトのワープを使用する」を参照してください。 |
クリップ エフェクトのエクスプレッションの構文は、厳密には、Expression Editor のエクスプレッションで使用される構文とは異なります。クリップ エフェクト エクスプレッションでは、VBScript でサポートされるオペレータや関数を使用することができます。次の表は、最も役に立つオペレータと関数の一覧です。
機能 |
説明 |
---|---|
Abs() |
絶対値 |
Cos() |
コサイン |
Fix()、Int() |
数値の整数部 |
Log() |
自然対数 |
Rnd() |
ランダム数 |
Sgn() |
数値の符号(-1、0、または 1) |
Sin() |
SIN |
Sqr() |
平方根 |
Tan() |
タンジェント |
クリップ エフェクト エクスプレッションは、複雑なエクスプレッション用の基本検証エンジンとして VBScript を使用しますが、単純なケースではプライベート カスタム パーサおよび検証エンジンを使用します。
詳細については、[http://msdn.microsoft.com/scripting/vbscript/doc/vbstoc.htm] にアクセスし、Microsoft VBScript 言語のマニュアルを参照してください。
エフェクト変数は、クリップ エフェクトと結合されるパラメータです。これをクリップの時間スペースで独立してアニメートすることができます。また、クリップのアイテムのクリップ エフェクト エクスプレッションで参照することもできます。
言い換えると、ソース自体を変更する必要なしに、ミキサに与えられている値を変更する他のパラメータを使用することにより、アクション クリップ自体の範囲内の値を大幅に変更することができます。
[Per effect]: エフェクト全体に対する変数で、いつでも動的に作成および削除できます。そのため、必要な数だけ持つことができます。これらの変数は、アクション内の任意のアイテムによって参照されます。
[Per item]: 元のクリップに存在する各アニメーション アイテムに対して自動的に作成されます。関連したエフェクト内では、クリップ内の各アイテム用にカスタム変数が作成されます。この変数はそのアイテム用のクリップ エフェクト エクスプレッションでのみ参照されます。
エフェクト変数(クリップのローカル タイムまたはエフェクト変数ごと)をアニメートする際、クリップのローカル タイムで行います。アニメーション クリップを変更するタイミングで、エフェクト変数を操作するアニメーションは、クリップに合わせて移動および更新します。そのため、すべてにおいて同期がとれます。
エクスプレッションを使用してエフェクト変数を実行する場合、またはエクスプレッションがシーンのオブジェクトから読み込まれる場合、これらのアイテムはグローバル シーン タイムで使用されます。同一のエフェクト内の変数を関連付ける場合、どのような方法でも、一方は、正しいクリップのローカル タイム内で残りの一方を使用します。
エクスプレッション、リンク パラメータやスクリプトに接続可能なカスタム パラメータ、またはプロキシ パラメータを使用して、エフェクト変数を作成することができます(詳細については、「カスタム パラメータとプロキシ パラメータについて」を参照)。
各アイテムのクリップ エフェクト エクスプレッション内の名前を使って、カスタム パラメータに直接アクセスできます。これによって、必要なすべてのアニメーション ソースを、アイテムのパラメータに接続できます。たとえば、カスタム パラメータでノイズのエクスプレッションを作成し、クリップ エフェクト エクスプレッション内のそのパラメータ名をクリップのアイテムに使用することにより、アイテムごとにノイズを追加することができます。
さらに、クリップ自体に作成するカスタム パラメータを使用することもできます。クリップを選択して、カスタム パラメータをこれに作成する場合、カスタム パラメータは、カスタム パラメータのセットの代わりに[クリップ エフェクト]ページで表示され、簡単にアクセスできるようになります。この例については、「例: ネストされたクリップ エフェクトの作成」を参照してください。
さらに、個々のアイテムに関連付けられているパラメータを意味するparamという単語と、カスタム パラメータ名を参照しているカスタム パラメータ名自体を使用することにより、各アイテムのクリップ エフェクト エクスプレッション内にあるこの変数の値を参照することができます。たとえば、ノイズをクリップで作成するカスタム パラメータに発生させる、標準のエクスプレッションに接続することができます。this + noise(カスタム パラメータの名前)を入力することにより、クリップ上のアイテムの内側のノイズのパラメータを参照します。同様に、スクリプトされたオペレータをアイテムのパラメータへ接続し、たとえば this + param * 10+3/2 を使用してこれを参照します。[param] 変数、またはクリップのパラメータ名を使用するだけで、アニメーションのチャンネルを完全に無効にすることもできます。このように、クリップのコンテンツを実行時に置き換えます。
エフェクト変数の特殊な使い方により、[warp] 変数または [iwarp] 変数を使用して、外挿が適用されたクリップに対するウェイト コントロールが可能になります。これによって、タイムワープをクリップの範囲内のすべてのどのようなアイテムにも作成します。
[warp] 変数を使用すると、クリップ用のカスタム パラメータ(「ワープ」と呼ばれる)を定義して、クリップ内の任意のアイテム用のクリップ エフェクト エクスプレッション列で参照することができます。warp 変数を使用すると、以下のようなメリットがあります。
基本的な使用方法としては、[warp] という文字列をすべてのクリップ エフェクト文字列に入力し(スクリプトすることもできます)、作成したカーブを [warp] というカスタム パラメータにアタッチします。これで作業は完了です。
[iwarp] 変数を使用すると、アイテムごとのパラメータをワープとして扱い、カーブ(とかそういったもの)にアタッチして、エフェクト内の列 [iwarp] を使用することにより、それぞれのアニメーション アイテムごと(たとえば、アクション クリップの F カーブソースごと)にワープ エフェクトを配置できます。
これを実行するには、クリップ エフェクト エクスプレッションで this 変数を使用するのではなく、[iwarp]変数を使用します。つまり、値source(Parameter(t));を使用するということです。すなわち、クリップアイテムのエフェクト変数は、ソース自体を調べるタイムワープとして使用されます。
タイムワープ全般の詳細については、「時間のリレーションの変更(タイムワープ)」を参照してください。
クリップ エフェクト エクスプレッションの [cid] 変数は、サイクルの ID 番号です。サイクル ID は、アクションのパラメータを徐々にオフセットするために、エクスプレッションで使用することができます(例: 進行中のオフセットでの歩行サイクル)。[Time Control]プロパティ エディタの[一般]ページで、現在のフレームの[サイクル ID]を見つけることができます(クリップをクリックして、[Ctrl]+[T]キーを押してください)。この情報は読み取り専用であり、変更することはできません。
アクション クリップを Animation Mixer でサイクル、またはバウンスした場合、元のクリップの[サイクル ID]は 0、最初のサイクルの[サイクル ID]は 1、などとなります。サイクルまたはバウンスでクリップが事前に外挿するように設定されている場合、元のクリップの直前のサイクルの ID は -1 などとなります。これによって、サイクルに基づいて値を連続的に増減できます。たとえば、ホイールが回転するごとに自動車を前進させる場合などです。
たとえば、クリップ エフェクト エクスプレッションを使用すると、次のようになります。
(cid * 10)+ thisアクションのパラメータ値は、元のクリップの継続期間に使用されます。最初のサイクルに 10、2 番目のサイクルに 20、などが追加されます。
一般的なサイクルの詳細については、「クリップをサイクル、バウンス、およびホールド(外挿)する」を参照してください。
クリップ エフェクトを作成した場合、そのクリップ エフェクトを各外挿(各サイクルまたはバウンス)で繰り返させることも、外挿全体にわたってスパンさせることもできます。たとえば、歩行サイクルを実行した後オフセット エフェクトを使用して手を動かすことができます。手の動作は、各サイクルのインスタンスに適用したり、歩行サイクル全体にスパンできます。
[Instanced Action]プロパティ エディタで、[クリップ エフェクト]ページの[時間リファレンス](Time Reference)オプションの 1 つを選択します。
クリップの角の 1 つをドラッグすると、クリップをサイクルまたはバウンスします。各外挿の詳細については、「クリップをサイクル、バウンス、およびホールド(外挿)する」を参照してください。
クリップを右クリックして、[エフェクトのアクティブネスのトグル](Toggle Effect Activeness)を選択します。
クリップを右クリックして、[クリッププロパティ](Clip Properties)を選択します。[クリップ エフェクト]ページで、[アクティブ](Active)オプションのオンとオフを切り替えます。