Day 1-2 : RBD : Introductionで作った作例がどのように機能しているのか、もう少し詳しく見ていきましょう。
まず gridノードを選択し ジオメトリスプレッドシートを開きます。
ジオメトリスプレッドシートを開いたら まずはこの部分に注目してください。
4つのアイコンがあり、一番左のアイコンが選択状態にあると思います。
Day 1-1 : 画面レイアウトと基本操作 で説明したようにジオメトリスプレッドシートは "ジオメトリが持っているアトリビュートを参照できる"機能です。
そしてアトリビュートは Points, Vertices, Primitives, Details というジオメトリが持っている4つの単位 = コンポーネントごとに持たせることができます。
mayaの場合 コンポーネントは Vertex, Edge, Face, Object という切り分けになっているので、違いに少し戸惑うかもしれません。
Houdini のそれぞれのコンポーネントが何を意味しているのかについては後述します。
例えば上記の図では Points ≒ 頂点 に設定されているアトリビュートを参照しています。
P とは座標情報を表すアトリビュートです。
座標情報がないと頂点が存在することはできないので、各 Points は必ず P アトリビュートを持っています。
この場合の grid ノード では Rows(行) , Columns (列) にそれぞれ 10 設定していたので 10 * 10 で 100 個の頂点があります。
3次元空間内の位置を決める場合 X(左右), Y(上下), Z(奥手前) の3つの座標値が必要なので P[X], P[Y], P[Z] の3項目が設定されています。
それではHoudini のコンポーネントがについて説明していきます。
Points は ジオメトリを作るための最も基本となる単位で、Mayaで言うところの頂点のことです…が、 完全にイコールではありません。
Maya では Points と Vertices を区別せず、まとめて頂点と呼んでいるからです。
両者の違いは何かというと、Points は 単独で存在できるのに対し、Vertices は面の構成要素になった場合の頂点で Points なしに存在できません。
なぜこのように分けるのか理解するために、簡単な実験をしてみましょう。
新規にGrid ノードを設定し、Colorノードと接続します。
Class を デフォルトの Points のままで Color ノードの Color Type をランダムにすると 各Points にランダムな色を設定することが出来ます。
ところが Class を Vertex に変えると違った結果になります。
Class を Points にした場合 頂点の周囲すべての面に色の影響が出ているのに対し Vertex にした場合 面ごとに違う色が設定されています。
このように 面を作るにあたって Point は共有しているが 面ごとに違う値を設定したいときのために Houdini では Points と Vertices が分かれています。
Primitives は Maya で言うところの Face に相当します。(NURBS モデルなどの場合にはその限りではないですが、基本的には)
先ほどの実験を流用して Class を Primitives に変更すると どの部分が Primitive に相当しているのかわかりやすいと思います。
Details は Maya で言うところの Object です。
先ほどの実験を流用して Class を Details に変更すると 全面が同じ色になります。
Seedの値を変更してみるとより分かりやすいかもしれません。
Maya の経験がある人には Edge に相当するコンポーネントはないの?と不思議に思われるかもしれません。
選択モードとしてのエッジ選択はあるのですが、ジオメトリの構成要素としてのエッジはありません。
ジオメトリスプレッドシート上でコンポーネントごとの見え方を切り替えるためにはこのスイッチを切り替えます。
ひとまずは Points タブのままにして 流れを確認していきましょう。
前回の作例では 球体をコピーする場所をある程度ランダムにするために Mountain ノードを接続していました。
Grid ノードと Mountain ノード の選択を切り替えながら ジオメトリスプレッドシートを見てみましょう。
P[Y]の値が切り替わっているのが分かります。
細かいノードのパラメータについては説明を割愛しますが、MountainノードがP[Y] アトリビュートをランダムに書き替えているわけです。
次に Attribute Randomize です。ここでは Attribute Name に デフォルトで Cd という文字列が入っています。
このノードを選択すると ジオメトリスプレッドシートに Cd[X] Cd[Y] Cd {Z]という2つの値がランダムに設定されていることが確認できます。
Cd は色を表すアトリビュートで、赤(R)・緑(G)・青(B) の光の三原色を組み合わせて設定するので 3つの値が必要なのです。
Attribute Randomize の Dimension の項目を見ると デフォルトで 3 と設定されていて それぞれ Min Value が 0 , Max Value が 1 になっています。
4つ枠がありますが 左から3つがそれぞれ R, G, Bに対応しています。
Min / Max Value とは 指定した 0 から 1 の値をランダムに生成するという意味です。
あわせて読むと Cd アトリビュートの RGB それぞれに 0 ~ 1 の間でランダムな値を割り当てる という設定になります。
前項で解説したように この状態で Copy to Points に 接続すると コピーするオブジェクトに色情報などを引き継ぐことができます。
ここで引き継げるアトリビュートは他にもいくつかあります。
ここからは前回の作例を改造する形で いくつかのアトリビュートを試してみましょう。
pscale は XYZ軸すべてを同じ割合でスケールさせるためのアトリビュートです。
Attribute Randomize ノードを Copy to Points の直前に挟み込んで Attribute Name を pscale に設定し Dimension は 1 にします。
XYZすべての軸に対して同じ値でスケールさせるので Dimension は 1つで済みます。
元のサイズを1倍 (つまり100%) として 0倍から1倍の間でランダムなサイズの球体がコピーされたのが確認できます。
rot は rotation の略で コピーする際 角度をランダムにするものです。
球体のままだと確認しづらいので 下準備として Platonical Solids ノードを接続し Copy to Points の左側に接続しておきます。
Platonical Solids は 正多角形を作ることができるノードです。
その上で Attribute Randomize ノードを Copy to Points の直前に挟み込んで Attribute Name を rot に設定し Dimension は 4 にします。
このアトリビュートはクォータニオンと行って 4つの値で角度を設定するものなので Dimension は 4となります。
地面にぶつかったときの跳ね返り具合を事前に割り当てておくこともできます。
Attribute Randomize ノードを Copy to Points の直前に挟み込んで Attribute Name を bounce に設定し Dimension は 1 にします。
また変化が分かりやすいように Max Value を 3 にします。
この状態でシミュレーションをかけると 一部のコピーは 跳ね返り係数が高いので 何度も跳ね続けることになります。
Copy to Points する前の直前のノードでジオメトリスプレッドシートを確認してみましょう。
最初は P しかなかった Points に様々なアトリビュートが付加されているのが確認できると思います。