Q100326: 最初のカスタム Op を作成してテストする方法

フォローする

まとめ

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

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

詳しくは

カスタム Op を作成する前に、 $KATANA_ROOT/plugins/Src/Opsにあるサンプル Op を参照すると役立つ場合があります。このチュートリアルは、特に HelloWorld サンプル Op. に基づいています。

次の手順では、この 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コマンドに -DCMAKE_PREFIX_PATH を含める必要はありません。これは、この場合は関係のない他の Op サンプルの依存関係を指定しているためです。

  1. プラグインを構築してインストールしたら、インストール ディレクトリがKATANA _RESOURCESの一部であることを確認してください。 README.md に記載されているコマンドを使用して、 MyKatanaResources ディレクトリをKATANA _RESOURCESに含める必要があります。

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

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

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

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

注: Op はデフォルトで ( 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: サポート チケットを発行する方法」を参照してください



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

    理由をお聞かせください