kick the base

Houdiniと、CG技術と、日々のこと。

Houdini: コンポーネント・アトリビュート考察

さて、本日はHoudiniのコンポーネントとアトリビュートについて考えていきます。例によって現段階での僕の理解を備忘録としてまとめたものなので、間違っているところは随時訂正・アップデートしていこうと思います。

[追記]

Twitterにてご指摘をいただき、内容を加筆・修正しました。主に下記項目が該当箇所です。

  • エッジはジオメトリの構成要素ではない(ジオメトリコンポーネントは頂点・ポイント・プリミティブ・ディテール)
  • 上記に合わせ、円グラフ画像内のテキストおよび本文を「ジオメトリの構成要素」から「オブジェクトの構成要素」に変更
  • エッジは選択やグループの作成は行えるが、アトリビュートは持てない
  • エッジはアトリビュートを持てないため、アトリビュートに関する画像を修正

コンポーネント・アトリビュート

Houdiniではひとつのオブジェクトを作成した時、その構成要素をコンポーネントとアトリビュートという観点で管理します。他のソフトと比較しながら考えていきます。

まずはコンポーネントについて見ていきましょう。

コンポーネント

他のソフトでは一般的に、オブジェクトは頂点(Vertex)・エッジ(Edge)・面(Face)で区分されると思います。*1

f:id:kickbase:20170228135110j:plain

Houdiniを見てみると、ちょっと分類が多いのと見慣れない言葉がありますね。

f:id:kickbase:20170228135111j:plain

ひとつひとつ見ていくこととします。

まずHoudiniではPointとVertexを区別します。この違いは後日記事を書こうと思っているのでそちらにゆずるとして、Pointが最小かつ最重要な単位と思っておくと幸せになれる気がします。

PrimitiveはFaceを意味することが多いですが、オブジェクトの生成方法(Type)によって指すものは替わります。Polygonだったり、NURBSだったりVolumeだったりMetaballだったりと。比較のためここでは面と考えておきましょう。

Detailはオブジェクト自身を指します。

前述の通り、この中で一番重要なのはPointです。Pointを制したものはHoudiniを制する(んじゃないかなーって気がします)。

他のソフトと違い混乱しやすいところ、また大切なところをまとめると下記の通りです。

  • PointとVertexは異なる
  • Primitiveはオブジェクトの生成方法(Type)で異なる
  • Detailはオブジェクト自身を指す

アトリビュート

さてアトリビュートですが、上記コンポーネントがそれぞれ持つ値のことを指します。

たとえばPointひとつひとつには位置情報があるはずです(ないとポイントが存在できません)。

このコンポーネントの要素ひとつひとつが持っているデータがアトリビュートと呼ばれます。

f:id:kickbase:20170228135112j:plain

最初ぼくもここらへんがごっちゃになってしまって混乱しましたが、ポイントひとつひとつが持つ情報、フェイスひとつひとつが持つ情報…「これらのデータのことをアトリビュートと呼ぶ」とシンプルに考えればそれほど難しくはないでしょう。

このひとつひとつの情報に直接アクセス・変更できるのがHoudiniのとても大きな強みです。

そしてコンポーネントをより自由に、柔軟にあつかうために、ユーザー自身が好みのアトリビュートを作る仕組がHoudiniには備わっています。それがAttribute Createです。

Attribute Createに挑む

ぼくがAttribute Createを初めて使った時、アトリビュートそのものがよく分かっていない段階だったので非常に苦労しましたが、アトリビュートはコンポーネントひとつひとつが持っている値のことというのがわかっていれば実はそんなに難しくありません。ノードベースアプリケーション考察に引き続き、たい焼きでたとえてみましょう。

※ちなみに慣れてくるとAttribute Createはあまり使わなくなり、Attribute WrangleやAttribute VOPを使用するようになると思いますが、Attribute Createで仕組みを掴んでからの方が分かりやすくていいかなと思います。

ここにたい焼きがいっぱいあります。HoudiniでいうところのPointだと思ってください。 たい焼きの基本的なアトリビュートとして、現在下記ふたつが設定されているとします。

  • 具: あんこやクリーム、チョコなど
  • 値段: 単位は円

たい焼きひとつひとつが上記ふたつのアトリビュートを持っています。これが基本です。

f:id:kickbase:20170224181207j:plain

でもこれらは売り物ですから、古くなったものをいつまでも置いておく訳にはいきません。なのでたい焼きひとつひとつに賞味期限というアトリビュートを新たに付けました。

この操作がAttribute Createです。Attribute Createノードを処理すると、たい焼きひとつひとつに下記のアトリビュートがつくということになります。

  • 具: あんこやクリーム、チョコなど
  • 値段: 単位は円
  • 賞味期限: 単位は日付←NEW!!

f:id:kickbase:20170224181208j:plain

新しく追加したアトリビュートの賞味期限を使えば、「賞味期限が残り3日になったたい焼きを半額にする」などの処理が行なえます。

このように、自身で新しく付与したアトリビュートを元に様々な処理を行うことができるのです。

なんて自由…Houdiniおそろしい子!

まとめ

このようにコンポーネントとアトリビュートを分けて考えれば、すっきり理解できそうです。

またアトリビュートを自分自身で追加できるようになると、自分で自在にコントロールしてる感があって万能感が味わえます。

すごーい!Houdiniたーのしー!

参考サイト

*1:NURBS、ボリュームなどについては割愛します