メインコンテンツまでスキップ

CommandServerの使い方

WorkItem、Attribute、Input/Output を使用してコマンドの実行やファイルの生成を
連続的に行えることがわかりました。 WorkItem に対して個別に処理を実行するだけでも多くのことが行えますが
そうではなく、1 つの処理に対して WorkItem 分だけ繰り返し処理をしたいというケースもあるでしょう。

そういった場合は Command Chain と呼ばれる機能を使用して実現することができます。

Command Chain とは

CommandChain とは、指定したプロセスに対して、WorkItem の数だけループで処理を実行させたい場合に使用します。
実行するプロセスは Houdini 自体もそうですが、それ以外にもたとえば「Maya で WorkItem の Item 数だけ繰り返し処理」だったり
「ShotGrid に対して」のように、Houdini 以外のアプリケーションに対して 繰り返し実行する といったことが実現できます。

今回は Python Command Chain を使用して動作を確認してみます。

PythonServer を作る

まず、処理をするプロセスを用意します。

PythonCommandChain で、

pythonserver ノードを作ります。

UtilityのCommand Server End を作り、pythonserverにつなげます。

CommandServerEndのServerPathに、上で作ったpythonserverノードを指定します。

指定すると、このようにノードが箱?のようなものでグルーピングされます。

実行するとこのようになります。

これだけだと、サーバーを起動しただけでなにもしていません。 実際の処理は、このServerとEndの間に、SendCommandノードを追加することで実現します。

SendCommandはPythonを書くことができるのですが、この場合PythonのプロセスはSendCommandごとに作らるのではなく PythonServerに対して1つだけ作成されます。 つまりは、PythonのプロセスはWorkItemのの処理中ずっと継続されます。
そして、ServerとEndの間にあるノードの処理を、WorkItem分だけ繰り返します。
つまりは、InputのWorkItemをforで繰り返せるのがこのCommandChainです。

Serverノードを見ると、 Loop Attribute Names が用意されていて、 現在何個目の処理かをアトリビュートで取得することもできます。