【Houdini16.5基礎編】19.Expressionsとスクリプト


今回の記事はHoudiniでのExpressionsとスクリプトについての紹介になります。

 Houdiniは、プロダクションレベルでの作業の効率化に大いに貢献することができます。スクリプトを効率的に運用することで、皆様の作業効率は格段に上昇します。 多くのアーティストは、主に簡易的なExpressionを記述して利用しますが、TDは自身のプログラミング技術を使ってより多くスクリプトを作成、運用することができます。 Houdiniには、Hscript、Python、およびVEXの3つの言語がサポートされています。

 アニメーション、ビジュアルエフェクト、ゲーム開発の分野は高度な技術基盤を元にした創造的なフィールドであり、芸術的な向上心と技術的なノウハウのバランスをとることが重要です。

 Houdiniのノードベースのワークフローは、CGテクノロジーをよりアーティストに対して良心的かつ自由性を備えアーティストが望むむ形での柔軟性を提供するように設計されています。スクリプトとExpressionは、より深いレベルのコントロールを提供することによって、創造的なプロセスを強化するひとつのアプローチとなります。

HSCRIPT Expression

 HScriptは、Expressionの記述は使用できる情報について、高速かつ簡潔に検索して操作できるように設計されています。Expressionは、通常、単純な文字列または数値ではない任意の値です。 これは、変数、数式または関数のような単純なものにすることができます。

 フィールドに入力するだけで、Expressionをパラメータに直接入力することができます。 Enterキーを押すと、フィールドが緑色でハイライト表示されます。 パラメータ名をクリックすると、Expression本体とExpressionによって計算された結果を切り替えて表示することができます。チャンネルリファレンスを作成している場合は、パラメータを右クリックして、「Copy Parameter」を選択し、リンクするパラメータに移動し、「Paste Relative References」を選択します。

 また、2番目のパラメータを右クリックし、次にReference > Scene Dataを選択してもチャンネルリファレンスを作成することができます。 これにより、他のオブジェクトやノードからデータを選択できるパネルが開き、Expressionが作成されます。 このメソッドは、複数のパラメーターでExpressionを設定することもできます。

Expressionエディタ

 関数が複雑になる場合や、パラメータのタイプによって入力が煩雑になる場合の対応として、Expressionエディタを使用することもできます。Expressionエディタは、パラメータを右クリックしてExpression> Edit Expressionを選択するか、パラメータの上にカーソルを置いて[Alt] + [E]キーを押すことで開くことができます。

 

Python

 Pythonは、統合と標準化をサポートするために使われるCG業界では一般的なスクリプト言語であり、従って、ツールを開発する際には最適な言語です。HoudiniのPythonは、Houdini Object Model(HOM)上に構築されています。このモデルは、Pythonスクリプト言語を使用してHoudiniから情報を取得し、制御するAPIです。 HoudiniにおけるPythonではhouパッケージが用いられ、これにはモジュール、関数、HOMを定義するクラスセットが含まれています。 houモジュールは、パラメータエディタとPythonコマンドラインシェルでExpressionを記述する際は自動的にインポートされます。また、HoudiniでExpressionを書くときにも使うことができます。 これを行うには、ノードのパラメータペインの上部にあるExpressionの言語オプションを変更します。

 Pythonコマンドを入力するためのPython Shell Panelもあります。 houモジュールを通常のPythonシェルにインポートして、既存のPythonベースのスクリプトにHoudiniを統合することもできます。

ツールボックス

 シェルフツールもPythonを使って設定されています。 任意のシェルフツールを右クリックし、Edit Toolを選択すると、内部のコードを確認することができます。

PYSIDE / PYQT

 Python Panel Editorペインでは、PySide2またはPyQt5によってインターフェイスを作成、編集、および削除できます。 エディタを使用すると、Python Panelのインターフェースメニューの項目と、Houdiniペインのタブメニューの項目を管理することもできます。 パネルには、ご自身でサンプルを試すことができるサンプルコードが付属しています。

VEX

 VEXは、シェーダの作成やAttribute Wangleなど、Houdiniの多くの場所で使用される高性能な言語です。 通常、VEXの実行は非常に高速で、コンパイルされたC / C ++コードに近いパフォーマンスを提供します。

 VEXはHoudini用に最適化されており、単なるスクリプティングの代替手段ではなく、むしろ、シェーダとカスタムノードを作成するための効率的な手段となります。 VEXはC言語をベースにしていますが、C ++やRenderManシェーディング言語からアイデアを取り入れています。

VEXはHoudiniにおいて主に以下のような場面で使用されています。

モデリング – VEX SOPでは、ポイントアトリビュートを操作するカスタムサーフェスノードを作成できます。 これは、ポイントに対して、移動、速度の調整、色の変更を行うことが出来ます。 また、ポイントのグループ化や、その他多くの有益なタスク実行することができます。

レンダリング – Mantraはすべてのシェーディング計算にVEXを使用します。 これには、ライティング、サーフェス、ディスプレイスメント、フォグシェーダが含まれます。

コンポジット – VEXジェネレータおよびVEXフィルタCOPを使用すると、複雑なカスタムCOPをVEXに書き込むことができます。 これはC / C ++の速度に非常に近いパフォーマンスが期待され、Pixel Expression COPより1000倍高速に実行されます。

CHOPs – VEX CHOPを使用すると、カスタムCHOPを作成できます。 CHOP機能は、任意の数の入力チャンネルを操作し、任意の方法でチャンネルデータを処理することができます。 場合によっては、VEXコードはコンパイルされたC ++コードより速く実行できます。

ファー – プロシージャルファーの振る舞いはVEXで実装されています。

 

VOPS

 VEXコードを記述することが難しい場合は、VOP環境を使用してノードベースのインタフェースでVEXの機能を使用することができます。

 VOPコードの作成は、Attribute VOPノードを使用することで、SOP環境で実行できます。加えて、ジオメトリを入力することで操作が可能です。

 Parameter VOPを使用して、SOPレベルで使用可能なフロートスライダなどのインターフェース要素を構築できます。 これにより、VOPレベルに戻ることなく暗黙的にVEXコードを実行することができます。VOPコンテキストは、アーティストにVEXコードを作成するインタラクティブな方法を提供するように設計されています。 しかし、TDなど、プログラミングの経験を持っている方にとっては、VOPを利用するよりWrangleノードに直接コードを書く方が効率的に作業ができるでしょう。

 

Wangleノード 

 また、Attribute WrangleのようなWrangleノードを使用することもできます。このWrangleノードは、VEXに精通しているコーダーがアトリビュートを調整できるようにするローレベルノードを提供します。 また、チャンネル、ボリューム、およびデフォームを処理することもできます。

コンパイルブロック

 ジオメトリネットワーク[SOP]では、ネットワークの一部をコンパイルされたブロックの中に置くことができ、これを利用すると、ネットワーク速度がコードで記述した場合に匹敵します。 ただし、ネットワークの構造にいくつかの制限を課すものですので、適宜状況に応じて利用する必要があります。コンパイルブロックは適切に使用することによって、作業効率を大きく向上させる可能性があります。

 

Houdini開発者キット(HDK)

 Houdiniをさらに深く掘り下げる方法としてHDKの利用が挙げられます。これはSideFXプログラマーがHoudiniファミリーの製品を開発するために使用するC ++ライブラリと同じ包括的なデベロッパーキットです。 HDKを使用すると、Houdiniインターフェイスのさまざまな領域をカスタマイズするプラグインを作成できます。 HDKでできることのいくつかの例を以下に示します。

カスタムExpressionの関数を追加
カスタムコマンドの追加(hscriptまたはHOM)
カスタム演算子(SOP、COP、DOP、VOP、ROP、CHOP、オブジェクト)の追加
非標準レンダラーをサポートする出力ノードの追加
カスタムライティングまたは大気エフェクトをレンダラーに追加

 HDKの使用方法の詳細については、SideFXのWebサイトの該当するページを参照してください。