Q100326: 最初のカスタムオペレーションの作成とテスト方法

まとめ

Opsは、 Katanaで3Dシーンデータを作成および操作するためのオペレーションの構成要素です。Opsは、C++で記述されたOp Typeと呼ばれるプラグインのインスタンスです。Opsは、 KatanaOp APIを使用して、シーングラフの操作や属性の変更など、様々なオペレーションを実行できます

この記事では$KATANA_ROOT/plugins/Src/Opsにある HelloWorld サンプル Op に基づいて、カスタム Op を作成、コンパイル、テストする手順を段階的に説明します

詳細情報

カスタムオペレーションを作成する前に、 $KATANA_ROOT/plugins/Src/Opsにあるサンプルオペレーションを確認すると役立つかもしれません。このチュートリアルは、HelloWorld サンプルオペレーションに基づいています。

次の手順では、この Op のソース コードを変更して、シーン グラフ内の場所の属性を読み取って設定できる Op を作成する方法について説明します。

  1. $KATANA_ROOT/plugins/Src/Ops/HelloWorld/src/HelloWorldOp.cppcook()関数を次のように変更します。
static void cook(Foundry::Katana::GeolibCookInterface& interface)
{
   FnAttribute::StringAttribute typeAttr = interface.getAttr("type");
   interface.setAttr("testType",  typeAttr);

    if (interface.atRoot())
    {
       interface.setAttr("hello", FnAttribute::StringAttribute("world!"));
    }

}

  1. サンプル Op プラグインをビルドするには、 $KATANA_ROOT/plugins/Src/README.mdに記載されている手順に従ってください。

    cmakeコマンドでソースファイルのパスが正しいKatanaバージョンを指していることを確認してください。cmake cmake-DCMAKE_PREFIX_PATH含める必要はありません。これは、今回のケースでは関係のない他のオペレーション例への依存関係を指定することになるためです。

  1. プラグインのビルドとインストールが完了したら、インストールディレクトリがKATANA _RESOURCESに含まれていることを確認してください。README.md に記載されているコマンドを実行すると、MyKatanaResources ディレクトリがKATANA _RESOURCESに含まれるはずです。

  1. Katanaを起動し、CameraCreate ノードを作成し、それに GenericOp ノードを接続します。

  1. GenericOpノードのopTypeパラメータを「HelloWorld」に設定します。これにより、各場所にtestTypeという属性が設定され、その値は場所の種類になります。さらに /rootにhelloという属性が設定され、その値はworldになります。

cook cook()関数は、特定の場所にある任意の属性を読み取ったり設定したり、その他のさまざまな操作を実行するように変更することもできます。

カスタム Ops で使用できるその他の関数については、 Cook インターフェイス (C++) に関するKatana開発者ガイドを参照してください

注:このオペレーションはデフォルトですべての場所で実行されます(GenericOpノードのapplyWhereパラメータで指定)。そのため、シーングラフ上のすべての場所で実行されます。上記の例では、すべての場所でtestType属性が設定されます。

これは必ずしも望ましいわけではないので、上記の例には、インターフェースがatRoot()であるかどうかを確認する if 文も含まれています。これにより、if ブロック内の文は、Op がクックされた最上位の場所で実行されている場合にのみ実行されるようになり、if 文の後にinterface.stopChildTraversal()を使用して、 Op がその最上位の場所の下のシーン グラフ全体をトラバースするのを停止できます。

Op を使用するためのカスタム ノード タイプを作成する場合は、 $KATANA_ROOT/plugins/Src/Ops/Messer/RegisterMesserNode.pyにあるNodeTypeBuilder ベースのノード タイプの例を参照してください。

一部のNodeTypeBuilder API 関数については、 Katana開発者ガイドに記載されています。

さらなる支援

これらの手順で問題が発生した場合は、サポート チケットを開いて、発生した問題とこれまでに行ったトラブルシューティング手順をお知らせください。

サポート チケットを開く方法の詳細については、 「Q100064: サポート チケットの発行方法」を参照してください



    私たちはそれを聞いて申し訳ございません

    理由をお聞かせください