Houdini 19.5 破壊

材質ベースの破壊入門 チュートリアル

ステップバイステップで学ぶ材質ベースの破壊入門。

On this page

Step 0 - はじめよう

このページは、このチュートリアルのはじめようのページ(チュートリアルで使用するサンプルアセットの読み込み方について説明しています)を修了していることを前提にしています。 そのサンプルアセットをまだ読み込んだことがないのであれば、まず最初にそのページに進んでください。

Step 1 - 材質の構築

Tip

サンプルアセットのパラメータペインをピン留めして常にそのアセット上のボタンが常に表示されるようにすると便利です。

  • ネットワークエディタで、サンプルアセット(rbd_mf_tutorial1)を右クリックして、 Parameters and Channels ▸ Parameters を選択して、そのノードのパラメータをフローティングウィンドウで開きます。

Linuxでは、ウィンドウマネージャによっては、そのウィンドウマネージャのUIを利用してウィンドウを他のウィンドウより常に前面に表示させることもできます。

始めるために、サンプルアセット上の 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

既に固有のnamePrimitiveアトリビュートが付いているジオメトリを用意しておくのが理想です。 既にそのような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

後でノードチェーンの下流でプロパティを適用する予定なので、ここで設定しても後で上書きされるので意味がありません。

  • RBD Material Fracture SOP には3つの入力と3つの出力があることがわかります。それらの入力/出力の上にマウスカーソルを置くと、以下の項目のどれかが表示されます:

    Geometry

    高解像度ジオメトリ。

    Constraints

    あなたが作成した何かの拘束。

    Proxy Geo

    低解像度ジオメトリ。

    Extra Vornoi Points

    Material Typeが Concrete の場合はボロノイポイント、 Glass の場合は衝撃ポイント、 Custom の場合は切断ジオメトリに追加されるポイント。

    Houdiniは、実際には 低解像度 ジオメトリをシミュレーションします。 そのシミュレーションの後に、RBD Bullet Solver SOPがそのシミュレーションした低解像度ジオメトリに合うように高解像度ジオメトリをトランスフォームさせます。 これは、それら2つのジオメトリストリーム上のnameアトリビュートを一致させることで処理しています。

  • これらのSOPsのどれかを右クリックして Geometry Spreadsheet を選択すると、ドロップダウンメニューを通じて、これらのストリームを検査することができます。

  • RBD Exploded View SOPを使ってこれらのストリームを検査することもできます。

  • 特定のストリームを検査または抜き出す方法は、そのストームの出力をNull SOPに接続することです。

  • “Output for View”フラグを使用すれば、ビューに表示させたいストリームを選択することもできます。 RBD State の時は、そのホットキーは123です。または、 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 SOPPolydoctor 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

このノードチェーンの最初のSOPはObject Merge SOPです。

パラメータ

説明

Object 1

/obj/hitter_object

単にオブジェクトレベルから球を取得して、それをヒッターとして使用していきます。

Transform

Into This Object

このパラメータを None に切り替えると、オブジェクトレベルのトランスフォームが無視されることが分かります。

この球はオブジェクトレベルでトランスフォームさせているので、それらのトランスフォームが必要なので Into This Object に戻します。

Attribute Wrangle SOP

このノードチェーンの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アトリビュートの値が重複してしまうと、予期せぬ間違った結果を招いてしまいます。 そういった理由で、このオブジェクトにはnamePrimitiveアトリビュートを追加する必要があります。

RBD Pack SOP

このノードチェーンの5番目の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 SOPFile SOPRBD I/O SOPを接続することでジオメトリをディスクに保存することができます。 ジオメトリをディスクにキャッシュ化することで、材質のどれかを再生成しない限り、それより上流のノードをクックする必要がなくなります。

ディスクに保存した方がよいと思われるノードチェーンの位置が2つあります:

  • RBD Material Fracture SOPの後。

    これは、特定のRBD Material Fracture SOPだけを変更したい場合において下流での柔軟性が良くなります。 このようにすることで、他の2つの未変更のRBD Material Fracture SOPをクックすることなく、そのRBD Material Fracture SOPのみを保存することができます。

  • RBD Material Fracture SOPsのすべてをマージした後(下図のとおり)。

    こっちの方がセットアップが若干簡単ですが、柔軟性が悪いです。

    下図では、HITTERオブジェクトをディスクにキャッシュ化しませんでした。 このオブジェクトは非常に軽量で、最良の結果が得られるようにそのVelocityの調整を続けたいと思ったからです。

Note

1フレーム だけをディスクに保存するだけで結構です。そのため、File Cacheノードを使用している場合、 Time Dependent Cache トグルをオフにしてください。 事前粉砕ジオメトリにはまだアニメーションを付けていません。そのため、2フレーム以上保存する必要はありません。

Step 5 - シミュレーション

フレーム1に進みます。私どもはシミュレーションを始める前にこのようにします。 そうすることで、タイムライン全体がクックされるのを待つ必要がありません。

Step 5 ボタンをクリックします。

これは、RBD Bullet Solver SOPを接続し、何かしらの静的ジオメトリをその4番目の入力に接続して、それを静的Collider(ここでは縦梁)として使用します。

Note

このノードは、ネットワークエディタの下の方に配置されています。 その理由は、他のSOPsを追加していくためのスペースを残すためです。

RBD Bullet Solverは、Bulletシミュレーションの実行を簡素化したDOPネットワークのラッパーです。 このネットワークの内部には、RBDソルバのセットアップを簡素化した一連のノードが入っています。 これによって、シミュレーションの構築、拘束の管理、高解像度と低解像度のジオメトリの取り扱いといった多くの面倒な手間が省かれ、さらには優れた視覚化ツールとデバッグツールにアクセスできるようになります。 他にも、ガイドシミュレーションと簡単に統合することもできます。

この新しく作成されたRBD Bullet Solver SOPのディスプレイフラグを有効にします。

プレイバーの Play Forwardボタンをクリックします。

単に壁が床に落下します。

この新しく作成されたRBD Bullet Solverのパラメータエディタで Collision タブの Ground Collision セクションにある Ground Type ドロップダウンを Ground Plane に変更します。

再度シミュレーションを再生します。

この方が若干良くなりましたが、どの材質も非常に脆くて、どれも他の材質にくっついていません。

Step 6 - 材質間の拘束 1

Note

材質の拘束について話す時、たいていの場合、それは 材質内部 の拘束(事前粉砕されたピース群をまとめて保持)、 材質間 の拘束(例えば、枠内に窓を保持)のことを指します。 材質内部の拘束のことを Intra-Material 拘束と呼びます。 異なる材質間の拘束のことを Inter-Material 拘束と呼びます。 ラテン語でIntraは“内部”、Interは“間”を意味します。 この2つの単語が似ているせいで混乱を招いてしまいますが、これらの用語はプロダクションでよく使用されるので、ここでは、これらの用語を使用することにします。

支柱を石壁に拘束する

RBD Material Fracture SOPは、材質内部拘束( Intra-Material 拘束)を作成します。 これらの拘束は、事前粉砕ジオメトリ間の接着の強度を定義します。 例えば、石壁を粉砕する際のその強度や耐性です。

これら各々のSOPは、外部で何のオブジェクトが存在しているのか知らないので、作成されている材質をどのようにお互いにくっつけるべきなのか分かりません。 そういった理由で、 Inter-Material 拘束を作成する必要があります。 例えば、石壁を支柱に拘束したいです(現実世界では、石壁は支柱にネジ留めまたは釘打ちします)。 そして、窓ガラスをその石壁に拘束したいです(現実世界では、壁の開口部に接着/ネジ留めされた枠で挟まれています)。 これらの拘束を正しく設定することが見栄えの良いシミュレーションには不可欠です。

これらの拘束を作成して設定するために、色々なSOPsを使用していきます。

Step 6 ボタンをクリックします。

これは、RBD Constraints From Rules SOPRBD Constraint Properties SOPを作成します。

1つ目のSOP(RBD Constraints From Rules)のconstraint_studs_to_drywallでは、 Group to Group オプションを使って既存グループのdrywallstudsから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 - 材質間の拘束 2

窓を石壁に拘束する

では、窓を石壁に拘束していきます。 もちろん、現実世界では、窓は枠に接着し、その枠は支柱に釘打ちします。 ここでは単純化したいので、その構成で進めます。

Step 7 ボタンをクリックします。

前のステップと同様に、RBD Constraints From Rules SOPRBD Constraint Properties SOPが作成され、材質間に新しい拘束( Inter-Material 拘束)が作成され、そのプロパティが設定されました。

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 - 材質間の拘束を調整する

支柱には既に強度(耐折損性)を定義した材質内部拘束( Intra-Material 拘束)が設定されています。 しかし、シミュレーションを試行錯誤する際にこれらの値を調整したいです。 もう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

@constraint_tag=wood_cut @constraint_tag=wood_grain

constraint_tagPrimitiveアトリビュートは、これまで木材、グラス、石壁の作成に使用した RBD Material Fracture SOPsで生成されています。 これらのタグは拘束のグループ化として作用します。 Constraint Browserは、下図のGIFアニメーションのように、簡単に拘束を検索、編集、使用することができます。

この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 コントロールのプリセットを使用する時は、そのプリセットの効果を得るために必ず目的の色々な DensityBounceFriction のパラメータを有効にしてください。

configure hitter SOP

汚れのない乾いた金属の特性を持つように打撃オブジェクトを設定しましょう。

パラメータ

Group

HITTER (メニューから選択)

Type

Metal, Default, Clean and Dry Surfaces

Density, Bounce, Friction

ON

シミュレーションのチェック

フレーム1に進み、RBD Bullet SolverReset Simulation を押してからシミュレーションを再生します。 良くなったように見えますが、まだ支柱が湿ったスパゲティのように見えます。 これは、ソフト拘束がまだ切断されていないのが原因です。

切断の閾値を調整する

木材のピースに対してRBD Bullet Solverの Break Thresholds を調整する必要があります。 Constraints タブの Break Thresholds セクションに進んで以下の設定をします:

パラメータ

説明

Group

@constraint_tag=wood_cut @constraint_tag=wood_grain

ドロップダウンメニューから、これらのグループを選択することができます。

Tip

Constraint Browser を使用すれば、これらの拘束が修正しようとしている木材パーツに属しているかどうか判断することができます。

Impact Threshold

1000

再度シミュレーションを再生します。 これで、木材が 非常に 簡単に砕けるようになりました。 Visualization タブを使用することで、その Break Thresholds の正しい値を確認することができます。

Visualizationタブの使い方

拘束が持っているImpact値(衝撃値)を確認する必要があります。 これらの値が何であるか知ることができれば、次にどこに Break Thresholds を設定するべきか決めることができます。

RBD Bullet SolverVisualization タブに進みます。

パラメータ

Constraint Geometry > False Color Mode

Impact

Inspector > Attributes

Impact

Inspector > 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になります。

以下の動画では、 ⎋ Escを押してからEnterを押してビジュアライゼーションモードに入っています。 次に5を押して検査モードに切り替え、1を押して高解像度ジオメトリを表示し、2を押して拘束表示し、3を押してプロキシジオメトリを表示し、 再度2を押して拘束を表示してから、そのジオメトリ上にマウスカーソルを置いて情報を表示しています。

Impact Threshold10000に設定することから始めましょう。 何回かシーンを再生してみて、どのような感じに見えるのか見てみましょう。 この値はおそらく低すぎます。 非常に満足のいく結果が得られるまでこの値を試行錯誤してみてください。 一部の木材は折れて、一部の木材は曲がるものの折れないような状況を模索していきます。 さらに他の拘束も調整するので、後でこれらの値を変更する必要が出てくるので、ここではあまり時間をかけないでください。

このチュートリアルに関しては、 Impact Threshold45000あたりに設定します。

Tip

デフォルトでは、ビューポート内にほぼすべてのアトリビュートが表示されます。 例えば、impactアトリビュートしか興味ない場合は、 Inspector セクションの Attributes フィールドには、デフォルトの* ^P ^pivot ^rest ^N ^scale ^orient ^xform ^pathの代わりにimpactのみを入力してください。

Step 9 - 石壁とガラスの構成

では、石壁とガラスが物理特性を持つように構成する必要があります。

Step 9 ボタンをクリックします。

これは、以下のSOPsを追加します:

これらのSOPsを調べて、材質と拘束に現実的な値を与えるためにはどのような設定がされているのかを確認してください。

シミュレーションを調整していくためのTips

To...Do this

物体が簡単に砕けるように制御する

Glue Strength を調整します。

物体が砕ける前に屈曲するようにする

Glue 拘束と Soft 拘束の両方を使用します。

弾力性を制御する

StiffnessDamping Ratio を調整します。

弾力性のある物体が実際に砕けるようにする

(上記で説明しているように)拘束(名前とタイプ)と拘束値を特定し、その Break Thresholds を調整します。

物体の粘着度を決める

RBD Configure SOPPhysical Attributes セクションを使用します。

構造に合わせてImpactを十分遠くに広がらせる

RBD Constraint PropertiesPropagation Iterations パラメータと Half Life パラメータを調整します。 詳細は、RBD Constraint Propertiesのヘルプを参照してください。

3つの出力を持ったSOPsをNull SOPに接続してからそれらの出力を個々に調べることが役立つことが多いです。

  • Geometry Spreadsheetでジオメトリを調べます。

  • ノードを中クリックして、何のアトリビュートが存在するのか確認します。

  • グループを絞り込んで、ちゃんと含めたい内容がグループに入っているのか確認します。

  • エクスプレッションを使ってジオメトリを絞り込んで、アトリビュート値が目的の値になっているのか確認します。 例えば、@strength>10000を使って、そのアトリビュート値よりも大きいジオメトリだけを表示します。

パラメータ

説明

Propagation Iterations

1

Propagation Iterations

10

引き続きシミュレーションを調整する

引き続きシミュレーションを再生して、色々な材質特性、拘束特性、切断閾値の値を調整します。

木材がまだ弾力性のあるような見た目になっていて、一部の拘束が切断されていないことに気づいているかと思います。 では、戻ってそれらの拘束を調べてみましょう。

シミュレーションを再生して、一部の木材が変な挙動になっている箇所を確認します。

前述で説明したテクニックを使って、その木材の拘束について調べます。 今回の場合では、アトリビュートを検査してそのアトリビュートを変更したいです。 RBD Bullet SolverVisualization タブの Inspector セクションにある Attributes パラメータを右クリックして Revert to Previous Value または Revert to Defaults を選択します。 これによって、頭に“キャレット文字”^が付いているアトリビュート以外のすべてのアトリビュートが表示されます。

Constraints タブの Break Thresholds セクションに進みます。 拘束の切断に使用可能な色々なアトリビュートがたくさんあることに気づくかと思います。 ここで注目すべてきアトリビュートは以下のとおりです。 色々な経験から導かれたおすすめの値も載せています。

パラメータ

説明

Angle

1

(屈曲が1度を超えたら切断)

Distance

0.2

(伸長が.2ユニット超えたら切断)

Force

OFF

Impact

45000

(Impact値が45000以上になったら切断)

Torque

5000

(回転モーメント(角速度)が5000以上になったら切断)

Tip

これらのラベル上にマウスカーソルを置くと、それらの測定に関する説明が表示されます。

Step 10 - 拘束の微調整

シミュレーションを見た後で、あなたやスーパーバイザーが“ルックはこれで良いけど、この物体はここで壊れて、あの物体はここで壊れて欲しい”と言うかもしれません。 これを調整する簡単な方法があります。

Step 10 ボタンをクリックします。

これは、以下のノードネットワークを追加します:

Transform SOP

支柱を邪魔にならない場所に移動させて、それらの支柱の選択がしやすくなるように隔離します。

Group SOPBox SOPs

拘束をグループ化できるようにします。

Note

単にジオメトリをインタラクティブに選択して拘束をグループ化することもできます。 しかし、ここで使用している方法だと他の時間で拘束に変更を加えても選択内容が変わることはないので、インタラクティブに選択するよりも堅牢です。

Group Promote SOP

上記のポイントグループをプリミティブグループに昇格させます。 境界ボックスによるグループ化はポイントに対してのみ動作するのでポイントグループを作成しましたが、Primitiveアトリビュートを修正したいのでこのようにしました。

Attribute Wrangle SOP

作成したプリミティブグループの拘束が切断しすくなるように Glue Strength を非常に低い値に設定します。

これは(上記で作成した)“wimpy”グループのstrength値を直接設定すればよいだけです:@strength=100;

Transform SOP

拘束を以前の位置に戻します。

このSOPは、上記のtransform1 SOPを選択してから右クリックで Actions ▸ Create Reference Copy を選択することで作成されています。 Invert Transformation チェックボックスを右クリックして Delete Channels を選択して上記のTransform SOPとのリンクを外してから、 Invert Transformation を有効にしています。

さらなる調整

ここでは、いくつか提案を載せています。 以下の内容を一つずつ調整して、シミュレーションにどのような影響があるのかを確認してください。 また、どのような影響があるのか確認する上で場合によってはこれらの設定を極端な値に設定してみるのも良いでしょう。

  • rbdconstraintproperties1 SOPの Glue Strength500に設定します。

  • 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 OverPrimitives に設定してi@__primid=@primnumを使用します。 2つ目のAttribute Wrangle SOPでは Run OverPoints に設定してi@__pointid=@ptnumを使用します。

ノードが追加された2つ目の箇所は、ネットワークの左下です:

ここではSort SOPが挿入されています。このSOPは上記のEnumerate SOPsで作成されたアトリビュートに基づいてジオメトリをソートします。 このようにすることで、RBD Disconnected Faces SOPはどのジオメトリに対して作用すべきかわかります。 Bulletシミュレーションによってジオメトリがゴチャ混ぜになっていましたが、この処理によってジオメトリをソートすることができます。

これで、ガラスの内側フェースは、その相対位置が RBD Disconnected Faces SOP で定義した距離閾値を超えない限り不可視になりました。

Tip

1e-06.0000001を意味します(1の前にゼロが6個あります)。

ディスクに保存

シミュレーションに満足したら、レンダリング中にライブでシミュレーションされないようにディスクに保存しておきたいことでしょう。

もちろん、単に File SOP または File Cache SOP を使用すればシミュレーションをディスクにキャッシュ化することができます。 しかし、もっと効率的な方法は、RBD I/O SOPを使用して Storage Type パラメータを“Geometry and Points”に設定することです。 これは、1フレームのRest(静止)ジオメトリと各フレームでのRBD Bullet Solverから出されたシミュレーションポイントを保存します。 そして、その1フレームのRest(静止)ジオメトリをその軽量ポイントを使ってトランスフォームさせます。 これによって、ストレージ容量とビューポートパフォーマンスの両方の観点でディスクI/Oが大幅に改善されます。 特に毎フレームでパックプリミティブを読み込むのは効率的ではありません。

デバッグ

問題

原因

シミュレーションの一部が怪しい挙動をしたり、反転したり、空中を浮遊する。

シミュレーションが“おかしな挙動をする”問題の約99%は、nameアトリビュートが見つからない/重複していることが原因です。 ジオメトリのすべてのピースには必ず固有のnameアトリビュートがなければなりません。 これによって、Bullet Solverはジオメトリの“塊”の構成がどのようになっているのかを認識することができます。 これを確認する良い方法は、シミュレーションの渡されるジオメトリに対してInfoポップアップを確認することです。 まず最初に、高解像度ジオメトリとプロキシジオメトリのnameアトリビュートの数が同じである必要があります。 次に、ジオメトリと同じ数だけ固有のnameアトリビュートが必要です。 下図の例では、2640個のパックフラグメント + 1個の球の合計2641個のジオメトリがあって、2641個の固有のnameアトリビュートがあることがわかります。

プロキシシミュレーションは問題ないように見えるものの、高解像度シミュレーションと一致しない。

上記参照。

次のステップ

それでは、あなた自身で以上のことをやってみる時間になりました。 Reset ボタンをクリックして、ゼロからシミュレーションの作成に挑戦してください。 以下にいくつかヒントを載せます:

  • 参考として、このチュートリアルの最終バージョンを別のHoudiniで開いておきましょう。

  • 打撃オブジェクトの球を他のオブジェクトに置換しましょう。

  • 壁を追加したり、既存の壁や窓に何かしらの装飾を追加しましょう。

  • Material TyeWoodRBD Material Fracture SOP のクラスタオプションを有効にして試しましょう。

  • Rigid Bodies シェルフタブのDebrisツールを使って、このシミュレーションにデブリ(瓦礫)を追加しましょう。

  • Pyroツール群を使って、このシミュレーションに粉塵を追加しましょう。

  • シミュレーションに以下の特徴を入れると、見た目が非常に良くなります:

    • べき乗則に基づいたサイズ違いのピースをうまく分布させてください。つまり、サイズを完全にランダムに分布させてはいけません。おそらく、小サイズのピースが多く、中サイズのピースが中程度、大サイズのピースが少々ある程度が良いでしょう。

    • 簡単に識別できるピースをいくつか残します。例えば、“このピースは明らかに壁の一部だ”とわかるようにします。

    • “破壊の連鎖”。つまり、すべてを1フレームで破壊しないでください。破壊は時間の経過と共に起こるはずであり、起爆後でも破壊は続きます。視聴者に楽しんでもらいましょう。

    • ディテール、スケール、バリエーション。各まとまった長さのフレーム区間と各一瞬の区間で視聴者に見せたいものを考えましょう。

      • 特に“ガラスのように粉々になった”感じの見た目にならないように注意してください。これは初心者のシミュレーションでよくある間違いです。シミュレーションは、異なる強度と異なる切断閾値を持った様々な材質で構成されているように見えなければなりません。

破壊

材質別のRBD粉砕

次のステップ

材質ベースの破壊の紹介

  • はじめよう

    ソースシーンを読み込んで、それについて見ていきましょう。

  • チュートリアル

    ステップバイステップで学ぶ材質ベースの破壊入門。