On this page |
概要 ¶
Houdiniの プリミティブ とはオブジェクトよりも下のレベルでポイントよりも上のレベルのジオメトリの構成単位のことです。Houdiniでは、いくつか異なるタイプのプリミティブをサポートしています:
-
ポリゴン/Bezier/NURBSカーブ
さらに、どこかに保存したジオメトリを軽量で参照することができるパックプリミティブと呼ばれる特別なプリミティブがあります。これは、コピー/インスタンスと重いジオメトリの処理で非常に役に立ちます。Houdiniでは、Alembicファイルをパックジオメトリで表現します。
他にも、ポリゴンサーフェスとは違って数学的に形状を表現した二次プリミティブタイプがいくつかあります。これらのタイプは、軽量なジオメトリとして役に立ちます。
-
円(単一ポイント、向き、半径で定義されたもの)。
-
球/楕円体(単一ポイントと複数半径で定義されたもの)。
-
チューブ/円錐(単一ポイント、向き、複数半径、長さで定義されたもの)。
Houdiniの円、球、チューブには、それらを作成する方法を選択するパラメータがあります。例えば、“primitive sphere”や“polygonal sphere”。
Convert SOPを使えば、たいていのジオメトリタイプを別のジオメトリタイプに変換することができます。
Tip
ジオメトリネットワーク内のノードをクリックすれば、そのノードを通過したジオメトリに関する情報がポップアップ表示され、そこにプリミティブの数/タイプが含まれています。
ポリゴンとメッシュ ¶
ポリゴンとは、一連の真っ直ぐなエッジから構築した形状のことです。これらのエッジは、一連の頂点で定義されています。ポリゴンは、メッシュやNURBSサーフェスが4辺の性質をもつのに対して、それを超えた複雑なトポロジーを扱うのに理想的です。
メッシュ とは、並びが保証されたポリゴンの集合体です。 そのメッシュと等価のポリゴンは、たいていの通常のポリゴンとは違って、ポリゴンを直接NURBSに変換することができるので非常に効率的です。 縦と横に綺麗にレイアウトされたポリゴンが欲しい時は、Convertサーフェスノードを使うことで、メッシュプリミティブを通常のポリゴンに変換することもできます。
ポリゴンは以下の特性を持っています:
開/閉
閉じたポリゴンは、最初と最後の頂点を共有し、内部的に“closed”としてフラグが立てられます。閉じたポリゴンのみがシェーディングされます。
平面/非平面
平面ポリゴンの頂点は、3D空間で同じ平面上に乗ります。非平面ポリゴンの頂点は、3D空間内で単一平面上にすべてが乗りません。
凸/凹
ポリゴンは、同じ平面内のどの無限線もポリゴンと最大で2回まで交差すれば、凸です。凹ポリゴンは、“交差”ポイントを持つより複雑な形状をしています。
Create シェルフタブのツールを使ってサーフェスを作成することができます。 ビューポートの上部にあるオペレーションコントロールツールバーの Primitive Type メニューのオプションからポリゴンの構築方法を選択することができます。
Polygon シェルフタブのツールを使えば、フェースとポリゴンサーフェスを編集し、形状を変更することができます。
パックプリミティブ ¶
パックプリミティブを参照して下さい。
ポリゴンスープ ¶
ポリゴンスープは、少ないメモリ表現でポリゴンをメモリに保存し、非常に効率的に同じPrimitiveアトリビュートのフェースを保存します。 メモリ内の表現は、トポロジーが変わらない限り、大きなスープのメモリのほとんどがノード処理間で共有されます。 それとは対照的に、通常のポリゴンでは、各ノードがすべてのポリゴンのコピーを保持する必要があります。 このメモリ共有により、メモリのキャッシュ化が非常に効率的になって、その結果、メモリ使用量が少なくなり、さらに、通常ではモデリングとレンダリングの処理も高速化されます。 スープ内にポリゴンが多いほど、通常のポリゴンと比較してメリットがあります。ポリゴン数の少ない単純なジオメトリに関しては、スープのオーバヘッドの管理が原因で、通常のポリゴンよりも遅くなる可能性がありますが、それでもメモリは少なく済みます。
Polysoupノードを使えば、ジオメトリをポリゴンスープに変換することができます。
ファイルからのポリゴンスープの読み込むは、通常のポリゴンの読み込みよりも非常に速いです(MantraとHoudiniどちらも)。Alembicファイルをポリゴンスープとして読み込むことができます。ポリゴンスープを作成するオプションを使うと、グリッド、球、チューブ、トーラスの形状の作成が速くなります。
形状ノードと合わせれば、Convert、Convert Meta、Convert VDB、Convert Volume、Iso Offset、Point Cloud Iso、Subdivide、Tetra Surfaceを使って、ポリゴンスープを作成することができます。Subdivideノードを使って、OpenSubdivメソッドの1つを選択すれば、ポリゴンスープを細分化することができます。
ほとんど(すべてではなく)のジオメトリノードは、ポリゴンスープに対して“ネイティブに”操作することができます。アトリビュートを修正するオペレーションでポリゴンスープを共有するメリットがあります。例えば、Edit、Transform、Sculpt、ポイントへのAttribute Transfer、ポイントGroup、Attribute Create、Attribute Wrangle、Attribute Copy、Facetを使ったポイント法線の計算、ポイントのUV Project、Paint、Groups from Name、ポイントのConnectivity、Rayなど。
頂点/プリミティブのアトリビュートの修正をするいくつかのオペレーションは、ポリゴンスープで動作しますが、通常のポリゴンとは少し違った意味を持ちます。例えば、1つのポリゴンスープにつき、プリミティブは1つのみなので、ポリゴンスープ内のポリゴンは、独自のPrimitiveアトリビュートを持つことができません。また、ポリゴンスープは、通常のポリゴンプリミティブほどにたくさんの頂点を持ちません(頂点は、同一頂点を結合します)。つまり、例えば、UV Projectは正しく頂点のテクスチャ座標を計算することができず、頂点法線の鋭角化に対応していません。
ポリゴンのトポロジーを変更するオペレーション(例えば、Poly ExtrudeとPoly Split)のほとんどが、ポリゴンスープをサポートしていませんが、少しのオペレーションはサポートしています。例えば、Divideノードの Convex Polygons オプションは、ポリゴンスープを凸状にして、頂点の追加ができないので、Vertexアトリビュートのメモリを共有することができます。
ポリゴンスープをサポートしていないノードに対しては、Convertを使って、ポリゴンスープを通常のポリゴンに変換して、そして、Polysoupを使って、そのポリゴンをポリゴンスープに戻します。しかし、ポリゴンスープのメリットが通常では変換コストで打ち消されてしまうので、ほとんどの場合は、通常のポリゴンを使ったほうがよいです(HDAでこのような方法で変換をしているなら、SOPキャッシュが必要以上に長くポリゴンを保持しないので、出力がポリゴンのノードすべてに対して Unload フラグを設定するべきです。)。
ポリゴンスープ、パックプリミティブ、通常のポリゴンを使用する時期に関しては以下のセクションを参照してください。
ポリゴンスープ vs. パックプリミティブ vs. 通常のポリゴン ¶
パックジオメトリとポリゴンスープを使ったインスタンスも参照してください。
編集 |
通常のポリゴンは、Houdiniのすべてのオペレーションでサポートされています。 ポリゴンスープは、すべてではありませんが、Houdiniの多くのオペレーションでサポートされています。 パックプリミティブのジオメトリは編集不可、変形不可です。しかし、それらのジオメトリを変換して、パックジオメトリを表現したポイント上にアトリビュートを設定することができます。 |
メモリ使用量 |
パックプリミティブは、必要な分だけメモリに読み込みます。ディスクファイルを参照するパックプリミティブに関しては、パックプリミティブは、表示用に直接グラフィックカードにストリームされ、レンダリング用に直接レンダラーにストリームされます。パックプリミティブが使われている時のメモリ使用量は、ゼロになることが多いです。 ポリゴンスープは、通常のポリゴンよりも少ないメモリを使います。 通常のポリゴンは、この中では一番メモリを使います。 |
役に立つ情報 |
小さいジオメトリに対しては、ポリゴンスープのオーバーヘッドを回避するために、通常のポリゴンを使います。 トポロジーを変えるオペレーションを使うときや、ポリゴンスープをサポートしていないオペレーションを使うときは、常に通常のポリゴンを使用します。なぜなら、ポリゴンスープから通常ポリゴンへの変換コストが、ノードチェーンの一部のためだけにポリゴンスープを使うメリットを打ち消してしまうからです。 編集または変形したいジオメトリが大きい場合は、ポリゴンスープを使います。 ジオメトリの表示と移動だけをするのであれば、それをディスクに保存して、パックプリミティブを使います。 |
メモリ使用量の確認 ¶
ノード上でクリックすれば、そのノードのメモリ使用量を確認することができます。ポップアップには、色々な方法で測定したノードのメモリ使用量が表示されます:
Memory
特定のDetailが参照するメモリの総量。このメモリは他のノードで共有されている場合がある(例えば、ポリゴンスープを使っている時)ので、このノードを削除してもメモリが節約されるとは限りません。あくまでノードを通過している量を測定しています。
New
このノードが参照するメモリ量であり、そのノードの任意の入力が参照するメモリではありません。つまり、このノードが使うメモリ使用量を意味します。この数値は、入力のないノード(ジェネレータ)では報告されません。
Unique
このノードのみが参照しているメモリ(つまり、そのノードの入力や出力が参照していないメモリ)。つまり、このノードの Unload フラグをオンにした時に節約されるメモリ量を意味します。
この表示には、いくつか制限があります:
-
パックプリミティブが参照するメモリは、パフォーマンスのためにカウントされません。
-
SOPキャッシュマネージャとCache SOPは、まだ正しくメモリ使用量を監視しません。
-
サブネット(例えば、デジタルアセット)上でクリックすれば、サブネット内のネットワークのメモリ使用量ではなく、サブネット自体が使っているメモリ使用量のみが表示されます。
USDパックプリミティブ ¶
Alembicパックプリミティブと同様に、USDパックプリミティブは、SOPプリミティブ内部に外部データ(この場合だと、USDジオメトリ)を格納します。 ビューポートは、このようなプリミティブにエンコードされたジオメトリを表示することができますが、その内部のデータを変更したい場合には、まず最初にそのデータを アンパック する必要があります。
パックプリミティブ内のポイントがUSDプリミティブを表現していて、そのポイントポジションと標準のポイントインスタンスアトリビュートが各プリミティブのトランスフォームを表現しています。それらのトランスフォームを編集することで、パックプリミティブをアンパックすることなくプリミティブを移動/回転/スケールさせることができます(これは、RBDシミュレーションを扱う時によく行ないます)。
Unpack USD SOPを使用すれば、パックUSDプリミティブをSOPジオメトリに変換することができるので、それ以降にSOPノードを接続することで、そのSOPジオメトリを編集することができます。 USDジオメトリをパックSOPプリミティブまたはポリゴンに変換することができます。 パックプリミティブに直接作用するSOPしか使用したくない場合以外では、ポリゴンへの変換が選択肢になることでしょう。
メタボール ¶
メタボールは、ポイントセット周辺を計算する暗黙的なサーフェスを作成します。メタボールは、ポイントまわりの中心にある球のようなものですが、2つのメタボールをお互いに近づけて配置すると、お互いのサーフェスが滑らかに結合されます。
メタボールは、ブロッブや変わったサーフェスを表現するのに役に立ちます。サーフェスの計算方法を変更することもできるので、特定のエフェクトを表現するのに役に立ちます:
NURBSとBezierスプライン ¶
-
NURBSとは、Non-Uniform Rational B-Spline(非一様有理Bスプライン)の頭文字です。NURBSは、制御頂点(CV)で定義した滑らかな曲線/サーフェスです。詳細は、 Wikipedia を参照してください。NURBSのメリットは、CVを動かすことで、カーブ/サーフェスの連続性を保持しながら周辺のカーブ/サーフェスの形状を変更することができることです。これによって、NURBSカーブ/サーフェスのCVを“上下に動かす”ことで、捻じれや不連続を起こさずに目的の形状を生成することができます。
-
Bezierカーブ/サーフェスは、NURBSよりも単純です。詳細は、 Wikipedia を参照してください。Bezierカーブは、ノットでの不連続が許されているので、簡単に角を作成することができますが、滑らかに連続したカーブ/サーフェスを作成することが難しいです。
パラメータ表現 ¶
CVのセットを設定したNURBSカーブの形状は、ノット間の相対距離で決まります。ノットのパラメータ表現には、 Uniform (均一)と Chord Lenghth (円弧長)の2タイプがあります。
-
Uniform (均一)のパラメータ表現は、ノートが均等に配置されます。
-
Chord Lenghth (円弧長)のパラメータ表現は、ノット間の距離が、次のCVまでの距離によって決まります。 Uniform (均一)のパラメータ表現は、通常の形状で推奨しますが、 Chord Length (円弧長)のパラメータ表現は、フリーフォームな形状で使います。3つ目のパラメータ表現のタイプは、 Centripetal (求心性)と呼ばれ、Chord Length(円弧長)と同じですが、鋭いカーブに最適化されています。
階数/次数 ¶
スプラインカーブには、 階数 があり、時々 次数 の代わりに参照されます。次数は、階数-1です。次数は、潜在的に直線の滑らかさを決めます。ポリラインの次数は1(“階数が2”)です。ノット間に1つの制御点を持つカーブの次数は2です(“階数が3”または“Quadratic”と呼びます)。Bezierカーブと同様に、ノット間に2つの制御点を持つカーブの次数は3です(“階数が4”または“Cubic”と呼びます)。
Houdiniは、1から10までの次数のスプラインをサポートしています。アニメーションとエフェクトでは、通常は、次数が3(Cubic)のスプラインが十分滑らかで上手く動作します。他の次数はあまり使うことはないです。
NURBSカーブ内に角となるポイントを作成する ¶
時々、NURBSカーブ内に角を付けたい時があります。これは以下の方法で可能です:
-
Model EditorのCurve > Parametersダイアログを使って、選択したCVのウェイトを10,000のような高い値に変更します。これによって、CVが強く“引っ張られて”、カーブに角ができます。
-
3次カーブの隣接する2つのCVをその中間のCV上にドラッグすると、カーブに角ができます。これを、 CVの多重化 と言います。“次数”の数だけCVを重ねる時、CVの多重化が最大になります。
-
“次数”の数のノットを同じにします。これを ノットの多重化 と言います。Refine SOPで Subdivide オプションを選択するか、またはModel Editor内でRefine Stateを選択してクリックで分割することで、これを行なうことができます。
Quadratic(2次)プリミティブ形状 ¶
Houdiniは、プリミティブの球/楕円体、円/楕円、チューブ/円錐をサポートしています。プリミティブの形状は、とても単純な数学的パラメータ(例えば、楕円体は高さと幅で計算)と中心点で定義します。プリミティブは移動、回転、スケールが可能です。
Quadratic(2次)プリミティブは、とても軽いので以下の様な場合に使います:
-
何十万何億もの単純な形状のコピーを表示する(インスタンス化)。
-
Stand-In(代用)ジオメトリ。
-
エンベロープ(包まれたような)ジオメトリ(例えば、飛び跳ねるパーティクルのオン・オフ用)。
ほとんどのモデリングツールは、Quadratic(2次)プリミティブに機能しますが、プリミティブはトポロジーを持たないので、サーフェスポイントに機能するオペレータはQuadratic(2次)プリミティブでは機能しません。
See also |