2021-05-22

webServer


webServer は、Houdini 18.5 に搭載された Python モジュール。これにより、Houdini を Web Server と見立て、Python 経由でクライアント・サーバ処理が可能。 ここでは、この簡単な例を紹介する。



使用したビルド:

  • Houdini 18.5.569/583 (Python 3)

1. 単純なクライアント・サーバモデル

形状ファイル (bunny.obj) と パラメータ値 (%) をクライアント側からサーバに渡し、サーバ上で Houdini を実行、PolyReduce ノードを使って指定パラメータでポリゴンを削減して、その結果を別ファイルで返す、ということを例として行う。

必要なファイル

  • polyreduce_server.py (サーバ用 Python スクリプト)
  • polyreduce_client.py (クライアント用 Python スクリプト)
  • bunny.obj (入力ジオメトリ)
スクリプト及びテスト形状ファイルへのリンクは一番下にあり。

2. サーバの設定

  1. サーバとなるコンピュータには Houdini のインストールが必要。
  2. サーバとなるコンピュータでは http: による接続が許可されていることが必要。
  3. Command Line Tools を起動し、Hython で以下のコマンドを実行。
    hython polyreduce_server.py
      ライセンスが認識されれば、コンソールには以下のようにメッセージが表示される。

      これでサーバの設定は終了。

3. クライアントの設定

  1. クライアント側では Houdini のインストールは必須ではないが、ここでは Houdini をインストールしたとみなし Hython を使う。
      この例ではサーバとクライアントは同じコンピュータ上で別のターミナルシェルから起動している。
  2. hython polyreduce_client.py の中は以下のようになっている。
    import webapiclient
    service = webapiclient.Service("http://localhost:8008/api")
    to_reduce = webapiclient.File('bunny.obj')
    result = service.polyreduce(data=to_reduce, percentage=10)
    with open('model.bgeo.sc', 'wb') as fp:
        fp.write(result.response.content)
    • サーバ名が異なる場合は 2行目の URL を変更する。
    • 別の形状ファイルを用いる場合は、3行目 webapiclient.File('bunny.obj') 内の 'bunny.obj' 部分を変更する。
    • ポリゴン削減の度合いを変えたい場合は、percentage の値を変更。上記の例のように '10' の場合、10% をキープとなる。10% 削減したい場合は percentage を 90 とする。
    • 出力ファイル名やフォーマットを変えるには、5行目の 'model.bgeo.sc' を別名にする。拡張子を変えれば、そのフォーマットで出力される。
  3. Command Line Tools を起動し、Hython で以下のコマンドを実行。
    hython polyreduce_client.py
      同じディレクトリに出力ファイルが model.bgeo.sc として出力される。
  4. 出力したファイルは gplay model.bgeo.sc で確認可能。

    GPlay のビューポート操作は Houdini と同じ。

4. ライセンスについて

  1. 上記のようにサーバとクライアントの両方で Hython を実行すれば、サーバとクライアントの両方で Houdini のライセンスが必要。よって、最低でも最も安価な Houdini Engine のライセンスが2本必要となる。
  2. サーバでは Houdini を実行するため、どうあっても Houdini (Engine) のライセンスが必須。
  3. クライアント側では、Python の環境を正しく設定すれば、標準の Python だけで polyreduce_client.py を実行でき、Houdini (Engine) ライセンスの節約が可能。

5. Hython を使わないためのクライアント側の設定

  1. polyreduce_client.py で使われている webapiclient (一行目) は、厳密には Hou モジュールではないので Houdini ライセンスを使用しないが、Houdini インストールディレクトリ ($HFS) 以下にあるので、hython 以外の Python で実行する場合、その場所を考慮する必要がある。
  2. なお、Windows 版の Houdini には python.exe も含まれているので、ここではそれを使って説明する。
  3. Hython を使った場合には自動的に設定されるが、通常の Python (3) を使う際には、以下の3つのディレクトリが認識されるようにする必要がある。
    • $HFS\python37\lib
    • $HFS\houdini\python3.7libs
    • $HFS\python37\lib\site-packages
    webapiclient.py は $HFS\houdini\python3.7libs 内にある。
  4. しかし、Windows のシステム設定の環境変数で PYTHONPATH に上記3つのディレクトリを追加すると、M@ya が起動できなくなる。
  5. そこで便宜的に HOUDINI_PYTHONPATH という環境変数を作成、これに上記3つのディレクトリを設定、これを Cygwin で必要に応じて PYTHONPATH に追加することで、PYTHONPATH のコンフリクトを防ぐ。
    Windows のシステム環境で環境変数を追加する際には、HFS を実際のディレクトリへの展開が必要
  6. Cygwin で使う際には、
    export HFS="/Program Files/Side Effects Software/Houdini 18.5.583"
    export PATH=${HFS}/python37:$PATH
    export PYTHONPATH=$HOUDINI_PYTHONPATH:$PYTHONPATH
    を事前に実行することが必要。
  7. python -i とインタラクティブモードで起動し、
    import webapiclient
    としてエラーが出なければ、パスが正しく認識されているわかる。もしくは、
    import sys
    sys.path
    でパスをすべて表示できる。
  8. これで、
    python polyreduce_client.py 
    と実行すれば、出力ファイルが得られる(はず)

リンク

1 件のコメント:

  1. このコメントはブログの管理者によって削除されました。

    返信削除