まとめ
この記事では、OpScript ノードを使用してシーン グラフの場所間で属性をコピーする方法について説明します。
詳細情報
Katanaで作業する場合、SetAttribute ノードを使用してロケーションの属性を簡単に設定できます。ただし、あるロケーションに設定されている属性を別のロケーションにコピーしたい場合は、OpScript ノードと数行のコードを使用することで実現できます。
名前は同様の機能を示唆していますが、 AttributeCopyノードはこの目的では使用できません。
AttributeCopy は、fromRoot の位置にある copyFrom シーンと、toRoot の位置にある入力シーンを走査します。これらの位置以降では、同一の階層と位置名が見つかるものと想定されます。
つまり、属性をコピーする2つの場所のすべての子ノードは、同じ階層構造と名前を持つ必要があります。これにより、AttributeCopyノードは正しい属性を正しい場所にコピーできるようになります。
このノードがこのように動作する理由は、変更された異なるノード グラフ内のシーン間で属性をコピーするように設計されているが、同じアセットを使用するため、シーン グラフの階層と場所の名前は同一であるからです。
同じシーングラフ内の場所間で属性をコピーするには、
CopyAttr()コマンドを使用する OpScript を使用します。これは次のように実行できます。 1) OpScript ノードを作成し、その
applyWhereパラメータをat locations matching CELに設定します。 2)
attrFrom 、 attrTo 、 sourceLocationという3つのユーザーパラメータを追加します。ノードにユーザーパラメータを追加する方法については、 Katanaユーザーガイドの「ユーザーパラメータの追加」セクションを参照してください。 3)
sourceLocationパラメータの値は、属性のコピー元となるシーングラフの場所へのパスである必要があります。 4) CEL ステートメントは、属性をコピーするシーン グラフの場所へのパスである必要があります。
5)
attrFromテキスト フィールドにコピー元の属性の名前を入力します。 6) コピー先の属性の名前を
attrToパラメータ値として追加します。 7) OpScript ノードの
Scriptパラメータに次の lua コードを追加します。 local attrFrom = Interface.GetOpArg("user.attrFrom"):getValue()
local attrTo = Interface.GetOpArg("user.attrTo"):getValue()
local sourceLocation = Interface.GetOpArg("user.sourceLocation"):getValue()
Interface.CopyAttr(attrTo, attrFrom, true, sourceLocation)この方法はローカル属性をソースとする場合にのみ機能します。コピーしたい属性が親ロケーションから継承されている場合は、最後の行を次のように変更する必要があります。
Interface.SetAttr(attrTo, Interface.GetGlobalAttr(attrFrom, sourceLocation))
私たちはそれを聞いて申し訳ございません
理由をお聞かせください