On this page |
|
Step 1 - 材質の構築
Tip
今回ロードするHDAのボタンをパラメータペインで常に表示させるようにすると便利です。
方法は色々ありますが、その1つの方法は、/obj
レベルにある RBD Material Fracture Tutorial ノード(rbd_mf_tutorial1
)を右クリックして、 Parameters and Channels ▸ Parameters を選択することです。
これによってフローティングパラメータペインが表示されます。
そのペインのタイトルバーを右クリックして Always on Top を選択します。
こうすることで、このペインを他のアプリケーションの背後に隠れないようにすることができます。
まず最初に Reset ボタンを押してすべての現行ノードを削除します。
これによって、wall
オブジェクト内のwall1
Subnet SOP以外のすべてのノードが削除されます。
Step 1 ボタンを押します。
Houdiniが3つのRBD Material Fracture SOPを作成し、それらの設定を自動的に行なうので少し時間がかかります。
wall
オブジェクト内には3つの RBD Material Fracture SOP があり、それらのSOPsがどのようにセットアップされていて、どのような変更が加えられているのかを見ていきましょう。
ここでは一つ一つのパラメータを見ていくわけではなく、注目したいパラメータやデフォルトに設定されていないパラメータのみを見ていきます。
window(窓)
1つ目の RBD Material Fracture SOP は"window"という名前です。 常にSOPになにか分かりやすい名前を付けるように心がけると良いです。 他にも、ノードとそれに関係するノードを色分けしておくと、その関係性が分かりやすくなります。
Material Type
Glass
窓に適した材質を作成したいので、ここでは Glass メニューオプションを使用しました。
Fracture Namespace
window
既に固有のname
Primitiveアトリビュートが付いているジオメトリを用意しておくのが理想です。
既にそのようなname
アトリビュートを用意していれば、このSOPの Fracture Namespace トグルを有効にする必要はありません(おそらく有効にしたくないことでしょう)。
今回のケースでは、ジオメトリに何もname
Primitiveアトリビュートが付いていないので、このトグルを有効にすることで、固有の名前でname
Primitiveアトリビュートが生成されるようにして、後で他のノードと名前がかぶらないようにすることができます。
このname
アトリビュートは、Bullet Solverで使用され、どの破片が別々になっているのか、つまり、単独の破片なのか塊になった破片なのかを判断します。
何が起きているのかを確認したいので、このノードを右クリックして、 Spreadsheet を選択します。
Primitiveアトリビュートを見てみると、name
アトリビュートの値がすべて"window"で始まっていることが分かります。
Fracture Namespace トグルを無効にすると、"piece"で始まるようになったのが分かります。
Fracture per Piece
OFF
今回の場合、"piece"は1つしかありません(1枚のガラス)。そのため、これが有効だろうと無効だろうと関係ありません。
Note
ジオメトリに既にname
アトリビュートが存在していれば、このSOPが一度に同じname
アトリビュートのジオメトリの塊ごとに検査を行なうようにさせることができます。
name
アトリビュートが存在しなかった場合、このSOPは単に接続性を見て作用させる"塊"を決めます。
これに関しては"Studs(支柱)"のメモを参照してください。
Constraintsタブ
Apply Constraint Properties
OFF
後でノードチェーンの下流でプロパティを適用する予定なので、ここで設定しても後で上書きされるので意味がありません。
Note
各 RBD Material Fracture SOP には3つの入力と3つの出力があることがわかります。 それらの入力/出力の上にマウスカーソルを置くと、以下の項目のどれかが表示されます:
-
Geometry: 高解像度ジオメトリ
-
Constraints: あなたが作成した何かの拘束
-
Proxy Geo: 低解像度ジオメトリ
低解像度ジオメトリは、実際にシミュレーションされるジオメトリのことです。 シミュレーションの後に、
RBD Bullet Solver SOPがそのシミュレーションした低解像度ジオメトリに合うように高解像度ジオメトリをトランスフォームさせます。 これは、それら2つのジオメトリストリーム上の
name
アトリビュートを一致させることで処理しています。
Tips
-
これらのSOPsのどれかを右クリックして Geometry Spreadsheet を選択すると、ドロップダウンメニューを通じて、これらのストリームを検査することができます。
-
RBD Exploded View SOPを使ってこれらのストリームを検査することもできます。
-
特定のストリームを検査または抜き出す方法は、そのストームの出力を
Null SOPに接続することです。
-
"Output for View"フラグを使用すれば、ビューに表示させたいストリームを選択することもできます。 RBD State の時は、そのホットキーは1、2、3です。 または、 RBD Bullet Solver SOP を
→ Flags → Output for Viewで選択することもできます。
studs(支柱)
Material Type
Wood
この構造物の"支柱"(または"骨組")を木材にします。
Fracture Namespace
studs
木目パターンを寄りで見てください。 あなたが期待してたとおりにその木目が縦に走っていることが分かります。 Houdiniは、ジオメトリ内の繋がったピース単位(または、 Piece Attribute が有効であれば、同じアトリビュート値のピース単位)でループを走らせ、各ピースの境界ボックスの軸から粉砕の向きを決めます。 今回の場合では、これらの支柱は長くて薄いので、正しい挙動になります。
では、 Fracture per Piece をオフにしてみましょう。 これを無効にすると、このノードがクックするのに時間がかかることを覚悟してください。 非力なコンピュータを使用してるのであれば、このステップを飛ばした方が良いでしょう。
これで木目が横に走るようになったことに注目してください。これは正しくありません。 ここでは一体何が起きたのでしょうか? Fracture per Piece が有効になっていないので、Houdiniは7本の支柱を見た時に、それは穴が開いた1本の大きな木材だと考えてしまった結果、高さよりも幅の方が大きいので粉砕の向きが横になってしまいました。
では、 Fracture per Piece をオンに戻しましょう。
まず第一に、ノードがはるかに高速にクックされたことに注目してください。 第二に、その木目が適切に向いています。 これは、Houdiniがジオメトリ内の繋がった塊単位でループ処理して個々に検査しているからです。 これは Single Pass パラメータを有効にすることで確認することができ、一度に1本の支柱しか表示されていないことが分かります。
Clusterタブ
Enable Cluster
OFF
このトグルの挙動を確認したいので、RBD Exploded View SOPを追加して1番目の入力を
studs
の1番目の出力に接続して、その結果をビューポートで見てみましょう。
では、 Enable Cluster を有効にします。
クラスタ化を有効にすると、 RBD Material Fracture ノードは、いくつかの隣接ピースに同じ name アトリビュートを与えるので、それらの隣接ピースをシミュレーションした時に1つの"ピース"として見なされるようになります。 今回の場合では、クラスタ化を有効にする必要がなかったのですが、場合によっては、もっと面白い形状を表現することができます。
Enable Cluster をオフに戻します。
Tip
クラスタ化する別の方法は、Cluster SOPを使用することです。
このノードは、ジオメトリでも拘束でもどちらもクラスタ化することができます。
drywall(石壁)
Material Type
Concrete
石壁の材質を作成したいのですが、 RBD Material Fracture SOP でそれに一番近い材質がConcreteです。 後ほど、この材質が石壁の物理特性を持つように設定するつもりです。
石壁がもっと面白い形状とディテールになるようにするために、私どもは Chipping オプションと Detail オプションを有効にしました。 このチュートリアルが終わったら、これらのオプションを色々試して、切断の形状がどのように変わるのか確認すると良いでしょう。
Fracture Namespace
drywall
このオブジェクトは内部でブーリアンが行なわれていることに注意してください。 RBD Material Fracture SOP を通過した後のオブジェクトの中にアーティファクト(不良ジオメトリ)が存在すれば、 Detail タブに進んで、 Detriangulate パラメータを No Polygons または Only Unchanged Polygons に変更します。 Detriangulate オプションは、ジオメトリをNゴンに変換しますが、場合によっては、ブーリアンされたジオメトリまたは非常に複雑なジオメトリには機能しません。
上記のオプションは通常では不良ジオメトリを修復します。 しかし、それが機能しなかった場合、以下の処理を順番を色々変えて試してください:
-
閉じていないサーフェスを蓋するために Polycap SOPs を適用します。
-
Reverse SOPを使ってジオメトリを反転させます。
-
Fuse SOPや
Polydoctor SOPを試します。
-
Convex Polygons を無効、 Bricker Polygons を有効にした
Divide SOPを適用してジオメトリを細分化します(下図を参照)。 この後にもう1つ Divide SOP (デフォルト設定のまま)を適用することでジオメトリを三角形分割することができます。
上図では、Divide SOPでジオメトリがレンガ状になっているのが分かります。
Step 2 - 材質をマージする
では、 Step 2 ボタンを押してください。
すると、3つのRBD Pack SOPsと1つの
Merge SOPが作成されました。
これらの RBD Pack ノードは、単に3つのジオメトリストリームをマージできるようにそれらをパック化しているだけです。
後ほどすぐにそれらをアンパックするつもりです。
Step 3 - 打撃オブジェクトを追加
単純なオブジェクトを"ヒッター"として追加していきます。 もちろん、RBDシミュレーションと相互作用させる方法は無限にあります。 例えば、Velocityを持ったオブジェクト(s)を他のオブジェクトに当てたり、オブジェクトにキーフレームを打ったり、オブジェクトを落下させたり、フォースを使ったりなどです。 このチュートリアルでは、ランダムにオブジェクトに何かしらのVelocityを与えてそのオブジェクトを壁に激突させます。
Step 3 ボタンを押します。
このノードネットワークを調べてみましょう。
Object Merge
このノードチェーンの最初のSOPはObject Merge SOPです。
Object 1
/obj/hitter_object
単にオブジェクトレベルから球を取得して、それをヒッターとして使用していきます。
Transform
Into This Object
このパラメータを None に切り替えると、オブジェクトレベルのトランスフォームが無視されることが分かります。
この球はオブジェクトレベルでトランスフォームさせているので、それらのトランスフォームが必要なので Into This Object に戻します。
Attribute Wrangle
このノードチェーンの2番目のSOPはAttribute Wrangle SOPです。
以下のVEXコードを使用してオブジェクトにVelocityを追加しています:
v@v=set(0,0,-35);
ここでは、球を壁に激突させて破壊させたいのでZ方向に何かしらのVelocityを追加しています。
Tip
このノードを中クリックすると、現在のv
アトリビュートを確認することができます。
他にもノードを右クリックして Geometry Spreadsheet を選択すれば、そのポイントの実際のVelocity値を検査することができます。
Houdiniアーティストとしては、アトリビュート値を検査/確認するのにこれらのテクニックを使用する頻度が多いです。
Tip
Point Wrangle SOP の代わりにPoint Velocity SOPを使用することもできます。
Group SOP
このノードチェーンの3番目のSOPはGroup SOPです。
ここでは、このオブジェクトのグループ名を"HITTER"にしています。 すぐに識別可能なグループ名を付けておけば、後でそのグループが非常に扱いやすくなります。
Name SOP
このノードチェーンの4番目のSOPはName SOPです。
Name
hitter
Bulletソルバは、name
アトリビュートを介してオブジェクトを扱います。
各 RBDオブジェクト の名前は固有である必要があります。
name
アトリビュートの値が重複してしまうと、予期せぬ間違った結果を招いてしまいます。
そういった理由で、このオブジェクトにはname
Primitiveアトリビュートを追加する必要があります。
RBD Pack
このノードチェーンの4番目のSOPはRBD Pack SOPです。
さきほどのName SOPの出力を
RBD Pack SOPの1番目と3番目の入力に接続しました。
これらの入力の上にマウスカーソルを置くと、このSOPで必要な内容を確認することができます。
今回の場合では、入力には(左から右の順で)以下の内容が必要です:
-
Geometry: 高解像度ジオメトリ
-
Constraints: あなたが作成した任意の拘束(今回は、なし)
-
Proxy Geo: 低解像度ジオメトリ
今回の場合では、高解像度ジオメトリと低解像度ジオメトリが同じなので、同じジオメトリを両方の入力に接続しています。
あなたのネットワークが下図のようになっているはずです:
Step 4 - アンパック
Step 4 ボタンを押します。
これは、引き続きネットワークの調整ができるようにするためにRBD Unpack SOPを追加します。
Step 4a - ディスクに保存
このセクションは任意ですが、推奨します。 RBD Material Fracture ノードを使って材質を作成した後にジオメトリをディスクに保存することをお勧めします。 材質の粉砕の処理時間は長くなってしまうので、ディスクに保存することでファイルを開く度にこれらのノードがクックを終えるのを待つ必要がなくなります。
今回の場合では、ノードチェーンにFile Cache SOP、
File SOP、
RBD I/O SOPを接続することでジオメトリをディスクに保存することができます。
ジオメトリをディスクにキャッシュ化することで、材質のどれかを再生成しない限り、それより上流のノードをクックする必要がなくなります。
ディスクに保存した方がよいと思われるノードチェーンの位置が2つあります:
-
これは、特定のRBD Material Fracture SOPだけを変更したい場合において下流での柔軟性が良くなります。 このようにすることで、他の2つの未変更のRBD Material Fracture SOPをクックすることなく、そのRBD Material Fracture SOPのみを保存することができます。
-
RBD Material Fracture SOPsのすべてをマージした後(下図のとおり)。
こっちの方がセットアップが若干簡単ですが、柔軟性が悪いです。
Note
下図では、HITTERオブジェクトをディスクにキャッシュ化しませんでした。 このオブジェクトは非常に軽量で、最良の結果が得られるようにそのVelocityの調整を続けたいと思ったからです。
Note
1フレーム だけをディスクに保存するだけで結構です。 事前粉砕ジオメトリにはまだアニメーションを付けていません。
Step 5 - シミュレーション
-
フレーム1に進みます。私どもはシミュレーションを始める前にこのようにします。 そうすることで、タイムライン全体がクックされるのを待つ必要がありません。
-
Step 5 ボタンを押します。
これは、
RBD Bullet Solver SOPを接続し、何かしらの静的ジオメトリをその4番目の入力に接続して、それを静的Collider(ここでは縦梁)として使用します。
Note
このノードは、ネットワークエディタの下の方に配置されています。 その理由は、他のSOPsを追加していくためのスペースを残すためです。
RBD Bullet Solverは、Bulletシミュレーションの実行を簡素化したDOPネットワークのラッパーです。 このネットワークの内部には、RBDソルバのセットアップを簡素化した一連のノードが入っています。 これによって、シミュレーションの構築、拘束の管理、高解像度と低解像度のジオメトリの取り扱いといった多くの面倒な手間が省かれ、さらには優れた視覚化ツールとデバッグツールにアクセスできるようになります。 他にも、ガイドシミュレーションと簡単に統合することもできます。
-
この新しく作成された
RBD Bullet Solver SOPのディスプレイフラグを有効にします。
-
プレイバーの再生ボタンを押します。
単に壁が床に落下します。
-
この新しく作成された
RBD Bullet Solverのパラメータエディタで Solver タブの Ground サブタブにある Add Ground Plane パラメータを Ground Plane に設定します。
-
再度シミュレーションを再生します。
この方が若干良くなりましたが、どの材質も非常に脆くて、どれも他の材質にくっついていません。
Step 6 - 材質間の拘束 I
支柱を石壁に拘束する
RBD Material Fracture SOPsは、 内部材質 拘束を作成しています。 これらの拘束は、事前粉砕ジオメトリ間の接着の強度を定義しています。 例えば、石壁を粉砕する際のその強度や耐性です。
これらのSOPsそれぞれは、外部で何のオブジェクトが存在しているのか知らないので、作成されている材質をどのようにお互いにくっつけるべきなのか分かりません。 そういった理由で、 それらの 内部材質 間を拘束する必要があります。 例えば、石壁を支柱に拘束したいです(現実世界では、石壁は支柱にネジ留めまたは釘打ちします)。 そして、窓ガラスをその石壁に拘束したいです(現実世界では、壁の開口部に接着/ネジ留めされた枠で挟まれています)。 これらの拘束を正しく設定することが見栄えの良いシミュレーションには不可欠です。
これらの拘束を作成して設定するために、色々なSOPsを使用していきます。
Step 6 ボタンを押します。
これは、RBD Constraints From Rules SOPと
RBD Constraint Properties SOPを作成します。
1つ目のSOP(RBD Constraints From Rules)の
constraint_studs_to_drywall
では、 Group to Group オプションを使って既存グループのdrywall
とstuds
からSTUDS_TO_WALL
という名前のグループを作成しています。
Group Name
STUDS_TO_WALL
Groups
Group to Group
Group 1
drywall
Group 2
studs
2つ目のSOP(RBD Constraint Properties)では、単にそれらの拘束の色を黄色に設定し、既存の拘束を Glue 拘束に、その強度を
10,000
に設定しています。
RBD Constraint From Rules SOPを作成した後はそれらの拘束をここで制御できることを知ってください。
ビューポートでこのSOPを表示してみると、拘束が黄色で表示されているのが分かります。
Step 7 - 材質間の拘束 II
窓を石壁に拘束する
では、窓を石壁に拘束していきます。 もちろん、現実世界では、窓は枠に接着し、その枠は支柱に釘打ちします。 ここでは単純化したいので、その構成で進めます。
Step 7 ボタンを押します。
前のステップと同様に、RBD Constraints From Rules SOPと
RBD Constraint Properties SOPが作成され、新しい材質間拘束が作成され、そのプロパティが設定されました。
RBD Constraints From Rules SOPでは、新しい拘束と固有のグループ(今回は
WINDOW_TO_DRYWALL
)が作成されています。
これで以下の構文を使って2つのグループを特定できるようになりました:
@name=window*
and @name=drywall*
これは、name
アトリビュート値が"window"で始まっているものがこのセクションで含まれ、且つ、name
アトリビュート値が"drywall"で始まっているものがこのセクションで含まれることを意味します。
2つ目のSOP(RBD Constraint Properties)では、再度デフォルトの Glue 拘束を設定しているだけです。
シミュレーションを確認
シミュレーションを再生してください。
明らかに良くなったように見えますが、まだまだ改善の余地があります。 以下は、もっと良くするためのアイデアをいくつか載せています:
-
支柱を床に"釘打ち"するべきです。今は摩擦がないので、地面とまったく相互作用しません。
-
ガラスはさほど簡単には砕けません。
-
打撃オブジェクト(HITTER)はもっと強い力が必要です。
-
支柱はガラスのように砕けます。砕ける前に屈曲する方が良いでしょう。
-
石壁でも同じです。砕ける前に屈曲する方が良いでしょう。
-
一部の支柱は真っ二つに折れた方が見た目が良いでしょう。
Step 8 - 内部材質拘束を調整する
支柱には既に強度(耐折損性)を定義した内部材質拘束が設定されています。
しかし、シミュレーションを試行錯誤する際にこれらの値を調整したいです。
もう1つRBD Constraint Properties SOPを使用することで、この調整を行なうことができます。
Step 8 ボタンを押します。
これは、さらに1つのRBD Constraint Properties SOPと2つの
RBD Configure SOPsを接続します。
RBD Configure SOP は、RBDオブジェクトセット別に個々にプロパティをセットアップすることができます。
このSOPの Physical Attributes コントロールには、技術書に書かれているような値が事前に定義された密度、摩擦係数、跳ね返り係数の設定がたくさんあるので非常に便利です。
そのため、物理的に現実的な値から始めて、粉砕の設定を進めることができます。
詳細は、このノードのドキュメントを参照してください。
studs_constraint_tweak
SOP
Constraint Group
wood_cut wood_grain
これらのグループは、RBD Material Fracture SOPによって作成されています。
このSOP内に存在するグループを知りたいのであれば、3番目の出力を右クリックして、そのInfoポップアップでそれらのグループを確認することができます。
このSOPでは、 Glue 拘束が切断された時に ソフト (バネ)拘束に切り替わるように拘束を調整しています。 これによって、木材が砕ける前に屈曲するような効果が得られます。
make_bottom_of_studs_non_active
SOP
支柱の中から2つの支柱を床に"釘打ち"するためにRBD Configure SOPも追加しています。
これは、その2つの支柱の底面を非アクティブにすることで処理されています。
これらの非アクティブなピースはシミュレーション内でそのままコリジョンオブジェクトとして作用し、それらのピース自体がシミュレーションされなくなります。
Group
@name=studs*
Active
0
Use Bounds
ON
Physical Attributes
Wood, Pine, Dry and Clean Surfaces
Density, Bounce, Friction
ON
Note
Physical Attributes コントロールのプリセットを使用する時は、必ず Density 、Bounce 、 Friction を有効にしてください。 そうしないと、そのプリセットの効果はありません。
configure hitter
SOP
汚れのない乾いた金属の特性を持つように打撃オブジェクトを設定しましょう。
Group
HITTER
(メニューから選択)
Type
Metal, Default, Clean and Dry Surfaces
Density, Bounce, Friction
ON
シミュレーションのチェック
フレーム1に進み、RBD Bullet Solverの Reset Simulation を押してからシミュレーションを再生します。
良くなったように見えますが、まだ支柱が湿ったスパゲティのように見えます。
これは、ソフト拘束がまだ切断されていないのが原因です。
切断の閾値を調整する
木材のピースに対してRBD Bullet Solverの Breaking Thresholds を調整する必要があります。 Breaking Thresholds タブに進んで以下の設定をします:
Group
wood_cut wood_grain studs
好みに応じてドロップダウンメニューからでもこれらのグループを選択することができます。
Impact Threshold
1000
再度シミュレーションを再生します。 これで、木材が 非常に 簡単に砕けるようになりました。 Visualize タブを使用することで、その Breaking Thresholds の正しい値を確認することができます。
Visualizeタブの使い方
拘束が持っているImpact値(衝撃値)を確認する必要があります。 これらの値が何であるか知ることができれば、次にどこに Breaking Thresholds を設定するべきか決めることができます。
RBD Bullet Solverの Visualize タブに進みます。
False Color Mode
Impact
Attributes
Impact
Float Precision
2
シミュレーションのフレーム40あたりに進みます。
RBD Bullet Solver が選択されている状態でビューポート内でEnterを押すと、そのRBD Bullet Solverのビジュアライゼーションモードに入ることができます。
ビューポートの左上にシーン内のImapact(衝撃)の範囲を示した疑似カラーグラフが表示されているはずです。
では、ビューポート内で5キーを押しましょう。
これによってインスペクター(検査モード)に切り替わります。
シミュレーション上にマウスカーソルを置きます。
そのマウスカーソル下のピースのname
アトリビュートが表示されているはずです。
では、ビューポート内で2キーを押しましょう。 これによって、 Constraint Viewing モードに切り替わります。 数字キーが対応しているモードは以下のとおりです:
-
1 - Geometry (high-res) View
-
2 - Constraint View
-
3 - Proxy Geometry
木材のピースを支えている拘束のImpact値を確認することができるようになりました。
シーンによっては、これらの値の範囲は10,000
から50,000
になります。
Impact Threshold を10000
に設定することから始めましょう。
何回かシーンを再生してみて、どのような感じに見えるのか見てみましょう。
この値はおそらく低すぎます。
非常に満足のいく結果が得られるまでこの値を試行錯誤してみてください。
一部の木材は折れて、一部の木材は曲がるものの折れないような状況を模索していきます。
さらに他の拘束も調整するので、後でこれらの値を変更する必要が出てくるので、ここではあまり時間をかけないでください。
このチュートリアルに関しては、 Impact Threshold を45000
あたりに設定します。
Step 9 - 石壁とガラスの構成
では、石壁とガラスが物理特性を持つように構成する必要があります。
Step 9 ボタンを押して以下のSOPsを追加します:
-
RBD Constraint Properties SOP:
drywall_constraints_tweak
-
RBD Constraint Properties SOP:
glass_constraints_tweak
-
RBD Configure SOP:
glass_tweak
これらのSOPsを調べて、材質と拘束に現実的な値を与えるためにはどのような設定がされているのかを確認してください。
シミュレーションを調整していくためのTips
To... | Do this |
---|---|
物体が簡単に砕けるように制御する |
Glue Strength を調整します。 |
物体が砕ける前に屈曲するようにする |
Glue 拘束と Soft 拘束の両方を使用します。 |
弾力性を制御する |
Stiffness と Damping Ratio を調整します。 |
弾力性のある物体が実際に砕けるようにする |
(上記で説明しているように)拘束(名前とタイプ)と拘束値を特定し、その Breaking Thresholds を調整します。 |
物体の粘着度を決める |
|
構造に合わせてImpactを十分遠くに広がらせる |
|
3つの出力を持ったSOPsをNull SOPに接続してからそれらの出力を個々に調べることが役立つことが多いです。
-
Geometry Spreadsheetでジオメトリを調べます。
-
ノードを中クリックして、何のアトリビュートが存在するのか確認します。
-
グループを絞り込んで、ちゃんと含めたい内容がグループに入っているのか確認します。
-
エクスプレッションを使ってジオメトリを絞り込んで、アトリビュート値が目的の値になっているのか確認します。 例えば、
@strength>10000
を使って、そのアトリビュート値よりも大きいジオメトリだけを表示します。
Propagation Iterations
1
Propagation Iterations
10
引き続きシミュレーションを調整する
引き続きシミュレーションを再生して、色々な材質特性、拘束特性、切断閾値の値を調整します。
木材がまだ弾力性のあるような見た目になっていて、一部の拘束が切断されていないことに気づいているかと思います。 では、戻ってそれらの拘束を調べてみましょう。
シミュレーションを再生して、一部の木材が変な挙動になっている箇所を確認します。
前述で説明したテクニックを使って、その木材の拘束について調べます。
今回の場合では、アトリビュートを検査してそのアトリビュートを変更したいです。
RBD Bullet Solverの Visualize タブにある Attributes パラメータを右クリックして Revert to Previous Value または Revert to Defaults を選択します。
これによって、頭に"キャレット文字"^が付いているアトリビュート以外のすべてのアトリビュートが表示されます。
Constraints タブの Breaking Thresholds サブタブに進みます。 拘束の切断に使用可能な色々なアトリビュートがたくさんあることに気づくかと思います。 ここで注目すべてきアトリビュートは以下のとおりです。 色々な経験から導かれたおすすめの値も載せています。
-
Angle -
1
- (屈曲が1
度を超えたら切断) -
Distance -
0.2
(伸長が.2
ユニット超えたら切断) -
Force -
OFF
-
Impact -
45000
(Impact値が45000
以上になったら切断) -
Torque -
5000
(回転モーメント(角速度)が5000
以上になったら切断)
Tip
これらのラベル上にマウスカーソルを置くと、それらの測定に関する説明が表示されます。
Step 10 - 拘束の微調整
シミュレーションを見た後で、あなたやスーパーバイザーが"ルックはこれで良いけど、この物体はここで壊れて、あの物体はここで壊れて欲しい"と言うかもしれません。 これを調整する簡単な方法があります。
Step 10 ボタンを押します。
これは、以下のノードネットワークを追加します:
支柱を邪魔にならない場所に移動させて、それらの支柱の選択がしやすくなるように隔離します。
拘束をグループ化できるようにします。
Note
単にジオメトリをインタラクティブに選択して拘束をグループ化することもできます。 しかし、ここで使用している方法だと他の時間で拘束に変更を加えても選択内容が変わることはないので、インタラクティブに選択するよりも堅牢です。
上記のポイントグループをプリミティブグループに昇格させます。 境界ボックスによるグループ化はポイントに対してのみ動作するのでポイントグループを作成しましたが、Primitiveアトリビュートを修正したいのでこのようにしました。
作成したプリミティブグループの拘束が切断しすくなるように Glue Strength を非常に低い値に設定します。
これは(上記で作成した)"wimpy"グループのstrength
値を直接設定すればよいだけです:@strength=100;
。
拘束を以前の位置に戻します。
このSOPは、上記のtransform1
SOPを選択してから右クリックで Actions ▸ Create Reference Copy を選択することで作成されています。
Invert Transformation チェックボックスを右クリックして Delete Channels を選択して上記のTransform SOPとのリンクを外してから、 Invert Transformation を有効にしています。
さらなる調整
ここでは、いくつか提案を載せています。 以下の内容を一つずつ調整して、シミュレーションにどのような影響があるのかを確認してください。 また、どのような影響があるのか確認する上で場合によってはこれらの設定を極端な値に設定してみるのも良いでしょう。
-
rbdconstraintproperties1 SOPの Glue Strength を
500
に設定します。 -
rbdbulletsolver1 SOP:
Step 11 - マテリアルの追加
Step 11 ボタンを押します。
これは、ネットワークにマテリアルを追加します。 ここでは詳しく触れないので、ご自由にこのネットワークを色々と見てください。
Step 12 - ガラスの調整
フレーム1に進んだら、シーンをレンダリングしてみましょう(ガラスの寄りのcam2
でレンダリング)。
窓ガラスが視覚的に粉砕する前に割れているように見えることに気づくかと思います。
もちろん、すべてのジオメトリが事前に粉砕されているからなのですが、視聴者にはバレたくありません。
ガラスが割れて見える原因は、ガラスが透明性と屈折性を兼ね備えているからです。 これは、割れたガラスの内側エッジが見えることを意味し、レンダリング時にその内側エッジが光を屈折させて拡散させます。 ガラスが粉砕していないように見せるには、この内側エッジが表示されないように隠す必要があります。
Step 12 ボタンを押します。
これは、2つの箇所でノードを追加します。 1つ目の箇所は、ネットワークの左上です。
RBD Connected Faces SOPは、繋がった内側フェースに関する情報を格納するので、それらのフェースが次で説明する処理によって分離されたかどうかを判断するのに役立ちます。
2つの
Enumerate SOPsは、選択したグループ内の各ポイントまたはプリミティブ上に連番が入ったアトリビュートを設定します(詳細は、このノードのヘルプを参照してください)。
後ほど、下流のノードがどのジオメトリに対して作用すべきかわかるようにするために、この情報を使ってジオメトリをソートしていきます。
Note
2個のAttribute Wrangle SOPsでも、これら2つのEnumerate SOPsと同じ結果を出すことができます。
1つ目のAttribute Wrangle SOPでは Run Over を Primitives に設定して
i@__primid=@primnum
を使用します。
2つ目のAttribute Wrangle SOPでは Run Over を Points に設定してi@__pointid=@ptnum
を使用します。
ノードが追加された2つ目の箇所は、ネットワークの左下です:
ここではSort SOPが挿入されています。このSOPは上記の
Enumerate SOPsで作成されたアトリビュートに基づいてジオメトリをソートします。
このようにすることで、
RBD Disconnected Faces SOPはどのジオメトリに対して作用すべきかわかります。
Bulletシミュレーションによってジオメトリがゴチャ混ぜになっていましたが、この処理によってジオメトリをソートすることができます。
これで、ガラスの内側フェースは、その相対位置が RBD Disconnected Faces SOP で定義した距離閾値を超えない限り不可視になりました。
Tip
1e-06
は.0000001
を意味します。
ディスクに保存
シミュレーションに満足したら、レンダリング中にライブでシミュレーションされないようにディスクに保存しておきたいことでしょう。
もちろん、単に File SOP または File Cache SOP を使用すればシミュレーションをディスクにキャッシュ化することができます。
しかし、もっと効率的な方法は、RBD I/O SOPを使用して Storage Type パラメータを"Geometry and Points"に設定することです。
これは、1フレームのRest(静止)ジオメトリと各フレームでのRBD Bullet Solverから出されたシミュレーションポイントを保存します。
そして、その1フレームのRest(静止)ジオメトリをその軽量ポイントを使ってトランスフォームさせます。
これによって、ストレージ容量とビューポートパフォーマンスの両方の観点でディスクI/Oが大幅に改善されます。
特に毎フレームでパックプリミティブを読み込むのは効率的ではありません。
次のステップ
それでは、あなた自身で以上のことをやってみる時間になりました。 Reset ボタンを押して、ゼロからシミュレーションの作成に挑戦してください。 以下にいくつかヒントを載せます:
-
参考として、このチュートリアルの最終バージョンを別のHoudiniで開いておきましょう。
-
打撃オブジェクトの球を他のオブジェクトに置換しましょう。
-
壁を追加したり、既存の壁や窓に何かしらの装飾を追加しましょう。
-
Material Tye が Wood の RBD Material Fracture SOP のクラスタオプションを有効にして試しましょう。
-
Rigid Bodies シェルフタブの
Debrisツールを使って、このシミュレーションにデブリ(瓦礫)を追加しましょう。
-
Pyroツール群を使って、このシミュレーションに粉塵を追加しましょう。
-
シミュレーションに以下の特徴を入れると、見た目が非常に良くなります:
-
べき乗則に基づいたサイズ違いのピースをうまく分布させてください。つまり、サイズを完全にランダムに分布させてはいけません。おそらく、小サイズのピースが多く、中サイズのピースが中程度、大サイズのピースが少々ある程度が良いでしょう。
-
簡単に識別できるピースをいくつか残します。例えば、"このピースは明らかに壁の一部だ"とわかるようにします。
-
"破壊の連鎖"。つまり、すべてを1フレームで破壊しないでください。破壊は時間の経過と共に起こるはずであり、起爆後でも破壊は続きます。視聴者に楽しんでもらいましょう。
-
ディテール、スケール、バリエーション。各まとまった長さのフレーム区間と各一瞬の区間で視聴者に見せたいものを考えましょう。
-
特に"ガラスのように粉々になった"感じの見た目にならないように注意してください。これは初心者のシミュレーションでよくある間違いです。シミュレーションは、異なる強度と異なる切断閾値を持った様々な材質で構成されているように見えなければなりません。
-
-