この記事ではHoudiniで標準で利用できるスクリプトについてご紹介します。
HoudiniではHScript、VEX、Pythonという3種類のスクリプト言語がサポートされております。
それぞれの紹介と用途、特徴についての比較を行います。
また、Houdiniにおけるエクスプレッションとスクリプトに関しましては、こちらのページもご参照頂ければと思います。
まず、各言語の簡単な比較表がこちらになります。
|
HScript |
VEX |
Python |
|
・エクスプレッション | ・シェーダ―記述 ・Wrangle ・VEXpression ・VEXアセット |
・シェルフ作成 ・Pythonノード ・パラメータコールバック ・カスタマイズ |
習得難度 |
〇 |
△ |
△ |
記述量 |
◎ |
〇 |
△ |
処理速度 |
△ |
◎ |
〇 |
汎用性 |
△ |
〇 |
◎◎ |
情報発信 |
〇 |
〇 |
◎◎ |
※比較は参考程度に捉えて頂ければと思います。
これから、言語ごとに、各項目の詳細について解説します。
基本的にこれらの言語は、各々別の用途で利用されるものとなります。
HScript
Houdiniが独自に持つスクリプト言語で、Houdiniの最初期バージョンから実装されております。
言語形式はC Shellに準拠しており、C言語ライクな構造のシェル言語となっております。
主な用途
HScriptはノードのパラメータにおけるエクスプレッションにおいて、非常に効果を発揮するスクリプトです。
設計当時は主に、HScriptエクスプレッションとHScriptコマンドのふたつの用途で使えるようになっておりましたが、
現在はHScriptコマンドはレガシーとなっており、非推奨となります。
習得難度: 〇
上記の通り、現在、HScriptはほぼエクスプレッションにしか用いません。
これだけ用途が少ないと必然的に頻出する文法は限られてきますので、習得難度はかなり優しいです。
記述量: ◎
HScriptの一番の特徴は記述量の少なさです。複雑な定義が必要なく、簡潔にパラメータに対して、処理を加えることができます。
逆に複数の処理を羅列して記述するような複雑な処理には不向きです。
処理速度: △
△となっておりますが、エクスプレッションに限れば、HScriptの処理速度は別に低速というわけではありません。
むしろ高速にエクスプレッションの操作を行うことができるようになっております。
汎用性: △
HScriptの汎用性は残念ながら低い評価となります。これは現在HScriptがエクスプレッションでのみ利用が推奨されている為です。
Houdiniに対して直接命令を与えるHScriptコマンドは現在非推奨となり、代わりにPythonスクリプトAPIが推奨されています。
情報発信:〇
レガシーとはいえ、Houdiniで古くから用いられているスクリプトなので、Houdiniユーザによる情報の発信が多く見られます。
VEX
Renderman Shading Language (RSL)にヒントを得たHoudiniのシェーダ記述用言語です。
RSLと同じくC言語ベースで作成されたスクリプトとなります。
しかし、並列計算処理に特化しているという特徴から、現在ではジオメトリやチャネルの制御にも広く用いられています。
因みにVEXは、厳密にはスクリプト言語ではなく、コンパイルを必要とするコンパイラ言語になります。
但し、ノード側で自動コンパイルがされる為、ユーザが明示的にコンパイルを行う機会はほぼ発生しません。
主な用途
上述の通り、本来はシェーダ作成用の言語であり、
昔はアーティストの方はあまり関わりのない部分となっておりましたが、
現在はAttribute Wangleなどでsnipedを作成してコーディングベースでジオメトリ制御をしたり、
VEXpressionという形式でHScriptのように一部のノードのパラメータを制御するような用途も
一般的になっており、アーティストにも広く利用されております。
習得難度: △
VEXはC言語ベースとなるため、シェルベースのHScriptと比べると若干難易度が上がります。
ただし、プログラムの基本的な考え方には違いがなく、ただ単純にパターンが増えただけとも解釈ができます。
ただ、VEXは対並列処理に特化した仕様、構造であることから、C言語とは言語記法や内部仕様が一部異なる為、
逆にC言語を使い慣れた方ですと、深く触ろうとした際に、一部戸惑う部分があるかと思います。
詳細な言語仕様のドキュメントが存在しないこともあり、開発者から見ると扱いにくい面があります。
記述量: 〇
これも言語形式の問題で、シェルベースの言語と比較すると記述量はやや増えてしまいます。
VEXは単純な算術演算だけではなく、やりたい事ベースで複数の処理を羅列して記述することができるので、
必然的に記述量は求める処理数に依存して長くなってしまいます。
処理速度: ◎
VEXの最大の特徴である暗黙的な並列計算のおかげで、処理速度は紹介している3種の中では最速です。
但し、並列に処理できないような処理の場合は、他と比較しても、それほど大きなパフォーマンスは発揮されません。
汎用性: 〇
上述されるように、VEXはHoudini内のVOP, SOP, DOPなど、様々な箇所で利用されており、HScriptより汎用性は広いです。
言語知識がC言語やJavaScriptなどのメジャーな言語に応用できるのもポイントです。
情報発信: 〇
HScript同様、Houdiniユーザからの情報発信が活発に行われております。
Python
HScriptやVEXと異なり、PythonはHoudiniだけでなく様々な分野、領域で利用されている汎用的なプログラミング言語です。
VEX同様こちらもC言語がルーツのプログラミング言語ですが、他のC言語ルーツのものに比べ、Pythonは独特の記法が多いです。PythonをHoudiniで利用するにはHoudini Object Model (HOM)というAPIを利用します。
これはhouモジュールというモジュールにて定義されており、
Houdiniではデフォルトでhouモジュールが読み込まれているPythonである、hythonを使うのが一般的です。
主な用途
HoudiniにおけるPythonの主な用途は4点あります。
ひとつはシェルフの作成です。HoudiniのシェルフはPythonコードによって構成されておりますので、
Pythonを用いることでオリジナルのシェルフを作成することができます。
次にPythonノードです。ノードネットワーク上にPythonコードを記述することができるPythonノードを配置することで、
Python APIを用いて複雑な命令を行うノードを自作することが可能です。
3点目はパラメータコールバックです。ノードのパラメータの中にPythonスクリプトを仕込むことができ、
特定のパラメータ操作によってPythonスクリプトを暗黙的に呼び出すことが可能です。
最後にHoudini本体のカスタマイズです。HoudiniのUIはPythonで作成されている為、PythonによるUIのカスタマイズが可能です。
最近のバージョンではビューポートのカスタマイズに関するAPIも公開されました。
習得難度: △
PythonもHScrioptに比べると習得難度は高いですが、VEXと比べると、言語の難しさという意味では大きく違いはありません。
PythonはVEXと異なり、汎用的な言語の為、学習のための教材に困ることはない反面、
Houdiniを利用するためのAPIの構成がわかりにくく、必要なメソッドや関数を探すのが少し大変です。
それでも、Pythonはプログラミング言語の中では、導入が特に簡単な部類に含まれますので、難しくはありません。
記述量: △
PythonはHScriptやVEXと異なり、Houdini専用の言語ではない為、
Houdiniの機能を呼び出すための「お作法」が存在したり、そもそもの記述量が多いです。
HoudiniでPythonを使う場合は、補完機能が利用できるコードエディタを検討した方が良いでしょう。
処理速度: 〇
基本的にはPythonは並列処理は行わないので、VEXより処理速度は遅いです。
しかしPython独自の並列計算機能の併用や、C言語へのコンパイルを行うことで、VEX並のオーダーでの高速処理が可能です。
また、並列計算できない処理の場合、速度はVEXと大きく変わらず、場合によってはPythonの方が早くなることもあるようです。
汎用性:◎◎
Pythonは用途がHoudiniだけに限らないので、汎用性という面ではHScriptやVEXとは比べ物になりません。
Houdiniに限っても、記述量に拘らなければ、HScriptでできることは全てPythonでできますし、
VEXについても速度に拘らなければ、シェーダやDOPやCOPのVEXpression以外の用途については、かなりの用途が代替可能です。
その上でさらにPythonで作成したノードから、他のアプリケーションのPython APIを呼び出すことも可能なので、
行おうと思えばHoudiniから別のソフトウェアを、APIによって操作するようなノードも作成することができます。
またPDG/TOPsで利用できる言語としてもPythonは唯一無二であり、
Python ScriptであればHython以外にも、システムにインストールされているPythonや、Python3系も利用することが可能です。
また、様々な外部モジュールをインポートすることで、Pythonでできることは無限に広がります。
情報発信:◎◎
全世界のPythonユーザが情報発信を行っており、Houdiniの世界でしか存在しないHScriptやVEXとは桁違いの情報量が存在します。
Houdiniで利用するライブラリの情報も、ある程度はHoudiniユーザが情報公開をしているので、困ることは少ないでしょう。
また、言語仕様が非公開のHScriptやVEXと異なり、Pythonは公式が正式に言語仕様を公開して周知されている為、
アーティストがあまり気にかけることの少ない、細かい言語の仕様なども容易に調べることが可能です。
以上の内容を踏まえて、再び比較表を見てみると、このようになります。
|
HScript |
VEX |
Python |
|
・エクスプレッション | ・シェーダ―記述 ・Wrangle ・VEXpression ・VEXアセット |
・シェルフ作成 ・Pythonノード ・パラメータコールバック ・カスタマイズ |
習得難度 |
・一番簡単 | ・少しレベルが上がる ・慣れは必要 |
・VEXとはまた違う形式 ・教材は豊富 ・API構成が少々難解 |
記述量 |
・一番短い | ・それなり | ・Houdini専用でないので長い |
処理速度 |
・ この中では低速 | ・並列計算で高速 | ・使い方次第 |
汎用性 |
・エクスプレッションのみ | ・複数のコンテキスト | ・Houdiniに留まらない |
情報発信 |
・Houdiniユーザ | ・Houdiniユーザ | ・Houdiniユーザ ・Pythonユーザ |
これらの特徴から、総じて、HScriptがアーティスト寄りな言語で、Pythonがデベロッパー寄りであると考えることができます。
アーティストがHoudiniを触る上で必要となるのは、HScriptとVEXになります。
ただし、VEXはVOPという形でノード化されており、VEXを使わず、VOPを使って処理を行うことができる場合もあります。
VOPとVEXにつきましてはこちらの記事の上部をご参照頂ければと思います。
そして更に、もっとスクリプトを使って効率化をしたいという時は、Pythonをベースに学習を検討されるのが良いかと思います。
補足: HDK
また、Houdiniではさらに高度なツール開発のために、HDK:(Houdini Development Kit)というライブラリも存在します。
こちらはC++用のライブラリとなっており、スクリプトではありませんので本記事では省略されておりますが、
Pythonでは処理にボトルネックが生じたときや、完全に新しいノードを作成するときなど、
Houdiniで本格的なツールを作成される際は、こちらを利用することになります。
主な用途 |
・既存システムの高速化 ・高度なツール開発 ・オリジナルノードの作成 ・バッチシステム ・その他それ以外の方法で実現不可能なこと |
習得難度 | × : 本格的なプログラミングの知識が必要 |
記述量 | × : 処理にもよるが、概ねPythonの倍以上 |
処理速度 | ◎ : VEXと同等以上 |
汎用性 | ◎◎◎ : Python以上に制約が少ない |
情報発信 | ◎◎ : 汎用言語なので世界中にユーザが存在 |