まとめ
複数の入力を持つノード(Mergeノード、Switchノード、VariableSwitchノードなど)を設定する場合、各入力ポートの名前を変更して、上流に接続されているノードの種類を識別すると便利です。ただし、ポートの名前を手動で変更するのは面倒です。
この記事の目的は、Q100372「Python を使用して入力ポートと出力ポートの名前を変更し、接続を明確にする方法」に示されている例を基にして、ユーザー定義のカテゴリを使用して Merge ノードへの入力ポートの名前を変更する機能を提供することです。
詳細情報
Katanaテンプレートを構築するときに、入力ポートに上流に接続されているノードのカテゴリを表示すると、テンプレートのフローを理解しやすくなります。
Merge ノードのデフォルトの動作を使用する場合、作成された入力には i0、i1、i2 などの名前が付けられます。この命名規則では、上流に接続されたノードに関する情報は提供されません。
Merge ノードのデフォルトのポート名を使用する代わりに、接続されたノードのカテゴリに基づいて Merge ノードの入力ポートの名前を変更するカスタム Python セットアップを作成することもできます (たとえば、CameraCreate ノードに接続されている場合の Merge ノードの入力ポートは「Camera」になり、NetworkMaterial ノードの場合は「Material」になります)。
たとえば、Merge ノードに機能を追加する場合は、次の入力ポート名を使用できます。これにより、上流のセットアップを理解しやすくなります。
上の画像に示すように、Merge ノードの入力ポートは、各入力に接続されたノードのカテゴリに応じて名前が変更されます。
サンプルスクリプト
この記事には、スタジオのニーズに合わせてダウンロードして変更できる Python サンプル スクリプトが添付されています。
スクリプトを動作させるには、添付ファイルを.katana/Shelvesフォルダーの場所に追加する必要があります。次に例を示します。
Windows: C:\Users\USERNAME\.katana\Shelves\RenameShelf\Type_Merge.py
Linux: /mnt/nethome/users/USERNAME/.katana/Shelves/RenameShelf/Type_Merge.py
Shelf スクリプトの詳細については、次の記事を参照してください。
Q100401: Katanaでシェルフアイテムを作成して、簡単にアクセスできるカスタム Python スクリプトを提供する方法
Q100402: Katanaでシェルフアイテムを編集および削除して、既存のカスタム Python スクリプトを変更する方法
スクリプトの使用
Katana内でこのカスタム スクリプトをテストするには、ノードの選択 (例: CameraCreate、PonyCreate、Material ノード) を作成する必要があります。
ノードを作成したら、すべて選択し、キーボードショートカットCtrl+Mを使用して、カスタムシェルフアイテムスクリプトを使用してノードをマージします。または、「ヘルプ」の横にある歯車アイコンをクリックし、「シェルフ」の下にある「RenameShelf 」シェルフアクションと「 Type_Merge」シェルフアイテムを選択しても、スクリプトにアクセスできます。
上記の例の画像に示されているように、Merge ノードの入力ポートは、シェルフ アイテム スクリプトで定義されているように、接続されているノードのカテゴリによって名前が付けられます。
このツールは複数のカテゴリを追加することもできます。例えば、「PrmanCameraSettings」ノードのマージポートの名前は「Prman_Camera_Settings」になります。
接続の設定、シェルフ アイテムの作成、SuperTools の詳細については、以下のリンクを使用してKatanaユーザー ガイドとKatana開発者ガイドを確認してください。
Python のノード接続: Katana開発者ガイド - ノードの操作 - ノードの接続
シェルフ スクリプト: Katanaユーザー ガイド - Katanaでのスクリプトとプログラミング - シェルフ アイテム スクリプト
SuperTools: Katanaユーザーガイド - グループ、マクロ、SuperTools - SuperTools
スクリプトの説明
スクリプトは、定義とライブラリ変数の設定後、選択されたノードを照合することから始まります(80行目)。このデータが収集されると、新しいMergeノードが作成されます。
Q100372: Python を使用して入力ポートと出力ポートの名前を変更し、接続を明確にする方法のスクリプト例に続き、87 行目から、選択されたノードは、for ループで選択された各ノードを反復処理して、新しく作成された Merge ノードに接続され、選択されたノードのすべての出力ポートが取得されます。
このスクリプトは、入力ポートを追加する前に、新しい関数checkDictionary()を呼び出して、特定のノードのユーザー定義辞書を確認する点で、「Q100372: Python を使用して入力ポートと出力ポートの名前を変更し、接続を明確にする方法」の記事の例と異なります。
カスタム辞書 (18 行目から 44 行目) では、辞書の値を使用して、既存のノード名 (PrimitiveCreate など) またはノード名内の潜在的な部分 (Camera など) を、入力ポートの名前変更に使用されるノード カテゴリ キーと一致させます。
24 行目の MergeType カスタム辞書は次のとおりです。
たとえば、上記の辞書キーに従うと、PrimitiveCreate ノードの出力は、ノード カテゴリ マッピングに基づいて「Geometry」という名前になります。
checkDictionary()関数はこれらの辞書を反復処理し、キーのいずれかが選択されたノードの型と一致するかどうかを調べます。ノードの型がキーのいずれかと一致すると、そのキーは「mergeLabel」という変数に追加され、入力ポートの名前として使用されます。
たとえば、 ArnoldCameraSettingsノードは 3 つのキーをキャッチし、次のようにそれらを次々に追加します。
名前コンポーネントが最終的な入力ポート名に追加される順序はcheckDictionary()を使用してカテゴリ辞書がチェックされる順序によって決まります。
上記のcheckDictionary()の呼び出しが入れ替わると、入力ポートの名前は「Arnold_Camera_Settings」ではなく「Camera_Settings_Arnold」になります。
辞書のフォーマットに従って、独自のカスタム辞書を追加し、 checkDictionary()を呼び出して入力ポート名にさらにコンポーネントを追加できます。
すべての入力ポートが追加されると、新しいマージノードが選択されたノードとして設定され、 Q100402で説明されている機能を通じてノードグラフタブに表示されます。Katanaでシェルフアイテムを編集および削除しKatana 、既存のカスタムPythonスクリプトを変更する方法
Merge ノードをフローティングすると、新しいノードを作成するのと同じ動作が行われます。
注:スクリプトの詳細については、スクリプト内のヘルプ コメントを確認してください。
添付ファイル
私たちはそれを聞いて申し訳ございません
理由をお聞かせください