スタティック、ダイナミック、拡張アトリビュート

Maya には、スタティック、ダイナミック、拡張の 3 種類のアトリビュートがあります。

スタティック アトリビュートは、コードに組み込まれているかプラグイン ノードのメンバーとなっており、変更や除去を行うことはできません。

ダイナミック アトリビュートを使用すると、アトリビュートを特定のノードに追加または特定のノードから削除できます。ダイナミック アトリビュートは、1 つのノード タイプの特定のインスタンスのみと関係しているという点でスタティック アトリビュートとは異なります。

拡張アトリビュートを使用すると、指定したタイプのすべてのノードのアトリビュートを実行時に追加または削除できます。たとえば、アトリビュートを、トランスフォームのインスタンスではなくトランスフォーム タイプに追加できます。拡張アトリビュートが削除されないかぎり、現在存在している、またはこれから作成されるすべてのトランスフォーム(transform)タイプのノードは拡張アトリビュートに存在します。

注: DAG オブジェクトに拡張アトリビュートを追加すると、継承されるすべてのノード タイプにこのアトリビュートが追加されます。つまり、メッシュ、NURBS、サブディビジョン サーフェスのすべてのシェイプ タイプを含むトランスフォーム ノードとシェイプ ノードの両方とも拡張アトリビュートを持っています。

各ノードの親については、ノード リファレンス マニュアルを参照してください。たとえば、surfaceShapemesh の親です。したがって、スタティックと拡張の両方を含め surfaceShape に存在するアトリビュートはすべて、mesh にも存在します。

拡張アトリビュートを追加または削除する

addExtension コマンドを使用して、拡張アトリビュートを追加します。API でこのコマンドに相当するものは、MDGModifier にあります。

addExtension コマンドのパラメータは addAttr コマンドと同じですが、1 つ異なる点があります。addAttr コマンドを使用する場合、ダイナミック アトリビュートを追加するノードの名前を指定する必要があります。ただし、addExtension コマンドを使用する場合は、-nodeType フラグを使用して拡張アトリビュートを追加するノードのタイプを指定します。

拡張アトリビュートを削除するには、deleteExtension コマンドを使用します。API でこのコマンドに相当するものは、MDGModifier にあります。

シリアライゼーション

Maya 2015 以降には、拡張子アトリビュートの明示的なシリアライゼーションはありません。つまり、Maya ASCII ファイルに追加される addExtension コマンドや、Maya Binary ファイルに追加されるバイナリ コマンドもありません。

プラグインで作成される拡張子アトリビュートは、使用されるファイル(参照ファイルも含む)のプラグイン要件によって決まります。プラグインのロードや拡張子アトリビュートの追加に失敗した場合、これらを使用することはできず、ファイルからその情報が失われることもあります。

同様に、スクリプトやユーザ コマンドを使用して作成された拡張子アトリビュートも、ファイル内にアトリビュートの定義に関する情報はなく、その接続と値セットしか存在しません。この方法で保存される拡張子アトリビュート値は、これらの値を使用するファイルをロードする前に、最初に値を作成した同じスクリプトを実行するユーザに依存します。拡張子を再度追加する前に、この拡張子がまだ存在しないことを確認すると、コーディングの良い練習になります。このようにしてセットアップ スクリプトを何度か実行すると、毎回成功するようになります。