はじめに
Houdiniは他の3Dソフトと違って「プログラムを書いているような感覚」が強く、プログラマにとって理解しやすいソフトです。
例えばチューブの一部にノイズで凹みを作り、グラフでその範囲を制御することができます。下の例ではVOPというノードの中にノードがあってVEXという言語に変換されるノードがかけるVOPで数値変換することにより、それを実現しています。VOPのノードはVEXのコードにコンパイルされます。VOPとVEXは速度的にはあまり変わりませんが、中身のロジックを視覚的に確認しやすいのがVOPで素早く目的の機能を実装するならVEXといった使い分けがされます。
私がHoudiniの魅力にはまった、世界のトッププロダクションの仕事
こうした先端プロダクションの表現に触れると、Houdini学習のモチベーションになります。
Houdiniの基本概念であるAttribute(変数)の考え方
Houdiniの本質はAttribute(変数)です。これがHoudiniをとても柔軟な表現が可能にしています。
- Cd … 色
- N … 法線
- P … 座標
- pscale … ポイントのスケール
- Time … 時間
これらはGeometry Spreadsheetで常に確認可能。Spreadsheetは変数ウォッチウィンドウのような存在です。
ノードは関数のようなもの
各ノードは関数のように機能し、内部をVEXコードに置き換えることが可能です。全部のノードを覚えている人はあまりいません、よく使う必要なものだけを理解すれば十分です。
例えばCreateAttributeというノードとAttributeExpressionという2つのAttributeを付与するノードがありますが、CreateAttributeはdefault値を設定出来るという特徴があり、これがノードとノードをひとまとめとするノードでAttributeが両側で揃っていけない約束がり、その際にAttributeがないノードにデフォルト値が適用されます。でも、そんな事をするとどこでAttributeが定義されているか見失う原因になります。従って、このCreateAttributeのデフォルト値を私はつかいません。まあ、そんな感じで、この機能なにと思っても、放っておいていいノードや設定パネルが存在します。後述するHipFlaskはそこまで掘り下げるチュートリアルなのですが、デフォルトが打ち消される例まで説明していて正直疲れます。でもMergeするときに2つのノードは同じアトリビュートを持っていないといけないんだよって基本知識はHipFlaskからじゃないと学ばません。
複雑なアニメーションはSolverというノードが基本
Solverは、前フレームのジオメトリにAttributeを加えて次のフレームに渡します。これはProcessingのDrawの仕組みとそっくりです。別にHoudiniをやる前提にProcessingは必要ありませんが、経験した事がそのまま繋がっていることを実感出来ます。
他のシュミレーションも同じような仕組みを用います、例えばParticleならばPopNetというノードの中にPOP Solverが中心にあり、そこがベクトルと加速度を計算して次のノードに渡す役割を果たします。
一度、Solverをコードで書いてみるとより理解できると思います。後述するVex for Algorithmic DesignにSolverをコードで書く例が出てきます。
ObjectとUSD(Solaris)
ではHoudiniではObjectは何かというと、これらの仕組みの入ったgeometeryノードをObjectはジオメトリ、ライト、カメラをなどをオブジェクトとして扱います。ライティングとカメラ設定を複数の人が作ったUSDというアニメーションファイルを読み込んで一つのスタジオのように行うSolarisという仕組みがありますが、個人制作ではあまり必須ではありません。
初心者向けチュートリアルではあまり出てこない重要ノードAttribute Transfer
Attribute Transferを使うと、別ジオメトリに対してAttributeをコピーできます。
例えば一方に色(Cd)を持たせ、他方へ転送すれば、Spreadsheetで確認しながら視覚的に変化を理解できます。
こういうノードの知識を得るために後述するAttributeとVOPを組み合わせるチュートリアルが効果的です。
学習の流れ
-
Geometry Spreadsheetを常に表示する
多くのチュートリアルで勧めていたり、実際にそういったセットアップでコードをかいtいます。
下のような画面構成で作業するということをオススメします。
-
Attributeが生まれる瞬間を確認する
Attributeには名前が決まっているものがあります。まずはそれを作って実際に値がどう適用されるかを確認していきます。私が後述している初心者チュートリアルはこの事に多くの時間を割いています。- Normalノード →
N
が追加 - Colorノード →
Cd
が追加 - Attribute Createノード → 任意の変数を作成
- Normalノード →
-
VOPで左から右へ値が流れて行く様子を理解する
VOPやVEXは並列処理されるコードになるので、条件分岐やループは仕組みとしてはあってもそれ程使いません。
VEXで本的にコーディングする前に上の画像のノードの流れのようにある値を数値変換してある値に繋いで、最終的にattributeとして出力する感覚をよく掴んでください。 -
vexをAttribute Wrangle等のノードで試す
後述するVex for Algorithmic DesignというVEXのチュートリアルはプログラミング知識を有することを前提としてません。冗長に思えるところは、あ〜それプログラマなら誰でも知ってると思って飛ばしながらも、結局これを見ながらVEXを勉強する方法を個人的にはすすめます。他のchユートリアルではVolumeは何かを説明せずに、Volumeを使うコードが出てくるからです。つまりHoudiniの知識も前提知識を必要とせず解説しているということです。
vexの簡単なコード
@myvalue = @P.y * 2;
@Cd = set(@myvalue, 0, 1);
SpreadsheetとViewportで即確認可能です。
PythonよりVEXを優先
- Python → ユーティリティ用途
- VEX → 並列処理に最適、アニメーションやシミュレーション向き
Houdiniを本格的に学ぶなら、まずVEXを理解するのが最重要です。
おすすめチュートリアル
- Houdini Free Tutorial(UIと基本操作)
- Intro to VOPS - Houdini Beginner Tutorial - 無料
- VEX for Algorithmic Design - 無料
- JHoudini Attributes and VOPs: The Basics - 無料(attributeとVOPがどう絡むかが分かる)
- [ Intro To Houdini Particles - Full Beginner Course](https://youtu.be/94YAomHfMbw?si=VJ64E3mfERYIV-Hy) - 無料でパーティクルおさえるなら(同シリーズにVolumeもあり無料でVolumeの基本を押さえられる)
-
Houdini-Course.com - 有料だけどHoudiniのVFXをBasicから応用まで広範囲に網羅
HipFlask - 有料で高いが、Houdiniの基礎のGeometeryを徹底的に掘り下げるチュートリアル。このチュートリアルでしか説明してないこともあるが、説明が長く途中で飽きるので上達してから基本がわからなくなったら理解を深める用
Applied Houdini series - Geometery, VOP & VEX, Particle, VolumeあたりがHoudiniの基本概念で、他のエフェクトはその応用なので、ParticleとVolumeを深く知るなら、この人というぐらい定番のチュートリアル。(一番、Particleを発生する部分やVolumeが発生する部分と、geomeryのVOPで生成したAttributeとが繋がってる実例が多い)
👉 注意:VEX for Algorithmic Designは、基本操作やUIを押さえてからのほうが楽しめます。最初はもう一つの無料チュートリアル(UI編)を先にやるのがおすすめです。そしてVOPの解説をみてノードからプログラミングを組み立てる過程を体験しましょう。VEXよりもVOPで解説してるチュートリアルのほうが多いので後で役に立ちます。
まとめ
- Houdiniは「変数(Attribute)と関数(ノード)」の世界
- Spreadsheetで変数を監視しながら理解を進める
- Processing経験があれば理解はスムーズ
- 学習の順番は UIチュートリアル → Intro to VOP → VEX for Algorithmic Design → 応用チュートリアル で、最短コースでVOPとVEXによりアルゴリズム生成部分に最短距離で辿り着ける