Crowdで使用するためにAgentオペレーターで必要情報を出力していく必要があります。
まずは、Outネットワークに移動し、Agentオペレーターを作成します。
このオペレーターはAgent定義に必要なファイルを出力することができます。
Agent用ジオメトリデータやクリップデータをそれぞれExportするためにこのオペレーターを作りました。
ここでパラメーターに注目すると・・・
StartとEndを指定することができ、ここで実際にクリップする分のフレームを指定します。
この情報をきっちりAgentに設定してあげる必要があります。
そしてないと見当違いのフレームがClipで出力されて、いつまでもAgentにアニメーションが正しく読み込まれないという自分自身が掘った穴にがっつり落ちます。
そして、ここでもう1つの自分で掘った落とし穴は、出力したFBXのフレームレートを覚えていなかったということです。30で出したのか24でだしたのか、それ以外のFPSで出したのかしっかり覚えておきましょう。
まず、Chop内のFetchノード>Channelタブ>Sample RateをFBXを出力した時のFPSに合わせて下さい。
次にキャラクタDigitalAssetに次のカスタムパラメーターを追加していきます。
FloatとFloat2を追加し、FloatのラベルをAnimation Legth、Float2のラベルをRangeに変更して下さい。
追加したら、Acceptでウィンドウを閉じます。
追加したパラメーターに下記を追加します。
Animation Length>chopl("./chopnet1/fetch1")
Rangeにはchops("./chopnet1/fetch1")とchope("./chopnet1/fetch1")
これで上のSourceでロードしたFBXサブネットワークのアニメーションフレームの長さと初めのフレーム、最後のフレームを取得できます。
FetchのSample Rateが正しくないとこの取得する数値が実際のアニメーションと違ってしまい、正しいクリップを書き出せなくなるので要注意です。
FBXを変更すると、Animation LengthとRangeが自動で下記変わる事がわかります。
正しい数値が読み込まれてきていなかったら、ExportのフレームレートやFetchのSample Rateを見なおして下さい。
これで準備ができました!
クリップを作成したいFBXを全部インポートしておきます。
Outネットワークに移動し、最初に作成したAgentオペレーターを選択。
SourceのObject Subnetにキャラクタのデジタルアセットを選択し、Clipには現在適用しているアニメーションのクリップ名を入力します。この名前でAgent用クリップが出力されます。
その下にあるShift cClip to Frame 1が有効になっている事を確認します。(デフォルトでオンですが念のため)
これは上にあるStar/Endの範囲で書きだしたクリップの最初のフレームが1に移動するというもので、今回のように元々1フレームから始まっていないアニメーションを使用する場合とっても便利です。
次にStart/Endをそれぞれ右クリック>Delete Channelsで現在設定されているExpressionを削除します。
次にObjネットワークに移動し、キャラクタDigital Assetを選択、そのRangeの左側を右クリック>Copy Parameterを選択します。
次にOutネットワークに移動し、AgentノードのStartを右クリック>Paste Copied Relative Referencesを選択します。
これを選択すると、先ほどコピーした値を単にペーストするのではなく、元のパラメーターとの関係を保存して、パラメータに変更があれば、自動でアップデートされるようになります。
同じようにEnd側もキャラクタDigitalAssetのRangeから値を参照コピーしてください。
エクスプレッションになっているパラメーターはパラメーター名をクリックすると数値の表示に切り替わります。
数値表示の時に、再度パラメーターをクリックするとエクスプレッション表示なるのでとっても便利で分かりやすい。
値をみるときちんとクリップの開始フレームと終了フレームがあっていると思います。
最後に一番下にあるOutputでこのAgentオペレーターからエクスポートするデータを設定します。
まず、Agent Nameに名前を入力します。
このキャラクタデータをAgentとしてExportするのは初なので全てオンのままにします。
デフォルトの設定だと、CacheDirectoryがHIPシーンファイルの保存場所と同じ場所にagentsというフォルダを作成し、その中に更に今回つけたAgent Nameのフォルダが作成され、その中に出力をOnにした各ファイルがエクスポートされます。
設定が終了したら一番上にあるSave to Clipボタンを押して、必要ファイルをエクスポートします。
次に新しいクリップをエクスポートするために、objネットワーク>キャラクタDigitalAssetのSourceでアニメーションを変更します。
outネットワークでAgentをコピー&ペーストで複製し、Clip Nameを変更して下さい。
Start/Endが自動で変更されている事を確認します。
下にあるOutputで、AgentNameはそのままでClipのみ有効にし、後はオフにします。
設定が終了後、Save to Diskで設定を保存します。
アニメーションだけ.bclipで追加保存されていることがわかります。
これをアニメーションクリップの数だけ繰り返します。
必要なアニメーションを.bclipとして出力することができました。
さて、実際に作成したAgentファイルをAgentに適用していきましょう!ゴールはあと少し!!
objネットワークに移動し、キャラクタDigitalAssetのVisibilityをオフにします。
objネットワークに、geometryノードを作成します。
geometryノード内に入り、予め存在するFileノードを削除します。
その後Agentノードを作成して下さい。
AgentノードのAgent Nameに先ほどExportしたAgent Nameを入力します。
次にInputをDiskに変更すると、Cache Directoryのデフォルトパス(${HIP}/agents/${AGENT})を通して、Agentがロードされます。
次にCurrent Clipに出力したClip名を入力すると、Clipsのパスからロードされたアニメーションが読み込まれます。
Clipを読み込んだ後にフレームを動かして下さい。
先ほど1から始まっていなかったクリップもきちんと1フレームに開始フレームがシフトされ、アニメーションするようになっていることがわかります。
ちなみにきちんとAgentNameが通ると、そのAgentが持っているClipが↓を押したときに一覧で表示されます。
これでアニメーションがちゃんと読み込めるか確認してください。
これでAgentに必要なファイルが出そろいました!!!