まとめ
この記事では、現在のフレーム時間やサンプル数など、現在のグラフ状態のシステム引数にカスタム Op からアクセスする方法について説明します。
カスタム Op を作成してコンパイルする方法に関する情報をお探しの場合は、 Q100326: 最初のカスタム Op を作成してテストする方法を参照してください。
詳しくは
カスタム Ops を実装する際の一般的な障害は、カスタム Op が含まれる Op チェーンのノードが設定されていない限り、現在の時刻 (shutterOpen または shutterClose 値) または時間サンプル数を返すクック インターフェイス関数が正しい結果を返さない可能性があることです。正しくアップします。
これは、たとえば次の呼び出しに関連します。
Foundry ::Katana::GetCurrentTime(interface)
Foundry ::Katana::GetShutterOpen(interface)
Foundry ::Katana::GetShutterClose(interface)
Foundry ::Katana::GetNumSamples(interface)
これらの関数から期待される戻り値を取得できるようにするには、System Op Args を追加する必要があります。通常、これらを提供するのはノード (または、 interface.execOp
を介して Op をホストする) の責任です。
Op が GenericOp ノード経由でインスタンス化される場合、そのaddSystemOpArgsパラメーターをYesに設定する必要があります。
Op がカスタム NodeTypeBuilder 経由で登録されている場合、 buildOpChain()
に送信されるインターフェイス オブジェクトには、「system」GroupAttribute を Op 引数に追加するaddOpSystemArgs()
メソッドがあります。 Op はこれを取得して使用できます。
注: 関連する NodeTypeBuilder 関数はKatana開発者ガイドに記載されています。
実装例
添付されているのは、単純な NodeTypeBuilder ベースのノード タイプの例です。これは、 /root/world/geo/hello_worldにタイプ「hello world」の単一の場所を作成し、その上で HelloWorld Op を実行します。 (この例では、 /rootにいくつかの属性を設定しています)。
Op ソースは使用する前にコンパイルする必要があります。これを行うには、 Katanaインストール ディレクトリに含まれる $ KATANA _ROOT/plugins/Src/README.mdファイルの指示に従ってください。
詳細なガイダンスについては、 「Q100326: 最初のカスタム Op を作成してテストする方法」を参照してください。
C++ ソースが .so または .dll ファイルにコンパイルされたら、このファイルをKATANA _RESOURCESディレクトリのOpsサブフォルダーに配置する必要があり、NTB.py をKATANAのPluginsサブフォルダーに配置する必要があります。 _RESOURCESディレクトリ。
KATANAの設定の詳細については、 Katanaインストール ガイド』を参照してください。
ノードの Op チェーンに Op を追加するときに「system」Op 引数を追加する関連コードは次のとおりです。
opArgs = FnAttribute.GroupBuilder() interface.addOpSystemArgs(opArgs) interface.appendOp('HelloWorld', opArgs.build())
これは、次のことを行うのと同じです。
graphState = interface.getGraphState() opArgs = FnAttribute.GroupBuilder() opArgs.set('system', graphState.getOpSystemArgs())
interface.appendOp('HelloWorld', opArgs.build())
「HelloWorld」Op はこれにアクセスし、たとえば、現在の時刻をルートの属性として設定できます。
static void cook(Foundry::Katana::GeolibCookInterface& interface) { if (interface.atRoot()) { interface.setAttr("Hello", FnAttribute::StringAttribute("World!")); interface.setAttr("CurrentTime", FnAttribute::FloatAttribute(Foundry::Katana::GetCurrentTime(interface))); } interface.stopChildTraversal(); }
技術説明
GraphState::getOpSystemArgs()
は、「timeslice」グループ (「currentTime」、「shutterOpen」、「shutterClose」、「numSamples」) と「variables」グループ (グラフ状態変数) を含むグループを返します。このグループは「システム」演算引数として設定する必要があります。 GetCurrentTime
やGetGraphStateVariables
などの CookInterface 呼び出しはgetOpArg("system.[...]")
を呼び出す便利な関数です。
さらなるヘルプ
この記事に記載されている情報で問題が発生した場合は、サポート チケットを開いて、発生した問題とこれまでに実行したトラブルシューティング手順をお知らせください。
サポート チケットを開く方法の詳細については、 「Q100064: サポート チケットを発行する方法」を参照してください。
添付ファイル
私たちはそれを聞いて申し訳ございません
理由をお聞かせください