2023年2月6日月曜日

不明な参照ファイルを修正する

 アニメーションを作成するときなどはモデルやリグを参照する reference機能を使っているケースが多いかと思います。
 メッシュやジョイントなどファイル容量の多いものを別ファイルから参照しているのでアニメーションのシーンファイル自体を軽量化できます。

 ただ作業を引き継いだりしてシーンを開いた場合、参照しているファイルが見つからない場合があり、こんなダイアログが出てきます。



 これが出てくるということは、大抵、参照するファイルが分からない訳なので、[Browse...] や [Retry] を選択しても、ほぼ無駄な操作になります。
 そして、このダイアログで絶対に押してはいけないボタンが [Ignore Reference] で、これを押してしまうと読み込もうとしているリファレンスノードが削除され復元できなくなってしまいます。
※アニメーションの場合、シーン内の animCurveノードは残ります。

 とりあえず、「Reference file not found」ダイアログが出てきた場合は [Skip] を押してファイルを開きます。

 ファイルを開いたら、まず、シーンの中にある Reference関連の情報を表示させます。

{
    // リファレンスファイルのリスト化
    string $refs[] =`file -q -r`;
    print("\n** files **\n");
    print $refs;
    
    // リファレンスノードのリスト化
    string $RNs[] =`ls -typ "reference"`;
    print("\n** refNodes **\n");
    print $RNs;
    
}

 これを実行するとシーンが参照しているファイルパスと、リファレンスノード名が表示されます。複数参照している場合には、複数のパスとノード名が表示されます。

 ここに表示されているファイルパスは存在しないパスになっているはずなので、これを元に本来参照するべきファイルパスへ指定し直します。

 リファレンスノード名は参照ファイルを読み込むときに必要になるネームスペースの文字列で、末尾に「RN」が付くことになっています。

 リファレンスエディタの機能である Replace Referenceを使っても入れ替えることが出来るのですが、たくさんクリックしないといけないので、この2つの情報を使ってスクリプトを組んでいきます。

// コマンドで Replace Referenceを行う
{
    string $RN ="MRN";          /* ここに $refsの ~RN を記述 */
    string $newFile ="~/~.ma";/* ここに参照ファイルのフルパスを記述 */
    string $type ="mayaAscii";  /* 読み込むファイルタイプ mayaBinaryや fbxなど */
    
    file -loadReference $RN -typ $type $newFile;
    
}

 アニメーションであれば同じようなリファレンスファイルを使用しているはずなので、何回か使用でき余計なクリックを省けると思います。

 このスクリプトはMELファイル化しづらいのでスクリプトエディタに置いておき、ファイル名を書き換えたり複製・修正したりして使用するのが良いかと思います。


0 件のコメント:

コメントを投稿