【Maya】リンクが切れたリファレンス先を自動で変更する

CG

コロナの影響もあり、自宅で作業をすることになったためにシーンファイルを開くとドライブの設定が間違ったファイルが混在することが増えたように感じています。

Mayaではリンクがきれたファイルを開くとパス先を聞かれるウィンドウが立ち上がり、リンクをつなぎ直すことができますが、、、
複数のファイルをマニュアル操作で1つ1つ直すのはとても手間がかかり更にはミスまでおこしかねません。

 

結論から書くと、2行のscriptで解決できます!

import maya.cmds as cmds
cmds.dirmap( m=('X:/PROJECT', 'Y:/PROJECT') )

最初の引数はマッピング元のディレクトリで、2 番目の引数がマッピング先の目的ディレクトリとなります。

マッピングとはつなぎ直すことです。

 

永久的にはマッピングしないので、MAYAを立ち上げるたびにスクリプトエディタを開いてコマンドを実行することで解決できますが、

もっと効率的にユーザーセットアップにコマンドを登録してMAYAの起動時に自動で変更するようにしましょう!

リファレンスとは?

データを直接読み込み編集するのではなく、別のファイルの状態を参照することです。

ファイルを参照しているので、参照元のファイルを更新するだけで全てのデータを一括で更新することができるようになります。

エラーの対応や、モデルのクオリティアップとアニメーション作業を同時に行うことが可能になり、限られた時間の中で効率的にクオリティがあげられますよね。

例え個人作業でも、複数のショットワークを行う場合には効率的にモデルを差し替えることができるので、リファレンスはぜひ活用しましょう。

ユーザーセットアップとは?

Maya は起動時に常に userSetup.py ファイルにあるコマンドを実行します。

すでにファイルがある場合は改行してコメントを追加してください。

 

①「userSetup.py」という名前のファイルを次のフォルダに作成します。

  • Windows: ..¥My Documents¥maya¥<バージョン>¥scripts
  • (Mac OS X) ~/Library/Preferences/Autodesk/maya/<version>/scripts
  • Linux: ~/maya/<version>/scripts(~はホーム フォルダ)

②リファレンスに関するコマンドを記載。

リファレンスに関するコマンド

リファレンスをツールから操作できるようになると、ShotgunやFtrackのデータベースに登録した情報からシーンを構築することも可能ですし、レンダリングする時にモデルデータを更新するといったことが可能になりますよね。

ツール化して、マシンを離れる際に必要なシーンセットアップするような、
あなたの貴重な時間を無駄にしないようにしてください。

ディレクトリを別のディレクトリに変更する

冒頭でも説明したディレクトリを別のディレクトリにマップするために使用します。
ディレクトリは絶対パスであり、またスラッシュ(「/」)で区切る必要もあります。

cmds.dirmap( m=('Z:/PROJECT', '/PROJECT') )
pm.dirmap( m=('Z:/PROJECT', '/PROJECT') )

リファレンスの作成

リファレンスノードを作成します。

pm.createReference(refFile, ns=namespace)
cmds.file(refFile, reference=True, ns=namespace)

リファレンスノードの取得

これですべてのリファレンスノードが取得できます。

refNodes = pm.ls(rf=True)
refNodes = cmds.ls(rf=True)

特定のリファレンスノードを取得

refnameはノード名です。

refNodes = pm.ls(refname, rf=True)
refNodes = cmds.ls(refname, rf=True)

ただし、lsはリストで返ってくるので注意です。
例:refNode = cmds.ls(refname, rf=True)[0]

リファレンスパスの変更

refNodeがリファレンスノードの変数、newPathが新しいパスになります。

pm.FileReference(refNode).replaceWith(newPath)
cmds.file(newPath, lr=refNode)

リファレンスをつかったワークフローの参考

リファレンスを用いたワークフローをピックアップしてます。
参考にできるものがあれば取り入れてみてください。

1つの参照ファイルを常にリファレンス

リグをパブリッシュする際に、コピーを作成してずっとファイル名がかわらないデータをつくるやりかたがあります。

最新のデータ(current)をリファレンスすることができるで、CGアニメーターはファイルを開くたびにデータが更新されるため、差し替えの時間が必要ないのでとても効率的です。

Project/Assets/
project_name_v001.ma
project_name_current.ma

バージョンを指定したリファレンス

リファレンス先常に更新するケースでは、モデルに不具合があった場合はモデルが修正されるまで何もできなくなってしまいます。

仮にモデル更新に1日かかったとして、アニメーターが20人いたら20日無駄にすることになるからです。

最後に

スマ兄
リファレンスをつかったワークフローでクリエイティブな作業に時間をつおう!