ファイル リファレンスのヒント
 
 
 

ファイル リファレンスによって複雑なシーン階層を管理できます。次のヒントを使用することで、ファイル リファレンスを最大限に活用でき、より効果的なワークフローを確立できます。またネームスペースの基本を理解することも、役立つことでしょう。詳細については、ネームスペースを参照してください。

ファイル リファレンスのためのファイルとノードの命名

親シーンとリファレンス ファイルのファイルおよびノードの命名規則を事前に計画しておくことは重要であり、制作環境での効果的なファイル リファレンスに非常に役立ちます。特に次の点に注意して計画を立てると良いでしょう。

ファイル リファレンス用のファイル フォーマット

ファイル リファレンスを使用する場合は、ファイルを Maya ASCII ファイル フォーマット(.ma)で保存することをお勧めします。Maya ASCII ファイルは任意のテキスト エディタで開いて編集できるため、ファイルまたはファイルのコンポーネントがロードされない場合のトラブルシューティングがより簡単になります。

注:

ファイル リファレンスを使用する場合は、ファイルを他のファイル フォーマット(dxf、obj、wire など)で参照しないようお勧めします。可能な場合は、.ma フォーマットでファイルをロードし、保存し直して一般的な Maya フォーマットにファイルを変換してください。

ファイル リファレンス用のファイルパス

ファイル リファレンスは絶対パスと環境変数によるパスのみをサポートします。相対パス名はサポートされません。環境変数は明示的で各ユーザのファイル構造に合わせてカスタマイズできるため、相対パスよりも有効な方法として使用できます。

相対パス(サポートされません):

scenes/street.ma

絶対パス(サポートされます): C:/projects/cityscene/scenes/street.ma

環境変数パス(サポートされます): $myProject/scenes/street.ma

環境変数の詳細については、Maya.env を使用して環境変数を設定するを参照してください。

詳細については、リファレンス エディタでリファレンス パスを編集するを参照してください。

ファイル階層のアセンブリ

制作環境でファイル リファレンスの使用を計画する場合、チームのワークフロー(モデラ、リガー、アニメータなど)ならびにプロジェクトの全体的な要件を考慮してからシーンの階層を決定します。

一般的には、ボトムアップ式にファイルを参照します(小さな項目からより大きな項目を参照します)。このボトムアップ構造を使用すると、ロードや不要なシーンのセグメントのアンロードが簡単に実行できます。たとえば、都市の親シーンを作成する場合、最初にドアと他の関連コンポーネントを建物ファイルに参照する必要があります。次に、建物ファイルを通りファイルに参照してから、通りファイルを都市の親シーンに参照します。

キャラクタを構築する場合は、モデルをリグ ファイルに参照します。次に、キャラクタをアニメートする環境にこのリグ ファイルを参照します。これによって、リグへの変更がキャラクタを使用する可能性のあるすべての環境ファイルに正確に伝搬されます。

データのフィルタリング

多数のファイルをシーンに参照すると、データ量が急激に増えて複雑になり、管理が困難になる場合があります。アウトライナハイパーグラフ(Hypergraph)の概要エディタには、表示するデータの量を制限できるフィルタリング オプションがあります。

ディスプレイ レイヤ エディタ(Display Layer Editor)では、レイヤをアルファベット順にソートし、整理できます。

ファイル リファレンスをエクスポートする

リファレンス ファイルが予想以上に複雑化した場合は、通常のシーンのセグメントをリファレンス ファイルとして抽出できます。選択項目をリファレンスとしてエクスポート(Export Selection as a Reference)コマンドを使用すると、シーンの特定のコンポーネントを選択し、参照する個別の子シーン ファイルとしてエクスポートできます。エクスポートした子シーン ファイルは自動的に参照されて現在開いているシーンにロードされます。ファイル リファレンスで、選択項目をリファレンスとしてエクスポートを使用することはできません。

この方法でファイル リファレンスを作成する利点は、シーンの各領域が正確なワールド空間に配置されるため、親シーンでの参照時に再配置する必要がなくなることです。

ファイル リファレンスをインスタンス化する

オブジェクトをインスタンス化すると、シーンのデータ量をさらに低減して管理を簡素化できます。たとえば、通りのシーンに多数の街灯が存在する場合、街灯のファイルを一度参照してから名前を変更して街灯をインスタンス化できます。シーンのすべての街灯はオリジナルの街灯ファイルとインスタンス化リレーションシップを持つため、街灯のファイルをアンロードすると、表示されなくなります。

リファレンス ファイル内のオブジェクトをインスタンス化してからリファレンス ファイルを削除すると、親シーンで両方のオブジェクトが削除されます。トランスフォーム(Transform)ノードはインスタンスの親シーンに残ります。このノードは、親シーンでインスタンスに他の変更が適用された場合に残ります。

親シーンにインスタンス化されたオブジェクトが存在する場合は、ノードの名前やリファレンス ファイルの階層を変更しないでください。このような変更を実施するとインスタンスが消失します。したがって、存在しないオブジェクトを検索することになります。Maya のインスタンス化は名前に基づいています。リファレンス ファイルのオブジェクトの名前を変更してオリジナルのオブジェクトが消滅すると、親シーンはこれを発見できなくなります。

注:

プロキシはアクティブ ファイル リファレンスのみをインスタンス化します。ファイル リファレンスをインスタンス化してプロキシを切り替えると、そのインスタンスは表示されません。

ファイル リファレンス ロケータ

ファイル リファレンス ロケータ オプションは、シーン ビューのファイル リファレンスをグループ ノード経由で移動する必要がある場合に便利です。ロケータはリファレンスをアンロードするたびにリファレンスの視覚的な目印の役割も果たします。ロケータ オプションは、グループ(Group)オプションを選択したときのリファレンス オプション ウィンドウでのみ使用できます。また、このオプションは、ロケータのリファレンス ファイルのコンテンツをグループ化し、リファレンス ノードの名前に注釈を付けます。ロケータを右クリックしてコンテキスト依存メニューからリファレンスを選択すると、シーンのリファレンスをロードまたはアンロードできます。

詳細については、ファイル > リファレンスの作成(File > Create Reference)を参照してください。

リファレンス ファイルを編集する

参照されている子シーン ファイルを階層レベルで編集すると、親シーン ファイルに悪影響を与える場合があります。つまり、ノードの名前とコネクションを子シーン ファイル レベルで変更すると、親シーン レベルでの編集が解決できなくなることがあります。その他の問題の例については、リファレンスの編集のトラブルシューティングを参照してください。

リファレンス ノードの不要な編集内容を削除する

リファレンス ノードから不要な編集内容を削除する必要がある場合があります。たとえば、親シーン内で操作しながらファイル リファレンスからアニメーションを適用したり削除したりしたとします。アニメーションは完成しましたが、完成バージョンのアトリビュートにアニメートする必要のない setAttr の編集内容がないか確認する必要が出てきました。

このような場合、不要な編集を削除するには、次の処理を実行します。

例: 特定タイプの編集をすべて削除する

この例では、現在開いているシーンで参照したファイルにコネクトされるリファレンス ノードの名前を定義する方法を示します。

  1. シーン ビューで、リファレンス ファイルからリファレンス ノード名を定義するオブジェクトを選択します。
  2. チャンネル ボックスから、選択したオブジェクトの名前を定義します。この例では、オブジェクトの名前は world:planet です。Planet はオブジェクトの名前であり、world はそれに割り当てられるネームスペースです。
  3. コマンド ラインで、次の文字列を入力してオブジェクトにコネクトされるリファレンス ファイルの名前を定義します。
    reference -q -f world:planet
    

    リファレンス ファイルのディレクトリ パスと名前が表示されます。この例では、リファレンス ファイルの名前は world です。

  4. 続いて、次の文字列を入力して親シーン内の world リファレンス ファイルのリファレンス ノードの名前を定義します。
    file -q -rfn world.ma
    

    リファレンス ノードの名前は次のように表示されます。

    worldRN
    

リファレンス ノードの名前を定義すると、リファレンスの編集内容を削除するにはリファレンス ファイルをアンロードする必要があります。

  1. リファレンス エディタを使用するか、または次の文字列を入力して、シーンのリファレンス ファイルをアンロードします。
    file -unloadReference worldRN
    
  2. リファレンス ノードの setAttr による編集をすべて照会して、リファレンスの変更内容を確認します。
    reference -editCommand “setAttr” -rfn worldRN -q
    
  3. 次の文字列を入力してリファレンス ノードから setAttr による編集内容をすべて削除します。
    file -cleanReference worldRN -editCommand “setAttr”
    

    setAttr による編集内容がリファレンス ノード worldRN から削除されます。

  4. リファレンス エディタを使用するか、または次の文字列を入力して、リファレンス ファイルをリロードすることができます。
    file -loadReference worldRN
    
    注:

    親シーンに参照済みのファイルをその後参照すると、ファイル名に固有のコピー番号が付加されて最初のリファレンスとは区別されます。たとえば、world.ma というファイルは、、参照するたびに親シーンで、world.ma{1}、world.ma{2}、などという名前になります。

デフォルト シェーダの使用を避ける

デフォルト シェーダ(lambert1)を変更したファイルを参照する場合、これらの変更よりも親ファイルのデフォルト シェーダが優先されます。これを回避するには、子ファイルに新規シェーダを作成して、デフォルト シェーダではなくこの新規シェーダを割り当てます。

共有シェーダ ネットワーク

共有シェーディング ネットワークを使用してカレント シーンにファイル リファレンスを設定すると、リファレンス対象シーンのシェーディング ネットワークはカレント シーンのシェーディング ネットワーク(すべてのリファレンスのシェーディング ネットワークを含む)と結合されます。 このため、シーン全体(リファレンスを含む)で同じシェーディング ネットワークを使用する場合にシェーディング ネットワークを複製しないようにします。

シェーディング ネットワークを共有できるのは、シェーディング ネットワークが等しい場合だけです。 Maya が 2 つのシェーディング ネットワークを同等とみなすのは、シェーディング グループから上流に向かって、シェーディング ネットワークに含まれるすべてのノードが同じ名前とタイプを持つ場合だけです。

シェーディング ネットワークを共有するためには、シェーディング ネットワーク内の各ノードの名前とタイプが同じでなければなりませんが、各ノードの実際の値は考慮されません。 そのため、子シーンのノードの値(たとえば、青)と親シーンのノードの値(たとえば、赤)が異なっていても、名前とタイプが一致する限り、これらのノードは同一であるとみなされます。

ただし、一部のシェーディング ネットワークは共有できません。 それらは次のとおりです。

シェーディング ネットワークにこれらのうちのいずれかが現れると、共有シェーディング ネットワークが有効でも、ファイルを参照する際にネットワークは共有されません。

また、シェーディング ネットワークの下流に存在する項目も共有されません。 共有される項目は、シェーディング ネットワークの上流にある項目だけです。

注:

リファレンス ノードで共有される編集はすべて、1 つの共有リファレンス ノードに格納されます。共有リファレンスは、リファレンスの削除メニュー項目を使用してリファレンス エディタからのみ削除することができます。共有リファレンス ノードは共有された任意のリファレンスについて維持され、最後の共有リファレンスが削除されて初めて削除されます。

シェーディング ネットワークに追加され、その後に共有されるダイナミック アトリビュートは、同じアトリビュートが共有前に共有される各シェーディング ネットワーク上で作成されなければ、失われる可能性があります。

共有ディスプレイ レイヤ

共有ディスプレイ レイヤを使用してカレント シーンにファイル リファレンスを設定すると、リファレンス対象シーンのディスプレイ レイヤはカレント シーンのディスプレイ レイヤ(すべてのリファレンスのディスプレイ レイヤを含む)と結合されます。このため、シーン全体(リファレンスを含む)で同じディスプレイ レイヤを使用する場合にディスプレイ レイヤを複製しないようにします。

Maya では、ディスプレイ レイヤ名を使用して、カレント シーンにリファレンス ディスプレイ レイヤを追加する方法が定義されます。ディスプレイ レイヤ名が親シーン内にある場合、子シーン内の同じ名前のディスプレイ レイヤに割り当てられたオブジェクトが参照されると、それらはオリジナルの親ディスプレイ レイヤに追加されます。

親シーンにないディスプレイ レイヤが子シーンに含まれている場合、子シーンが参照されると、そのディスプレイ レイヤが親シーンのディスプレイ レイヤ エディタに表示されます。後でこれらの子シーンが親シーンから削除されれると、子シーンに関連するシーンもディスプレイ レイヤ エディタから削除されます。

共有ディスプレイ レイヤは自動的にデフォルトのネームスペースに配置されます。

注:

リファレンス ノードで共有される編集はすべて、1 つの共有リファレンス ノードに格納されます。共有リファレンスは、リファレンスの削除メニュー項目を使用してリファレンス エディタからのみ削除することができます。共有リファレンス ノードは共有された任意のリファレンスについて維持され、最後の共有リファレンスが削除されて初めて削除されます。

不明なリファレンス ノード

リファレンスを含んでいる Maya 6.5 より前のファイルは、新しいバージョンの Maya ファイルに変換されます。「_UNKNOWN_REF_NODE_」という名前のリファレンス ノードが作成されるか、特別な「_UNKNOWN_REF_NODE_」エントリが既存のリファレンス ノードに追加されることがあります。

このノード タイプは、6.5 より前で行われた編集を、適用するまですべて格納しておくために使用されていました。

シーンのすべてのリファレンスがロードされると、すべての編集が適用され _UNKNOWN_REF_NODE_ 領域とノードは表示されなくなるはずです。適用できない編集があった場合は(たとえば、名前を変更されたか削除されたオリジナルのリファレンス ファイルにあるノード)、_UNKNOWN_REF_NODE_ がファイル内に残ります。

これらのリファレンス ノードを削除する必要がある場合は、_UNKNOWN_REF_NODE_ を照会して削除してください。つまり、この特定のノード タイプはリファレンス エディタを使用して削除することができません。スクリプト エディタ(Script Editor)で次のように入力します。

delete “_UNKNOWN_REF_NODE_”

ファイル リファレンスの最適化とエラー

デフォルトでは、同じファイルを 2 度参照すると、ファイルは再読み込みされず、代わりに既存のノードがコピーされます。ビルトインされたファイル リファレンスの複数回参照の最適化機能を使用すると、エラーが発生する場合があります。MAYA_FORCE_REF_READ 環境変数はファイル リファレンスの最適化をオフにし、リファレンス ファイルが必ず読み込まれるようになります。これで評価が不正確になってしまうような動作を回避することができます。

詳細については、一般的な変数を参照してください。

ファイル リファレンスのヘルパー スクリプト

Maya ボーナス ツール(Bonus Tools)の一部としてファイル リファレンスのヘルパー スクリプトを使用できます。ボーナス ツール(Bonus Tools)は、役に立つ Maya スクリプトとプラグインの無料コレクションで、Autodesk Web サイト(www.autodesk.com/maya-bonustools)から利用できます。

ボーナス ツール(Bonus Tools)を Autodesk サイトからダウンロードするには

  1. Maya で、ヘルプ > ボーナス ツールのダウンロード(英語)(Help > Download Bonus Tools)を選択します。

    Autodesk Web サイトの各エリアにアクセスするには、順序に従って登録することが必要です。インストールを完了すると、ボーナス ツールが Maya のプルダウン メニューに表示されるようになります。

ネームスペースの不正文字の処理

Maya 2010 以前のバージョンでは、「<」と「>」の記号がノード名やネームスペース名で発見された場合は「_」記号に変換されていました。不正文字が先頭にある場合は削除され、先頭以外にある場合はアンダースコアに変更されていました。

たとえば Maya 2009 では次のように変換されていました。

namespace -add "<foo>"
// Result: foo_
createNode transform -n "<bar>"
// Result: bar_
namespace -add "foo<bar>"
//Result: foo_bar_

Maya 2011 以降では、ノード名の場合は「<」と「>」記号は削除され、「_」記号に変換されます。ただしネームスペース名の場合、「<」と「>」記号の間にあるすべての文字はプレースホルダーのネームスペースと見なされます。つまり、Maya の自動変換を期待してこれらの記号を使用している場合は、コードを書き換える必要があります。たとえば Maya 2012 では次のように変換されていました。

namespace -add "<foo>"
// Result: <foo>
createNode transform -n "<bar>"
// Result: bar_
namespace -add "foo<bar>"
//Result: foo_bar_

ファイル リファレンスとレンダー レイヤ

レンダー レイヤが含まれるシーンでファイル リファレンスを使用しているときに、ファイル リファレンスをインポートしてシーン ファイルを保存する場合は、カレント レイヤが masterLayer であることを確認します。選択したレイヤが masterLayer である場合、レンダー レイヤ、ファイル リファレンス、および保存がより安定的になります。

関連項目