プログラマとしてのHoudiniとは

公開:2021/01/01
更新:2021/01/30
4 min読了の目安(約4100字IDEAアイデア記事

はじめに

適当に頭の中の理想をかきつづってるポエムなので、「ほほん」程度によんでくだーさい。

ちなみに、僕は生粋のプログラマではありません。もともとアート面から業界の扉を叩いた人です。
仕事の流れや、状況、興味の移り変わりなどなどから、なんでかテクニカルな事をやることになった感じです。

プログラマー視点からのHoudiniの魅力、学習モチベーション

レゴブロックの感覚で開発が出来る→拡張性が高い

デフォルトのノードだけでも解決できる範囲がとても広い。組み合わせでさまざまな表現やツールを作る事が出来る。
ノード単体を開発すれば、そのノードをさまざまな形で応用することでまったく新しいツールを作りだすことが出来る。その構造を作り出すノードベースという概念が、デフォルトで根付いている事が非常に重要。
アーティストもある程度ノードベースの概念を元に作業・構築してくれるので、こちらがノードを用意すれば、それを使って発展させてくれたりする。

Houdiniは組み換え式自動化ツールとしての潜在性が高い

Houdiniは、他のDCCツールとは違い、ノードという最小機能を単一パッケージとした管理体制をプラットフォームとして提供している。この最小単元の処理にはC++やPythonでの機能提供ができる上、GUIとしてはHoudini側がすでにParameterとして提供してくれているものを利用できたりする。また、そのノードの組み換えを行うということは、いわゆるMacのAutomaterのような機能を提供しているものと同じで、ファイル操作から、人の自動認識、そここらさらに3D化などといったものも、最小単位の機能で作成したノードの組み換えでもって提供していける。

研究・開発・実装のプラットフォームがHoudiniが同一基盤となりえる

デフォルト機能で、頂点を数学的なレベルで扱うのが根底にあるのに比べて、そのうえで絵作りまでもこなす応用幅があり、また、その概念を利用した研究や開発も可能。意外と知られていないが、それを利用して研究をしている人もいるし、論文も出てきている。PixarのDynamic Kelvinletsの解説を参照。

また、全く同じUI/UXを使用して研究→開発→実装→使用→発展研究のイテレーションを行う事が出来るので、それぞれの担い手が同一感覚上で作業を行う事により疎通がしやすくなるというメリットもある。

プログラマーがHoudiniと相性がいい理由

ノードベースという構造自体がプログラマチックなものである

ノードを組んでいく仕組みを利用して形を作り上げるということは、そのプロセス自体がプログラマチックなものであり、ある意味純粋なアーティストはそういったところが障壁になりやすいが、プログラマーはその面に対しての協調性がそもそも備わっているので、アーティストよりもプログラマの方が構造自体の認識が早く、複雑なものでも理解が早い。

見えない・分からないの気持ち悪さが抑えられる

感覚的なツールは、その感覚性をより表に出すためにバックエンドの処理をブラックボックスにしがち。しかし、これは学ぶもの、発展させるものにとって障壁になる事がある。それがツールのエラーなのか?自分の問題なのか?それを究明するのも、Houdiniであれば、処理の流れを追う事ができるので、どこで処理を間違ってしまったかを、事細かな中間処理結果を追っていくことで解決につなげる事が出来る。

めんどくささ撤廃効率性

誰しもというわけではないだろうが、大半のプログラマーの方はめんどくさがりの人が多いと思う。めんどくさいことを自動化する術を柔軟に持っているのもHoudiniの魅力だが、Houdiniは履歴も持っているので、コードの様に中間処理のみを別の処理にもっていくこともできるし、目的に応じてDigital Asset(つまるところ、コードで言うスニペット)を作成していくことで、いつでもその呼び出しと機能の実装が可能。

ビジュアルプログラミングは流行り!

ビジュアルプログラミングという名前が通っている通りプログラマチックなものを視覚的に組み上げる流れは、時代の流行りともいえる。最先端の流れには乗るしかない!!

AI(ML, DL)の実装効率性

なんといっても便利なのは、Houdiniはノードの作成をGUI上で可能で、その中にさくっとPython処理を実装できる。機械学習処理をPythonで実装するのは慣例で、サンプルコードも数多あるし、モジュールも豊富。そういったコードを実装しつつ即座に試せる。こういった簡潔性、実装イテレーション速度の向上はエンジニアリングにはもってこいの環境で、ここで散々試して、そのまま実装するもよし、他で実装するもよしといった利用もできる。

もう少し実装部分の話をすると、そのノードに対してのI/Oのデータを取得する事が可能で、このI/Oを利用したML特性を持ったノードを開発する事が可能。またHoudiniの非常に面白いところは、フルノードベースで画像合成処理も行えるところで、Goemetry -> Composite(画像化とMLインプットとしての最適化処理) -> 画像解析系ML -> Geoemtryという循環をHoudiniから離れずに行う事が可能だったりする。
通常は、UVテクスチャレベルのものでも書き出さないと分析に扱えなかったものでも、HoudiniならオブジェクトとしてHoudini内の処理で完結するので、書き出しなしのプロセス処理も可能。

Houdini導入アプローチ

映像ではエフェクトメインで推し進めることが出来るが、ゲームではHoudiniの柔軟性をふんだんに生かす事が普及につながる

映像ではほかのプラグインからも見て取れる様、高度なエフェクトの表現の幅によって求められるテクニックの広域性からHoudiniの柔軟性との相性がいい。
しかしながら、ゲームでは、エフェクトとしても使えるというのはあるが、そもそもHoudiniがもつ柔軟性をジオメトリの最適化の自動処理やレベルデザインの効率化に使ったり、初期から中間処理として、ツール化して昇華していったりすることによって導入を進めることが出来る&もっと出来るのではと思う。例えば、TerrainやたとえばMeshing、例えばLOD作成、自動配置、など様々
そういった自動化の凡庸性で薦めるとよい。

Houdiniの柔軟性を利用したツール開発

Houdiniで汲んだノードの仕組みをコアにした自動処理スタンドアロンツールの開発も可能
例えば、PointCloudをメッシュ化するツールも、そのコアの機構をHoudiniで汲んであげてhipファイルとして保存しておき、スタンドアロンツール上でそのhipファイルを展開して、PointCloudファイルの読み込み→メッシュ化→書き出しという処理を行わせることが出来る。一見、Houdiniを使ってないように見えるが、裏ではしっかりHoudiniを使って問題解決をしている上、PointCloudファイルの仕組みに変更があった場合はhipファイルを開いて編集すればいいので、1からツールを作るより簡潔、および、保守性が高い。

Houdini TD/TAを導入しておくこと

Houdiniは触れる範囲がとても小さいレベル、それも数学的な処理を初期段階で触れる可能性のある過程を踏む。なので、早め早めの段階でHoudini TD/TAを導入しておくと、ルール決めやツール化によって、スケールアウトする際にカオスにならないで済む[1]
また、長期的に見れば爆発的なコスト削減は見込めるものの、出来る幅が広い分、沼にハマるとほかの感覚的なDCCツールよりも工数や管理コストがかかる可能性があるので、そこを補えると初期段階での想定コストの発散リスクを抑えることが出来る。

今後のゲーム業界においてのHoudiniについて考える

情報量増加vs人的リソースに備える

必ずしもハイエンドがすべてではないとは思うが、実際に完成品として求められる情報量は増加しており、(少なくとも弊社内では)モバイル版のものも相応の情報量増加が求められている。その中で、いかに効率よく、残存する人的リソースを使って開発を進めるかは鍵となっていて、すでにそれは起きている。この戦いに備えるには、自動化処理が不可欠。
よって、これから数年は迅速にHoudiniのアセットを作る期間であるべきで、それを利用してTD/TAやエンジニアが自動生成ツールを作成し、大方自動生成してしまったら、そこにデザイナーが手を入れていくといったフローの構築が必要になると思う。
また、Houdiniを開発する側としては、機械学習なども利用したノードを作成しつづけ、それを使えばある程度は「いいかんじ」に配置してくれるしくみを積極的に取り入れ、例外を今のうちに洗い出しておくことで、それをベースに改善を深め、最終的には「いいかんじ」を大方自動でくめるような仕組みを作っていくべきだと思う。

実験を受け入れてくれるプラットフォーム

Houdini特有のクセはありつつも、デフォルトの機能や開発実装を試してそれを見せる事が出来る場所。とりあえず、タスクで直面して解決したいことや、興味をもって試したい技術を、言葉で結ぶ代わりにHoudini上で結んでみよう。そして、アーティストにも触ってもらって、もっとこういう数値の遷移だと気持ちい絵が出る、アニメーションが出来るということを一緒に練る事が出来れば、プログラマはそれによってアート的な感覚を学ぶことも出来ればツールもさらに良くなっていく。どんどん試そう、どんどん表現しよう。

脚注
  1. DFTALKで書いた記事を参照 ↩︎