HoudiniBBAの台所

Houdiniを覚えたいリアルタイム系VFXババァが覚えたことをいろいろと残しておくブログ。

「ノードベース」とか「プロシージャル」を雑に解説する【超のつく初心者向け】

専門家さんたちがよく使ってるあれやこれやをできるだけ丁寧に噛み砕いて解説するこーなー。

今回は「ノードベース」と「プロシージャル」。
個人で噛み砕いて、半分無理やり飲み込んだようなものなので、間違ってたらごめんね(てへぺろ

 

最近よく聞くけど「ノードベース」って何よ

とりあえず視覚的に見たことがある方は mayaのハイパーシェードとか、UnrealEngineのマテリアルとか、 BISHAMONの編集画面とか、NUKEの合成してるアレとかの、 「なんか四角いのを線で繋いでなんかやってるやつ」ってことは 知っているかと思います。

この「四角いやつ」とか「線」が書いてある全体のことを だいたいの場合は「ネットワーク」と呼んでいて、 ネットワークの中の「四角いやつ」を「ノード」って呼んでます。 たいてい、1つの「ノード」には1つの「処理」が入っています。

たとえばmayaで「Sphereをつくって上半分を切る」という処理を

f:id:houdini_kitchen:20181002222039p:plain

Houdiniでやる場合はこんな感じでノードを繋ぎます。

f:id:houdini_kitchen:20181002222050p:plain

一番上の「Sphere1」ノードでは 「球体を世界の中に置く」という処理が行われています。

真ん中の「Sellect_Y-positive」というノードには 「Yの値が0以上の頂点を選んで覚えておく」という処理が入っています。

最後の「delete」というノードでは、 「さっきのノードで選んだ頂点だけ消す」という処理が入っています。

細かい性格は違えど、 こんな感じで処理の流れを設計図のように残しながら(作りながら?)、 画を仕上げていくのが「ノードベース」のソフトたちになります。

最近、この「ノードベース」が何でこんなにもてはやされているかというと

 1.シーンを見ればどうやって作られたかが分かる
  →作った本人が不在でも、調整したり改良したりできる
   (誰が操作しても全く同じ結果を作り出すこともできる)

 2.いちど作った仕組みを他に使いまわすことができる
  →例えば上記の「Yが0以上の頂点を全部消す」は、SphereがBoxになってもちゃんと動く(「毎回お決まりの処理」は手でやらなくて良くなる)

この2点が大きな理由かと思います。
あと、ゴリゴリのmelとかPythonに比べたら、 あんまりプログラムプログラムしてないことかな...?

 

Houdiniの人がよく「プロシージャル最高!!」って叫んでるけど、何が最高なの?

「プロシージャル」の考え方は、 先述の「ノードベース」に似てるというか含まれてるというか、 日本語にすると「手続き型」って言われるもの。
「何らかの法則に従って、あらかじめ準備しておいた処理をしてくれるやつ」。

たとえば、「木」とか「ビル」みたいに、「一定の法則に従って作ることができる」 モデルをじゃんじゃん自動生成する方法(プロシージャルモデリング)だったり、 「グリッド」とか「グラデーション」みたいに、「計算式で表現できる模様」を テクスチャとして使う(実質、テクスチャ画像が不要になる)ことだったり...。

大規模なものだと、たとえば「自動生成する迷路のゲーム」で 「迷路の形に添って、いい感じにランダムに草とか木とかランダムに置く」とかも。

例ばっかりになってしまうけど、 手作業で「迷路のステージ」を作っている(しかも9割完成してる)時にディレクターが 「ごっめーん!ここの迷路の形状、変更になっちゃった♡」なんて言ってきた日には 変更指示を出した奴とそのディレクターとラインマネージャを血祭りに上げるほか無いですが、
プロシージャルで作っていた場合は、迷路の形状を変更すると、 あとは「草は壁に沿って生える」とか「曲がり角に木が植わっていることがある」みたいな 法則に従って、バババっと自動でレイアウトが修正されます。

どちらの環境で作業をしたいかと聞かれれば、 圧倒的に後者でしょう。

リテイク以外の場面、たとえば日本人が大好きな「複数パターン提案して」に対しても、 最初にきちんと法則と素材を作っておけば、あとは 「ランダムのシード値を変える(俗にいう「ガチャを引き直す」)」とか 「ここに置くアセットこれじゃないやつにする」みたいな感じで、 ポッキー食べたり鼻くそほじったりしながらクリックするだけの手間で済むと。

乱暴にまとめると、 リテイクもパターン出しも自動化しちゃうとか、プロシージャルまじで最高! ってことですはい。

以上、できるだけ難しい言葉を使わずに 「ノードベース」と「プロシージャル」を解説してみました。

あと主にHoudiniなんですが、何気に最強なのが 「非破壊編集であること」だったりします。

たとえば、普通にデータ自体を編集する(破壊的編集)mayaのようなソフトで上述のように球の上半分を消しちゃうと、本当に頂点が消えちゃいます。
元に戻そうとしたら、Undoするしかありません。

が、Houdiniだと「その頂点を消す」って処理をスキップしたり、 「その処理やっぱいらない」ってやれば、 消しちゃった頂点はいつでも帰ってきます。

ヒストリ消えただのバグっただの、増分保存ミスっただの、 いまいじってたファイルはリファレンスじゃなくて本体だった、等々で 悲鳴を上げる日々とはもうおさらばです。

これだけでもHoudini、使いたくなったでしょう?(笑)

あ、ちなみに例に出していた、半分に球を切るアルゴリズムに関しては、 あんまりプロシージャルな作りにはなってないです...。 (Yが0以上、だと原点にオブジェクトが無かったりすると上手くいかないし、 既存のポイントで消すとポリゴンの割られ方によっては綺麗に半分にならないので...)

本日もありがとうございました。