MENU閉じる

HEXA BLOG

TIPS

HEXA BLOGその他TIPS2023.8.17

【Houdini】PythonでSOPノードのパラメーターをセーブ&ロードしよう!

こんにちは! 大阪スタジオ・テクニカルアーティストのタカガハラです。

前回は個人的カーモデリングで楽をする精度を高めるためにSideFX社のHoudiniとAliceVisionプラグインでフォトグラメトリにチャレンジした模様をお送りしましたが、それも2021年7月の投稿ということで実に2年ぶりにお目にかかります。お久しゅうございます。

その後、おかげさまで数年にわたる個人的カーモデリングも完成を迎えることができました!

個人的大型プロジェクトがひと段落ついたこのごろは趣味のCGでもHoudiniでモデリングする機会が増えました。そこで今回はHoudiniで作った便利な仕組みをご紹介します。

主にHoudiniカスタマイズの一例として、あるいはカスタマイズにチャレンジしたい方の第一歩になるような参考例としてお読みいただければと思います。

Houdiniの使用バージョンはWindows版Houdini Core 19.5となりますが、Apprenticeをはじめとした各エディションでお試しいただけます。

Houdiniならではのモデリング手法

本題の前にHoudiniでモデリングを行う意義について述べさせてください。

ゲームCGにおけるモデリングツールといえばAutodesk社のMayaや3ds Maxなどが一般的ですが、近年ではそのメインストリームにHoudiniも名を連ねるようになりました。

その理由として、Houdiniでのモデリングは単に形を作るだけでなく、SOPネットワークという一連の工程を構築して進められることにあります。

SOPネットワークとは、ジオメトリを扱うそれぞれのSOP(Surface OPerator)ノードを接続した一連のデータ編集フローのようなものです。

このSOPネットワークの利点は、一度構築した工程を再利用でき、後からの変更や調整に非常に強いことです。必要に応じてSOPノードのパラメーターを変更するだけで、モデルの細かい部分から全体の形状まで、幅広いバリエーションを試行できるわけです。

これは実にイテレーション耐性の高いモデリングワークフローと言えます。


確立された手順を守ることでお寿司が完成するように、SOPネットワークが固まると決まった順序でデータを加工できます。


手順(SOPネットワーク)が同じなら、同じ要領で出力が期待できます。これらは手続き型、つまり「プロシージャル(Procedural)」な処理といえます。

……とやや強引な例も交えつつ申し上げましたが、これだけでは語りつくせないほどHoudiniはたいへんに奥深いソフトウェアです。もちろん、モデリングができるというのもほんの一面に過ぎず、VFXやアニメーションなど幅広い制作ニーズに対応します。

詳しい情報については公式ウェブサイトを筆頭に各種ドキュメントやTIPSが大変充実していますので各位お調べいただければ幸いです。

なかでも無料公開されている公式ガイドブック「Houdini Foundations」は基本的な部分から活用例がわかりやすくまとめられていてオススメです!

Houdini Foundations 書籍 | SideFX
https://www.sidefx.com/ja/tutorials/foundations-book/

今回作成した機能の概要

さて、HoudiniでモデリングのSOPネットワークがある程度できあがると、調整したいパラメーターが各SOPノードに分散していることになります。

Houdiniではノードのインターフェースを編集してパラメーターを追加でき、ほかのノードにリンクさせることもできます。
(それぞれ「Edit Parameter Interface…」「Paste Relative References」がキーワードになります!)

これを応用して各SOPノードから必要なパラメーターをNullノードに集約すると便宜的なコントローラーとなるのでなにかと便利です。

今回はさらに一歩踏み込んで、このコントローラーノードのパラメーターを一括でセーブ&ロードできる機能を作ってみました。

さっそく見ていきましょう。

シーン説明

ここでは説明用にシンプルなSOPネットワークを用意しました。

ビューポートにはHoudiniチュートリアルでおなじみのTest Geometry: Pig Headがありまして、次のようなネットワークとなっています。

このPig HeadはTransformに接続していて、各Scaleが「Controller」と名付けたNull(赤く色づけしています)に作成したパラメーターにリンクしています。


Controllerに作成した各Scaleパラメーターです。


PigHeadに接続したTransformのScaleパラメーターはController(以下「コントローラー」)にリンクしています。

続いて実際にセーブ&ロードを実行する処理を作っていきましょう。

Pythonコーディング

HoudiniでPythonを実行する方法はいくつかありますが、今回はシンプルにPythonノードを追加しましょう。このノードはどこかにつながっている必要はありません。


このPythonノードのPython Code欄に処理を書いていくわけですが、この例では以下のコードを用意しました。実装の説明はDocstringを参照していただけると幸いです。


いまお読みいただいているあなたがもしプログラミング未経験者あるいはビギナーだとしたらギョッとされたかもしれませんが、半分以上は説明書きのコメント(Docstring)なので処理自体はごく簡単な内容です。

HoudiniでのPythonスクリプティングについては公式ドキュメントが大変充実しています。特に”hou.”から始まるHoudini固有の処理は次のリンクをご確認ください。

hou package
https://www.sidefx.com/ja/docs/houdini/hom/hou/index.html

次はコントローラーにパラメーターをセーブ&ロードできるインターフェースを追加して、処理を実行できるようにしてみましょう!

インターフェース追加

「Edit Parameter Interface…」でコントローラーにセーブ&ロード用のインターフェースを追加します。

ファイルパスを指定する入力欄と、セーブ&ロードを実行するボタンを作成します。


このようなレイアウトがわかりやすいでしょうか。

SaveとLoadのボタンにそれぞれ対応した処理を走らせるようにします。

Callback ScriptをPythonに設定してSaveボタンであれば

exec(hou.node(“../python1”).parm(“python”).eval()); hx_save_parms()

と設定します。Loadボタンも同様にhx_load_parms()を実行できるように書き換えます。

Houdiniは気軽にGUIをカスタムor自作できるのも良いところです!

実行!

ではさっそく試してみましょう! まずは各スケールが1.0の状態をpighead_1_1_1.jsonというJSONファイルに保存してみます。

ファイルが出力され、ひとまず中身も問題なさそうです。ほかの状態も保存してみます。

Xを2.0にしてみたり……。

Zを0.1にしてみたり……。

きちんとJSONファイルで保存されています。このままでは豚さんが可哀そうなのではじめに保存したpighead_1_1_1.jsonをロードしてみましょう……!

元通りです! いつも実験台になってくれる豚さんには感謝しかありません……!

Test Geometry: Pig Head
https://www.sidefx.com/ja/docs/houdini/nodes/sop/testgeometry_pighead.html

活用と応用

今回の例ではSOPノードのパラメーターをセーブ&ロードできる最低限の機能を実装しました。

ゲームでいうところのキャラエディットのプリセット機能のように出力モデルのバリエーションを作り置きできるようになりました。

プロダクション現場での使用を想定するにはさらにエラー処理などを加える必要がありますが、Houdiniはカスタマイズでさらに便利になることがお分かりいただけたのではないでしょうか?

最後に、バリエーションのセーブ&ロードが活きるHoudiniでのモデリング事例をご紹介して本題を締めくくりたいと思います。

プロシージャル自転車

鉄パイプを組み合わせて作られる自転車フレームはHoudiniが得意なベクトル処理で構築することができ、Houdini向きのモチーフです。パイプの傾斜や長さ、接続点の位置を変更することで様々なタイプの自転車が表現できます。ここでは割愛しますがホイールやドライブトレインもパラメトリックに変更可能です。

プロシージャル通勤電車

車体そのものは共通点の多い箱型でありながら、その寸法や窓と扉をはじめとした装備の様式やレイアウトにさまざまなバリエーションが見られる日本の通勤電車もまたパラメトリックに制御しやすいという点でHoudini向きのモチーフです。首都圏で多く見られる20m級ワイドボディから私鉄・地下鉄に採用例の多い18m級ストレートボディまで、さまざまな仕様に対応します。

※これらはいずれも個人的研究のモデリングであり、当社の開発プロジェクトとは無関係です。

おわりに

バックナンバー

過去のタカガハラの投稿は以下のとおりです。

ヘキサドライブでは仲間を募集しています!

ヘキサドライブでのゲーム開発に興味をお持ちの方、3DCGアーティストまたはテクニカルアーティストの方、「この記事より自分のほうがHoudiniカスタマイズできるし」という方、ヘキサドライブへのエントリーをお待ちしております。

ヘキサドライブ 採用サイト
https://hexadrive.jp/recruit/

ここまでお読みいただきありがとうございました。それでは!

注意事項

筆者ならびに株式会社ヘキサドライブ(以下「当方」)は、当記事において公開している全ての手法の有用性や安全性などについて一切の保証を与えるものではありません。これらの手法を使用したことによる直接的または間接的な損害に対し、当方は一切の責任を負いません。自己責任のもとでご活用ください。

当記事内に登場する会社名、製品名、サービス名は、各社の登録商標または商標です。本文中には®、©、™は表記しておりません。

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE