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 が用意されていて、 現在何個目の処理かをアトリビュートで取得することもできます。