絶対に挫折しないHoudini入門 4 - オブジェクトとジオメトリ
オブジェクトとジオメトリ
Houdini入門において、まず最初に深く学ぶべきはオブジェクトとジオメトリだと思います。特にジオメトリの理解は超重要です。
ジオメトリはデータの塊です。新しくツールを覚えたいというときそのツールがどのようなデータを扱っているのか知ることはツールの習得において一番大切なことです。
データの種類や構造が頭の中でイメージできるようになると、一つひとつのノードの中で何が起きているのか理解できるようになりますし、応用も効くようになります。
例えば、Photoshopでいうと、画像はピクセルの集まりで構成されてて、レイヤーがあって...という感じです。
その点Houdiniは扱うデータの種類がたくさんあるので、まずそこで混乱します。 特にジオメトリの理解なしにチュートリアル動画を見ても何が起きているのか全く理解できないと思います。なので、まずはHoudiniが扱うデータについて学びます。 )
オブジェクト
ジオメトリを学ぶ前に軽くオブジェクトについて学びます。詳細はオブジェクト ヘルプを読めば良いのですが、ヘルプでは以下の様に説明されます。
Houdiniのモデルは、シーンレベルのジオメトリオブジェクトで表現されます。ジオメトリコンテナオブジェクト内部でジオメトリノードがオブジェクトのジオメトリを定義します。ジオメトリコンテナオブジェクトでは、オブジェクト内部の個々のサーフェスとは別に、移動、回転、スケール、オブジェクト全体をシェーディングすることができます。
ジオメトリコンテナオブジェクト? ジオメトリノードがオブジェクトのジオメトリを定義? さーふぇす? ???
いきなり見知らぬ単語のオンパレードなので意味が分かりません。すぐ下に載っている画像も参考にしながら読み解くと、とりあえず以下の様な事を説明しているようです。
ジオメトリコンテナオブジェクト: OBJレベルで配置できるGeometryノード(OBJでTab>Geoとタイプして配置)。とりあえずオブジェクトの事だと思ってよいかと。
ジオメトリ/ジオメトリノード: SOPで使えるノードの総称。ジオメトリノード ヘルプ。SOP(Geometoryノードの中)で配置できるSphereノードなど。
サーフェス/サーフェスノード: 基本的にジオメトリ/ジオメトリノードと同じ意味。SOPのSはSurfaceの意味。
なので、あまり難しいことは言っていなくて、意訳すると
・OBJで配置できるノードがオブジェクト。
・オブジェクトの中(SOP)にはジオメトリノードを配置できる。よってオブジェクトはジオメトリで構成される。
・オブジェクトは内部にあるジオメトリとは別に移動、回転、スケール、オブジェクト全体をシェーディング出来る。
ジオメトリとは別に~オブジェクト全体をシェーディング出来る
という部分はマテリアルの事を言っています。
マテリアルについては別の記事で詳しく書きますので、ここでは簡単に説明します。
マテリアルはオブジェクトの質感を表現するためのものです。Houdiniにはデフォルトで様々なマテリアルが用意されています。
これらのマテリアルはオブジェクト>Renderタブ>Materialで指定することで、そのオブジェクトに割り当てることが出来ます。
ジオメトリであれば、Materialノードを使います。
オブジェクト全体ではなく、そのオブジェクトを構成する一部のジオメトリにのみ異なるマテリアルを割り当てることが出来ます。
ジオメトリ
ジオメトリ( ジオメトリ ヘルプ )は大きく分けて以下の2つから構成されています。
オブジェクト>ジオメトリ>プリミティブ>ポイントと頂点
の順に構成要素が小さくなっていきます。この構造をイメージすることはとても重要です。
プリミティブ
プリミティブにはたくさんの種類があります。例えばSphereノードだけでもこれだけのタイプが確認できます。
さらにConvertノードではこんなにたくさんのタイプが確認できます。
それぞれ得意/不得意があり、用途によって使い分けます。これらは、プログラミングで言うところのintやfloat、stringというような型と似ています。
最適なタイプを選択するには、経験を積むしかないと思いますが、まずはプリミティブのヘルプをよく読んで理解しておくと良いと思います。
ポリゴンとメッシュのような他のツールではほぼ同義として扱われているものでも微妙な違いがあります。
ポイントと頂点
ポイントはジオメトリを構成する最小単位です。ヘルプはこちらです。ヘルプをよく読んで、ポイントと頂点(Vertex)の違いについても理解しておく必要があります。
グループ
プリミティブやポイントなどは、グループを作ることが出来ます。グループを作成するには主にGroupノードを使います。アルゴリズムによってグルーピングするにはGroup Expressionノードが便利です。
Houdiniではグループの扱いはとても重要です。デフォルトではノードは受け付けたジオメトリ全てに対して処理を行いますが、それでは都合が悪いことがあります。立方体の上半分だけ色を変えたいとか、特定の面だけ押し出して突起を作りたいとか、理由は様々です。そこで、多くのノードはグループを指定して処理対象のフィルタリングが出来るようになっています。
処理に必要な対象だけを選択してグループを作成するテクニックがたくさんあります。それらのテクニックについては別の記事で説明します。
アトリビュート
ジオメトリはアトリビュートと呼ばれる情報を格納するための仕組みがあります。
アトリビュートは今回の記事の肝です。冒頭でジオメトリはデータの塊と表現しましたが、それはアトリビュートとして位置座標や法線情報、頂点カラーなど様々な情報を格納できるからです。
アトリビュートは、ジオメトリの構成要素ごとに分かれて存在しており、以下の構造をしています。
- Detail: ジオメトリ全体の情報
|- Primitive: プリミティブ単位の情報
|- Point: ポイント単位の情報
|- Vertex: 頂点単位の情報
アトリビュートにどのような値が入っているかはGeometry Spreadsheetで確認することが出来ます。Geometry Spreadsheetは超重要なのでヘルプをよく読んだり、色々なプリミティブを配置して格納されているデータの違いを見てみると良いと思います。
以下はSOP>Sphereノード>Primitive Type: Polygonの場合のPointsアトリビュートです。ポイントの位置座標が入っているのが分かります。
扱う情報の種類によって適切なアトリビュートの種類を使用します。以下に例を挙げます。
・ポリゴンを構成する頂点の座標 -> Pointアトリビュート。VertexアトリビュートにはPointへの参照情報が保持されます。
・建物が一つのプリミティブとして表現されたジオメトリの建物名 -> Primitiveアトリビュート。以下はOSM Importノードで地図情報から生成した建物のジオメトリのPrimitiveアトリビュートを見たときの例です。
1行=1プリミティブで、建物名の他にも様々な情報が入っているのが分かります。
アトリビュートは位置座標の様な、いかにも3DCGモデルに必要そうな情報だけでなく、上記の例の様にユーザーが自由に名前を決めて任意のデータを入れることが出来ます。
これらアトリビュートに格納されたデータの塊を処理する能力こそがHoudiniの核です。
データの種類や構造が理解できると、今まで圧倒されていた凄い表現でもなんだかその正体が見えたような気になりますね。
(逆に言うと、「どうやって作ったんだこれ!?」と思ってしまう様な見た目からデータ構造が掴みづらい作品が良い作品の1つの条件と言えるのかもしれません。)
ジオメトリとそれが持つデータの見方さえ理解できていればどんなに複雑なノードが組まれていたとしても一つひとつの処理を追いかけて、(大抵のものは)何をやっているのか理解できるようになります。