On this page |
このノードは、メタボールとメタサーフェスを作成します。 メタサーフェスは、メタボールを汎用化します。つまり、メタボールが楕円体である必要がありません。
序文
メタボールは有機的な見た目のサーフェスを作成することができます。 メタボールは空間内に浮いた"density"の塊、つまりブロッブ("fields")です。 Houdiniは、ある閾値よりも濃い"density"の領域まわりにサーフェスをスキン化します。
メタボールが重なれば、Houdiniは、それらのメタボールのフィールドを合算します。 フォースフィールドの密度は、他のメタボールのフォースフィールドとの距離を近づけることで上げることができるので、 メタボールは、周辺のメタボールと融合して形状を変更するという固有の特性を持ちます。 この特性によって、有機的なサーフェスのモデリングで非常に効果があります。
マイナスのWeightを指定すれば、メタボールを"押し寄せる"ことができます。 これによって、効果的に密度を下げることができるので、サーフェス内に穴を作成することができます。
フィールドは、 Kernel Function と Weight で制御します。 Kernel Functionは、メタボールのフィールドの密度を1(中心)から0(外側エッジ)のグラデーションで制御します。 Weightは、密度をスケールすることで、サーフェスの位置をより近くに、または中心から離すようにします。 現在のところ、フィールドの形状は、楕円体や 二次曲面 として指定することができます。
メタボールの配置
To... | Do this |
---|---|
シーン内のどこかにメタボールを配置する |
|
原点にメタボールを配置する |
ジオメトリレベルまたはオブジェクトを選択した状態でメタボールを作成すると、選択したオブジェクト内に移動します。シーンレベルでメタボールを作成すると、ビューアとネットワークエディタは選択したオブジェクトのジオメトリレベルに切り替わります。この固有な特徴は、連続でメタボールを複数作成すると、近くにあるメタボールを1つに結合します。
メタボールのハンドル
Metaballオブジェクトに対して、ジオメトリレベルで利用可能な特別なハンドルがあり、それを使えば伸縮や押し潰しをすることができます。
-
ネットワークエディタでMetaballノードをダブルクリック、またはオペレーションコントロールツールバーの Jump to Operator ボタンをクリックして、ジオメトリレベルに移動します。
-
ハンドルをドラッグすることで、メタボールを押し潰したり、伸縮させることができます。
To... | Do this |
---|---|
X軸に沿って円を伸縮または押し潰す |
赤のハンドルをドラッグします。 |
Y軸に沿って円を伸縮または押し潰す |
緑のハンドルをドラッグします。 |
Z軸に沿って円を伸縮または押し潰す |
青のハンドルをドラッグします。 |
How to
To... | Do this |
---|---|
メタボールを相互に作用させる |
|
膨大な数のメタボールを簡単に作成する |
|
メタボールの表示を高速化する |
|
メタボールを他のジオメトリタイプに変換する |
|
二次曲面形状
通常の楕円体形状とは違って、XY Exponent、Z Exponentのパラメータを増減することで"星形"(exponent > 1)や"四角形"(exponent < 1)を作成することができます。
Exponentパラメータを1以外にすることで、メタボールが二次曲面になります。
メタボールの動作方法
各メタボールは"球状の影響力"を持ちます。2つのメタボールをMergeで結合することで、相互に影響を及ぼし合って、水滴のような挙動をします。 つまり、表面張力が働いて、メタボール間が滑らかに繋がります。 これは、お互いに融合し合う有機的な"ブロッブ"を作成するのに役に立ちます。
メタボールを球状のフォースフィールドと考えることができ、メタボールのサーフェスは、フォースフィールドの密度が特定の閾値を超えた箇所に暗黙関数が定義されます。 フォースフィールドの密度は、他のメタボールのフォースフィールドの近接度によって濃くなるので、メタボールは、自身の形状が周辺のメタボールと融合する固有の特性を持っています。 これは、有機的なサーフェスのモデリングで非常に効果があります。メタボールのサーフェスは、メタボールの密度が、特定の閾値を越えると存在します:
2つ以上のメタボールのフォースフィールドが結合されると、下図のように、フォースフィールドの密度が追加されて、 サーフェスがフォースフィールドが交差する領域まで伸びます。
Display Optionsツールバーの Markers タブの Hulls をオンにすることで、メタボールの影響フィールドを確認することができます。
このノードは、有機的なモデル、液体表現、他のブロッブサーフェスの作成に役に立ちます。
役立つ情報
Level Of Detail
Display OptionsのLevel Of Detailパラメータを調整することで、メタボールとNURBSの表示の詳細レベルを変更することができます。
メタボールシェーディングの改善
メタボールをポリゴンに変換する時に 法線 アトリビュートが存在すれば、正確にメタボールの法線が計算されます。 つまり、ポリゴン化したメタボールのシェーディングを改善するには、メタボールを変換する前に、法線アトリビュート(Facet SOPを使用)を追加するのが良いでしょう。
メタボールによってL-Systemのコピーをふやけさせる
これは、通常ではCopy SOPを使って、メタボールを変形ポリゴン/メッシュの入力ソースのすべてのポイントにコピーすることで行ないます。これをする時に、変形ジオメトリをFacet SOPに接続して、
スプラインサーフェスから変換する時、まず最初に、サーフェスを改良してから、メタボールを滑らかに分布させます。
メタボールを使ってParticle SOPの変形アトラクターを作成するなら、Group SOPによって境界領域を定義して、メタボールを、そのグループ内のポイントのみにコピーしたい場合があります。 これは、アトラクター領域の制御とアニメーションが簡単になります。
メタエクスプレッション
メタエクスプレッションとは、メタボールの融合の仕方を決めるためのユーザー指定アトリビュートのことです。メタエクスプレッションを使うには、すべてのメタボールをグループでまとめます。メタボールをグループやプリミティブ番号として参照することができます。そして、Attribute Create SOPを使ってmetaExpression
という名前の文字列のDetailアトリビュートを構築します。
Note
アトリビュート名は、必ずmetaExpression
にしてください。
それから、文字列フィールド内で、エクスプレッションをタイプして、メタボールの融合の仕方を制御します。これらのエクスプレッションは、引用符で閉じたグループ名、引用符なしのプリミティブ番号、min
, max
, sum
のオペレーションの組み合わせで構築します。有効なエクスプレッションの例。
sum(max("group1", "group2"), max("group3", "group4"), 0, 1)
group1, group2, group3, group4がグループ名、0と1がメタボールのプリミティブ番号です。min
, max
, sum
オペレーションは、任意の数の引数を受け取ることができ、sum(max(...), ...)
のようなネストを使ったエクスプレッションをサポートしています。min
, max
, sum
に渡す引数は、カンマで区切ります。引用符で閉じたグループ名の指定は、そのグループ内の各メタボールプリミティブを現行引数リストに追加しているだけです。例えば、group1に0,1,2のプリミティブ番号のメタボールがあれば、以下のエクスプレッション
max("group1")
は、以下のエクスプレッションと等価です。
max(0, 1, 2)
重複した引数名も、このエクスプレッションでサポートされています。例えば、プリミティブ番号0のメタボールを定義する時に、sum(0, 0)
エクスプレッションを指定すれば、2つの別のメタボールをメタボール0と同じ場所で結合することと同じです。
以下の画像は、2つのメタボールの融合結果をsum, max, minのオペレーション別に表示しています。
Sum |
|
Max |
|
Min |
このエクスプレッションは、メタボールを含むジオメトリ上にDetail/文字列のアトリビュートを必要なエクスプレッションと一緒に作成することで設定することができます。この機能は、部分的にMetaGroups SOPでも表示されます。このSOPは、ユーザーが簡単に以下のエクスプレッションを生成することができます。
max(sum(...), sum(...), ..., sum(...))
これらのグループは、スペース区切りのグループ名のリストで構成されます。2つのメタボールのグループを'group1 group2'、'group3 group4'と定義すれば、SOPは、以下と同じメタエクスプレッションを生成します。
max(sum("group1", "group2"), sum("group3", "group4"))
Tip
Display Optionsの Geometry タブの Level Of Detail を上げれば、表示精度が良くなりますが、メモリ使用量が増えます。
上級
RIBにブロッブプリミティブを生成する時、文字列パラメータが空っぽのリストにハードコーディングされます。SOHOは、"RiBlobby_Strings"(大文字小文字区別あり)という名前のDetailアトリビュートを検索します。この文字列の値は、Python関数のshlex.split()によって解読されます。その結果の文字列のリストは、RiBlobby()
コールで出力されます。
パラメータ
Mode
メタボールの指定で使用するパラメータを解釈する方法。
Field Radius
Radius をDensityフィールドのスケールとして扱います。メタボールのサーフェスが、この Radius 、 Weight 、 Kernel Function の関数になります。
Threshold Radius
Radius を孤立したメタボールのサーフェスの半径として扱い、この Radius 、 Weight 、 Kernel Function からDensityフィールドのスケールを計算します。 このモードで Weight を変更しても、孤立したメタボールのサーフェスの大きさは変わりません。
Radius
メタボールの半径。 XYZフィールドに別々の値を入力すれば、楕円体になります。
Center
メタボールの中心。この値は、メタボールを作成する時にクリックした位置で更新されます。
Rotate
メタボールの中心を基準とした回転。
Weight
メタボールが周辺のメタボールを"引っ張る"度合い。
Kernel Function
|
Blinn |
Weightが1.0未満であっても、常にブロッブの中心に球を配置します。すべてのモデルの中で一番高速で安定しています。 |
|
Wyvill |
WyvillとElendtのモデルは、非常に似ています。ウェイト分布の関数のみが異なります。 |
|
Elendt |
一番遅いメソッドですが、ウェイト分布の観点では、BlinnとWyvillのメソッドの中間ほどの良さです。 |
|
Links |
----- |
|
RenderMan |
PixarのRenderMan(またはRIB互換レンダラー)で使います。以下の計算で定義します。 Density = 1 - 3*R^2 + 3*R^4 - R^6 |
|
Hart |
数学者John Hart提案のカーネル関数。 |
XY Exponent
XY軸方向での膨張/収縮を決めます。
この指数は、以下のように、メタボールを"四角形"に近づくように膨張、または"星形"に近づくように収縮します:
> 1 = 星形に近づきます。 < 1 = 四角形に近づきます。1 = 球になります。
Z Exponent
Z軸方向での膨張/収縮を決めます。
Examples
BlendMetaballs Example for Metaball geometry node
このサンプルは、メタボールがフォースとして作用することを基本的な例を使って説明しています。メタボールはMetaball SOPで作成することができます。
Point SOPは、各フォースがお互いに引き寄せられた状態のメタボールを視覚的に表現するために使用しています。
MetaExpression Example for Metaball geometry node
このサンプルでは、Attribute Create SOPのmetaExpressionを使ってメタボールを色々な方法でくっつける方法を説明しています。
The following examples include this node.
MagnetMetaballs Example for Magnet Force dynamics node
このサンプルでは、メタボールのグループに対してMagnet Forceノードを使うことで、 衝撃を与えた時にオブジェクトの破片を跳ね返す方法を説明しています。
SimpleMagnets Example for Magnet Force dynamics node
このサンプルでは、一組のメタボール(プラスとマイナスのメタボール)と一緒にmagnetforce DOPを使うことで、RBDの球を引き寄せ/引き離しをする方法を説明しています。
RippleGrid Example for Ripple Solver dynamics node
このサンプルでは、Ripple SolverとRipple Objectのノードの使い方を説明しています。 Bulge SOPでグリッドを変形させて、Ripple Objectの初期ジオメトリとRest Geometry(静止ジオメトリ)を作成しています。このオブジェクトは、Ripple Solverに接続しています。
DentingWithPops Example for SOP Solver dynamics node
このサンプルでは、たくさんの重要なDOPの概念を組み合わせています。
-
最初に、POP SolverとRBD Solverのオブジェクトを両方使って、双方向にお互い反応させます。 RBDオブジェクトは、パーティクルに影響を与え、パーティクルはRBDオブジェクトに影響を与えます。
-
次に、実際にRBDオブジェクトにMulti-Solverを使って、RBD SolverとSOP Solverを組み合わせます。 RBD Solverは全体のオブジェクトの動きを制御し、一方でSOP Solverはジオメトリを凹ませます。
-
最後に、SOP SolverはRBD SolverからImpact情報を抽出してジオメトリを凹ませます。 SOP Solverは、DOPエクスプレッション関数を使って、この情報を抽出します。
その結果、パーティクルをぶつけられるトーラスのシミュレーションになります。 パーティクルはトーラスで跳ね返り、トーラスが動きます。 さらに、各パーティクルの衝突によって、トーラスが少し凹みます。
VisualizeImpacts Example for SOP Solver dynamics node
このサンプルでは、SOP SolverでカスタムガイドジオメトリをRBDオブジェクトに追加することで、RBDシミュレーション内のImpactデータを可視化する方法を説明しています。
このサンプルでは、Impactの位置と強さを示す緑の線を持つ3つのトーラスがグリッドに落下します。 フォースを可視化するために、補助的なジオメトリデータとして実際のトーラスに追加しているので、RBD Solverは完全にそのエフェクトを無視します。 SOP Solverを独立したSOP Networkとして使うことで、RBDオブジェクトからImapctの可視化を抽出することもできます。
FractureExamples Example for Voronoi Fracture Solver dynamics node
このサンプルでは、実際にHoudiniでボロノイ破壊を使う7つの方法を含んでいます。 特に、破壊シミュレーションでVoronoi Fracture SolverとVoronoi Fracture Configure Objectのノードの使い方を説明しています。 アニメーションを再生するなら、それらのサンプルのディスプレイフラグをオンにし、セットアップをテストするなら、各サンプルの中に入ってください。
Volume Rendering - メタボールのボリュームレンダリング Example for Mantra render node
メタボールジオメトリは、Mantraでそのままボリュームとしてレンダリングすることが可能です。メタボールのレンダリングを有効にするには、ジオメトリオブジェクトの Render タブの Geometry サブタブの Metaballs as Volume パラメータをチェックします。メタボール上のPointアトリビュートは、Pointアトリビュートがメタボールサーフェスに対して補間されるのと同様に、シェーディングポジションで補間されます。
以下に、ランダムなポイントカラーアトリビュートを使ったサンプルを載せています:
シャドウ品質とパフォーマンスの制御
シャドウマップの生成には、 Pixel Samples と Shadow Step Size パラメータ(Mantra ROP内)を使って、サーフェスに対して使用するのとまったく同じ方法で、品質とパフォーマンスを制御します。ほとんどのボリュームは、柔らかいDiffuseシャドウを落とすので、ボリュームレンダリングの時は、低解像度のディープシャドウマップを使ってレンダリング時間を短くすることがほとんどです。シャドウマップの 解像度 は、Houdiniのライトの Shadow タブで変更することができます。
FirePit Example for Material shader node
Note
このファイルでは、ジオメトリはアニメーションしていません。 テクスチャをアニメーションさせることで、すべてのアニメーションを表現しています。
炎は、UVテクスチャを簡単に適用できるようにグリッドで作成し、Magnet SOPを使ってメタボール周辺を歪ませています。
炎には、黄色または青のFlameテクスチャのどれかを割り当てています。
Flamesのopacity mask wrapをDecalに設定することで、テクスチャがFlameジオメトリの上部で単一ピクセルリングを繰り返して表示するのを回避しています。
また、flameOpacMap.jpg
というマスクファイルを使って、上部にFlameの形状を調整しています。
noise offsetを$T
でY軸を強くアニメーションさせることで、Flameが上昇しているように見せています。これは、Noise jitterもY軸に対して大きくなります。
炭は、変形させたグリッドにCopy Stampを適用した球で表現しています。
Attribute CreateSOPを使えば、SOPレベルでLava(溶岩)のテクスチャのパラメータを上書きしてCopy Stampすれば、$BBY
などのローカル変数を使ってテクスチャをアニメーションさせることができます。
そうすれば、テクスチャのCrust(地殻)とその値だけを使って、炭の上部の形状を修正することができます。
これは、炭の下部で使用するテクスチャのLava(溶岩)のアスペクト比を保持します。熱を発する炭の下部の残り火を表現するために、Lava(溶岩)の強度(Kd
アトリビュート)をスタンプしてアニメーションしています。
BulgeTube Example for Bulge geometry node
Bulge SOPを使って、磁力にメタボールを指定してジオメトリを変形しています。
磁力の強度はBulge SOPで調整することができます。
Metaball SOPのパラメータは、変形させるジオメトリのBulge SOPの最終効果を修正するために調整することもあります。
CreepBlob Example for Creep geometry node
このサンプルでは、メタボールをサーフェス上に這わせる方法を説明しています。 このケースでは、サーフェスは捻じ曲がったチューブで、メタボールは管を通過して押し出される"ブロッブ"のように見えます。
チューブは、メタボールを這わせるために作成しています。 円は同じチューブからプロファイルを抽出して作成しています。 円はCreep SOPでチューブに沿ってアニメーションしています。
メタボールは抽出した円のポイントに接続して"ブロッブ"を作成しています。
ForceBasic Example for Force geometry node
このサンプルでは、Metaball SOPとParticle SOPをForce SOPと組み合わせてダイナミックアニメーションを作成する方法を説明しています。
Force SOPのRadial Forceパラメータを使用すると、パーティクルが内側と外側に吹きつけられます。 Directional Forceパラメータを使用すると、ある軸を基準にメタボールがぐるぐるまわると、それに伴って回転する渦が作成されます。
再生ボタンを押してアニメーションを確認してください。
このサンプルでは、ForEach SOPを3つのモード(グループ、アトリビュート、ナンバー)で使い方を説明しています。 ローカル変数をサポートしないSOP(例:Magnet)は、このサンプルで示す3つのモードのどれかを使えば、ローカル変数をサポートするようにできます。
MagnetBubbles Example for Magnet geometry node
このサンプルではMagnet SOPでジオメトリを変形する方法を説明しています。
Magnet SOPの影響力をメタボールの大きさに設定しています。その影響力は、サーフェスとメタボールの中心との距離に基づいて変形します。
このサンプルでは、平面のサーフェス上を跳ねて移動するパーティクルにメタボールを追加しています。そのサーフェスとメタボールが交差した箇所が泡のように変形します。
MagnetDistortion Example for Magnet geometry node
このサンプルでは、Magnet SOPの色々な使い方を説明しています。 Magnet SOPを使ってポイントの位置・カラー・法線・Velocityに影響を与えることができます。
BlendMetaballs Example for Metaball geometry node
このサンプルは、メタボールがフォースとして作用することを基本的な例を使って説明しています。メタボールはMetaball SOPで作成することができます。
Point SOPは、各フォースがお互いに引き寄せられた状態のメタボールを視覚的に表現するために使用しています。
MetaExpression Example for Metaball geometry node
このサンプルでは、Attribute Create SOPのmetaExpressionを使ってメタボールを色々な方法でくっつける方法を説明しています。
PaintPoints Example for Paint geometry node
このサンプルでは、領域単位でポイント数を設定して、ジオメトリ上にペイントでポイントを撒き散らす方法を説明しています。
ParticleAttractor Example for Particle geometry node
このサンプルでは、メタボールをフォースとしてParticle SOPを使用する方法を説明しています。
パーティクルは原点から発生し、止まっているメタボールに向かって進みます。 メタボールにはForce SOPが適用されていて、パーティクルがメタボールに到達すると広がっていきます。
ParticleDisturbance Example for Particle geometry node
このサンプルでは、パーティクルのソースにグリッドを使い、MetaballとForce SOPを組み合わせてParticle SOPを使うことで物理アニメーションを作成しています。
メタボールの船が航跡沿いからパーティクルを外側に弾き出しながら突き進んで行きます。 Force SOPを使うことでパーティクルが船に反応するようになっています。
アニメーションを再生して全体の効果を確認してください。
ParticleExamples Example for Particle geometry node
このサンプルでは、Particle SOPの色々な使い方を5つの説明しています。
-
Creep Creep SOPを使ってサーフェス沿いにパーティクルを這わせます。
-
Group サーフェス上のポイントのグループからパーティクルを発生します。
-
Bounce パーティクルを跳ね返らせます。
-
Split 接触時にパーティクルを分割します。
-
Collide 衝突オブジェクトからパーティクルを発生します。
-
Moving Object 移動オブジェクトからパーティクルを発生します。
-
Force メタボールを使ってパーティクルに力を加えます。
ParticlePusher Example for Particle geometry node
このサンプルでは、Metaball SOPとForce SOPを使って、Particle SOPで生成したパーティクルの流れを左右に押し出す方法を説明しています。
パーティクルは球から広がって発生すると同時に、メタボールが左右に動いてパーティクルを押し出します。
アニメーションを再生して全体の効果を確認してください。
PrimitiveMetaWeight Example for Primitive geometry node
このサンプルでは、Primitive SOPで他のジオメトリのアトリビュートを駆動する方法を説明しています。 このケースでは、Metaball SOPのWeightパラメータに影響を与えています。
さらに、パラメータをアニメーションしています。再生ボタンを押してアニメーションを再生してください。
SpringHair Example for Spring geometry node
このサンプルでは、Spring SOPで動的な髪の毛を作成する方法を説明しています。
ラインを球のポイント上にコピーして、それらをソースとしてSpring SOPに接続しています。 そして、Metaball SOPとForce SOPを髪の毛のモーションエフェクトとして接続しています。
PlateBreak Example for TimeShift geometry node
このサンプルでは、TimeShift SOPを使って破壊シミュレーションでスローモーションのエフェクトを表現する方法を説明しています。
SimpleMetaImport Example for Meta-Loop Import VOP node
このサンプルでは、Meta-Loop Start、Meta-Loop Next、Meta-Loop Import VOPの使い方を説明しています。
入力ジオメトリ内のすべてのメタボールの密度の合計を計算し、それをComposite Network内で画像として作成しています。
See also |