LinkとProxyを使用してAnim用シーンを作る(1)

3DCG のワークフローは モデリング → リギング → アニメーション → エフェクト このように進んでいくが、多くの場合アニメーション作業をしながら モデリング作業を並行して行い、あとで差し替える...こういった進め方をとることが多い。

Maya の場合は、このフローで作業をするために 「リファレンス」を使用して、アニメーションシーンではリファレンスでモデルを読み込み 読み込み元のリファレンスモデルを、都度更新していくような進め方をとる。

それでは、Blender の場合はどうやってモデルの作成・リグの更新・アニメーション作成 を、同時並行していけばよいのか?

というのをいろいろ検証してみようとおもいます。

Link について

Blender には Maya のリファレンスににた機能で「Link」というものがあります。 その名の通り、べつの Blend ファイルにある各種オブジェクトやコレクション、シーンなどを 「リンク」することにより、リンク先でなにかしら変更があった場合 リンクしたファイル内にも、自動で更新が適応されるというものです。

Maya のリファレンスとの大きな違いは2つ。 1 つ目は、Maya はシーンファイル(ma/mb)ファイル単位でシーンに読み込むのに対し Blender は Blend ファイル内のオブジェクト単位(Maya 的に言えばノード単位) でもリンクを作成できるということ。

もう1つは、Maya のリファレンスは 読み込んでしまえばそのまま移動したり編集したりすることができますが Blender の Link は、読み込んだ後は編集したりアニメーションすることができません。 (これには後述の Proxy を使用します)

今回は、この Link を使用してアニメーションできるシーンを作っていきます。

Link を作成

まず、File から Link を選択

読み込みたいモデルの Blend ファイルをクリックすると Data-Block の各種フォルダがあるので、とりあえず Collection の RIG を読み込む。

読み込むモデルは、AutoRigPro を使用してセットアップしたものを使用します。 デフォルトで、 Chara 名の Collection の子供に RIG と RIG 用のパーツのコレクションが作成されてるので 今回はこの _rig という Collection のみを読み込むようします。 ので、モデルデータもこの_rig 内に入れておきます。

Collection の Link は、あくまでも「Collection 内にあるオブジェクトを Link」するであり Maya のように「コネクションがあったら無理矢理引きづられてくる」ような挙動はありません。 ので、RIG とあわせてモデルも読む必要があるなら モデルも Link する Collection 内に置いてく必要がある。

読み込むと、こんな感じで RIG のコレクションが読み込まれます。

モデルも読み込まれました。

アーマチュアを選べるようにする

が。

この状態だと、コレクションがオブジェクトのように1つにまとまってしまい その中のアーマチュアを選択することがなぜかできません。

Pose モードにもできないので、アニメーションもできないし そもそも Link だとキーをうったりも出来ないので アニメーションもできません。 ので、一手間入れてできるようにします。

まず、読み込んだコレクションを開いていき、「character_rig」のコレクションを ドラッグ&ドロップで外に出します。 (ここでいう character_rig とは、アーマチュアが入っているコレクションのこと)

次に、読み込んできた時のオブジェクトとリンクしたオブジェクトが残っているので コレクションを選び、Unlink します。 こうすると、コレクション以下のオブジェクトも リンクしたまま選択出来るようになります。

これでやりたいことはできたけど、 ほんとうにこれが正規の手順なのかは謎。

Proxy を作成する

この状態になったら

_rig のコレクション内から「rig」のアーマチュアを選択し

Object -> Relations -> Make Proxy.. を選択します。 この Proxy を作成することで、モデルを編集したりアニメーションさせたりできるようになります。

Proxy を作成すると、このようなオブジェクトが作成されます。

Proxy を作る前の rig オブジェクトは、このように PoseMode に移行することもできません。

が、Proxy で作成したノードは PoseMode に移行することができます。

(一部モデルぶっとんでますが、それを除けば) RIG の Proxy を動かすと、Link オブジェクト(編集不可)側のモデルもちゃんと動きました。

あとで Link 元を編集できるかテスト

テストで、リンク元のコレクションの構造を変えて 中のモデルを外してみました。 その後、Link 先シーンを開くと モデルがひょうじされなくなっているのがわかります。

コントローラーの形状を Link 元で変更しても

ちゃんと反映されました。

まとめ

キャラモデルのアニメーションでも Proxy 作らなければいけないということは RIG のコントローラーの数分 Proxy を作らないといけないのか・・・?と思ってましたが コントローラーもアーマチュアの一部扱いなので アーマチュア 1 つだけ Proxy を挟めばアニメーションが挟めることがわかったので そこまで手間をかけずにアニメーション用シーンを構築できることがわかりました。

親子化されたコレクションを Link で読み込むと、アーマチュアとかが選択できなくなるのも 外に移動すれば OK なので...コレで良いのかは別にして なんとかなりそうだと分かったのでよしとする。

Link で RIG 読める事がわかったのと、コレクション単位での Link が行ける事がわかったので ようやく、コレクションの構造をどうしたら良いとか どうやってアセットデータを持てば良いのかが考えられるようになった...かな...

おまけ

親子化されてると Link がおかしくなるなら、直下にアーマチュアがあるわけじゃない コレクションのコレクションを Link にしたら表示できなくなるのか? と思ってテストしてみましたが

ドラッグ&ドロップで外に出せば、リンク先に子コレクションがあっても 普通に中身の表示が出来る模様。 なんとなくですが、この挙動バグなんじゃないかな...?