サポートチケットを作成する
フォローする

Q100136:OpScriptを使用してシーングラフの場所間で属性をコピーする

概要

この記事では、OpScriptノードを使用してシーングラフの場所間で属性をコピーする方法について説明します。

詳しくは

Katanaで作業するときは、場所の属性はSetAttributeノードを使用して簡単に設定できます。ただし、ある場所に設定されている属性を別の場所にコピーする場合は、OpScriptノードと数行のコードを使用してこれを実現できます。

名前が似たような機能を示唆しているにもかかわらず、AttributeCopyノードはこの目的には使用できません。

AttributeCopyは、fromRootの位置にあるcopyFromシーンと、toRootの位置にある入力シーンをトラバースします。これらの場所から、それは同一の階層と場所の名前を見つけることを期待しています。
つまり、属性をコピーする2つの場所のすべての子は、同じ階層構造と同じ名前を持つ必要があります。これにより、AttributeCopyノードは正しい属性を正しい場所に確実にコピーします。
ノードはこのように機能します。変更された異なるノードグラフのシーン間で属性をコピーするように設計されていますが、同じアセットを使用しているため、シーングラフの階層と位置名が同じであるためです。
同じシーングラフ内の場所間で属性をコピーするには、CopyAttr()コマンドを利用するOpScriptを使用できます。次のようにしてこれを行うことができます。
1)OpScriptノードを作成し、その「applyWhere」パラメーターを「at at 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)) 
ノードパラメータがどのように見えるべきかの例については、添付のスクリーンショットを参照してください。この場合はprmanStatements.attributesです。 prmanObjectSettingsノードのboot_left_1Shapeに設定されたvisibility.camera属性は、/ root / world / geo / manScene / body_にコピーされます。 main / geometryおよびこの場所の下にあるすべてのものが属性を継承します。

キーワード:

OpScript、AttributeCopy、SetAttribute、属性のコピー、シーングラフの位置、さまざまな階層、ソースの宛先、Katana

この記事は役に立ちましたか?
/

We're sorry to hear that!

Please tell us why.
4人中3人がこの記事が役に立ったと言っています

コメント