今回は、簡単な破壊エフェクトについて手順も踏まえて書いてみようと思います。
最終的にこういうのを作ります。
出来るヒトは見なくてよろしw
ここでは事前にジオメトリを破片に分割して、それをシミュレーションするという手順で進めたいと思います。
ざっくり書くと、
1:ボロノイ分割での破片の作成
2:RBD Fractureでシミュレーション
です。
1:破片の作成
まず、破壊したいオブジェクトを細かい破片に分割します。ここではboxを破片に分割しています。
(Houdiniに限らず)破片の分割には、ボロノイという分割方法を使うのが一般的かと思います。
ボロノイ分割の詳しい解説は別の機会に譲るとして、この手法をヒトコトで言うと、
「複数の点を基準にして領域を分けてゆく方法」です。
Houdiniでこのボロノイ分割をするには「Voronoi Fracture」というノードを使います。
いきなりですが、簡単にノードを組むとこうなります。
“voronoifracture”ノードの左端の入力には分割したいジオメトリを、
真ん中の入力にはボロノイ分割の基準となるpointを接続します。
(右端の入力は、内部のディテールを作成する際の深度サンプリングに使います。今回はやりません)
ボロノイによる破片の作成で大事なのでpointの分布です。
上の例ではscatterノードによるpointの配置部分です。
pointの数と分布密度で破片の大きさが決まります。
pointがたくさん集まっている部分は細かな破片が、まばらな部分は大きな破片が、といった具合です。
例えば、ジオメトリの中心にpointを沢山配置すると中心ほど破片が細かく、外に行くほど破片が大きくなります。
ここでは分かりやすく、破片とpointを両方表示しています。
中心のpoint群を動かしてみました。特に意味はありませんが、なんかおもしろい。
他にも、”point form volume”ノード等を使って、均等にpointを配置するとサイコロのような四角い破片ができます。
これで破片ができました。
次はこれを動かします。
2:破片のシミュレーション
破片が出来たら、それを使ってシミュレーションしてみます。
シェルフからネットワークを作るのが楽なので、今回はそれでやります。
破片のジオメトリを選択して、”Rigid Bodiesシェルフ”にある”RBD Fracture…”を選択します。
すると、「どんなタイプの破片オブジェクトにする?」とHoudiniが尋ねてきます。
ここでは、”RBD Packed Object”と答えておきます。
これについては、後で解説します。
すると、objの階層に”AutoDopNetwork”が1コ作られます。
これで、破片がシミュレーションされます。
地面も欲しいので、同じ”Rigid Bodiesシェルフ”にある”Ground Pla…”をクリックして、Ground Planeも作成します。
これで、破片が地面に当たって崩れるシミュレーションができました。
ここでは見やすいように破片に色をつけてます。
最終的なネットワークはこんな感じ。
めでたしめでたし。
以下、シェルフの”RBD Fracture…”について。
これを使うと、ジオメトリのプリミティブごとにRBDオブジェクトを作成しシミュレーションするネットワークを組んでくれます。
噛み砕いて言うと、物体を破片ごとに剛体シミュレーションするネットワークを組んでくれるものです。
この”RBD Fracture…”には2種類、”RBD Packed Object”と”RBD Fractured Object”が存在します。
上の作例では、”RBD Packed Object”を選びましたね。
“RBD Packed Object”は、”RBD Fractured Object”の出来ることに制限を付けて、処理を高速にしたもの、とでもいいましょうか。
H13では流体などと相互作用が出来なかったため、そういう場面では”RBD Fractured Object”を使っていましたが、H14では相互作用出来るようになったっぽいので、ますます”RBD Packed Object”を使う頻度が増えました。
以上長くなりましたが、今回はここまで!
Houdiniのバージョンは14を使用しています。
次回は破壊つながりで、徐々に崩れるシミュレーションを紹介したいと思います。
間違い等ありましたらご指摘を!
サンプルファイル
voronoifracture_003
大変申し訳ありません。
コメントが表示されなかったので、送れていないと思い、連投してしまいました。
お手数ですが、削除をお願いいたします。
北川様
お世話なっております。Houdini初心者モデラーです。
以前はアドバイスありがとうございました。なんとかイメージした絵を作れそうです。
北川さんには書籍もホームページもアドバイスも含めて大変参考にさせていただき本当に感謝です。
Houdiniとても楽しいです。
現在の進捗送付させて頂きます。
この後北川さんの書籍を参考に火花や煙を足していこうと思うのですが、一点アドバイスを頂きたい点がございます。
FBXで読み込んだパーツが複数あるモデルに複数マテリアルを付与してオブジェクトマージでRBDに使用しているのですが、オブジェクトマージした時点でマテリアルの情報が消えてしまいます。これが正しい挙動だとは思うのですが、マテリアル情報を維持したままRBDに送る事は出来るのでしょうか。合わせてRBDで出来た断面にもそれに隣接しているマテリアルを付与出来るものでしょうか。
サンプルファイルを送付させて頂きます。
(色々ツッコミどころのあるデータだと思いますがその点はご容赦下さい)
度々厚かましくて恐れ入りますが、ご教授頂けると幸いです。
■進捗動画
https://vimeo.com/341268821
■サンプルファイル
https://www.dropbox.com/s/ed2y2muh3n7akqe/Drone_Fracture_materialSample2.hipnc?dl=0
https://vimeo.com/341269313
文字で説明するのは大変なので、ファイルに手を加えたものをアップさせていただきました。
返信遅くなりましたが、ご参考までに。
https://drive.google.com/file/d/1sqxxEMOzO6szUQ3PV5LEZtI4loWA6zIP/view?usp=sharing
あとSideFXの公式に日本語フォーラムがあるので、そちらに質問しても誰かが教えてくれますよ。
https://www.sidefx.com/forum/71/
お世話になっております。
アドバイスありがとうございます。
毎回サンプルファイル提供していただき、大変恐縮です。
とても参考になりました!ありがとうございます。
2点だけお伺いしたいのですが、
①RBDの方にマテリアルが引き継がれているのは、元のSubnetWorkの方でマテリアルのノードを使用しているからでしょうか。
②大量のオブジェクトがあるFBXなどをインポートして使用した場合は、一つ一つのGeometryノードの中に1個1個マテリアルノードを接続していくのが厳しいと思うのですが、その際は何か良い方法があるのでしょうか。
恐れ入りますが、宜しくお願いいたします。
毎回お手を煩わせてしまい、大変申し訳ありません。
次回からは日本語フォーラムの方に質問させていただこうと思います。
日本語フォーラムの情報もありがとうございました。
重ね重ね御礼申し上げます。
オブジェクト(Geometry(OBJ))に割り当てられているマテリアルと、ポリゴンに割り当てられているマテリアルの違いです。
オブジェクトに適応されるマテリアルは、別オブジェクト内にObject Merge(SOP)などで、読み込んだ際は持ち込まれません。
ポリゴンに適用されるマテリアルは、別オブジェクト(OBJ)に読み込んでもポリゴン(プリミティブ)単位でひマテリアルと紐づいているので、マテリアルは適用されたままです。
ポリゴンに適用されるマテリアルは、”shop_materialpath”というPrimitiveアトリビュートによって管理されています。
この”shop_materialpath”アトリビュートを、wrangle(SOP)などを使ってプログラム的に書き換えることで、大量のマテリアルを管理することができます。
プログラムがあまり得意ではないのであれば、面倒でも一つ一つ手で設定するのが確実です。
また、Houdiniではオブジェクトの読み込みには、FBX形式はあまり使いません。
多くの場合、Alembic形式を用います。この形式では、読み込み時の設定でMaya等のグループを継承できる設定があるので、そのグループを用いてマテリアルをアサインするのが一般的かと思います。
ご回答ありがとうございます。
今後はAlembicで作成を進めます。
マテリアル情報の形状についても、初歩的な事で中々チュートリアルでも説明が無いところなので、大変参考になります。
重ねて御礼申し上げます。
ありがとうございます!お手数おかけして申し訳ありません。。
是非参考にさせていただきます!!!
初めまして。Houdini習得に向けて勉強中のHoudini初心者のモデラーです。
ビジュアルエフェクトの教科書買わせていただき、勉強させていただいております。
色々と書籍読みましたが、デザイナー的には一番イメージしやすい内容で、とても助かっております。
現在破片のシュミレーションを勉強している最中です。オブジェクトが空中で飛び散り、重力に従ってそのまま自然に落下するという絵を作成したいのですが、飛び散らせる事が出来ません。速度情報を持たせるのかなと思うのですが、実装が上手くいきません。。。
出来れば、コードなどを書かずに、ノードの組み合わせで実装できればと思うのですが、現実的でしょうか。
もし可能であれば、アドバイスを頂けますでしょうか。
恐れ入りますが、よろしくお願いいたします。
破片に初速度を設定することで、作れるのではないかと思います。
こちらの記事を参考にしてみてはいかがでしょうか?
http://nomoreretake.net/2018/12/24/houdini-inherit-velocity-rbd-packed-object/
アドバイスありがとうございます!!
サンプルデータを確認させていただきましたが、初心者の私には解読する敷居が高そうだったので、途中で挫折し、メールで直接質問させていただきました。すみません。もう一度頑張って順を追って詳細にデータを確認して、必要な部分を解読しようと思います。
ちなみに今回私が記載したURLの動画の方法だとバージョンが違うので厳しいのでしょうか。
私は現在16.5を使用しています。
すみません。参考動画のURLとなります。
https://vimeo.com/200486713
この動画の方法で、うまくいくと思いますよ。
16.5でも大丈夫だとおもいます。
なぜかこの動画通りに全く同じに作成しても飛び散ってくれずにそのまま落ちてしまいます。
速度の転送がうまくいってないのでしょうか。ノーマルの情報を速度に変換して、最初に作った破片に付与して飛び散らせているという解釈なのですが、北川さんの説明にあるように、RBDの設定をする必要があったりするのでしょうか。
簡易なシーンファイルを作ったので参考にしてください。
https://drive.google.com/open?id=1zvpSaZXpSWEoC2YJsDljAtwHBnD4Pwlw
データ拝見させていただきました。
まさにこれがやりたかったことです!!
これを基本に初速の設定等も勉強してリッチな絵を作っていこうと思います。
本当にありがとうございました。
北川様
お世話なっております。Houdini初心者モデラーです。
以前はアドバイスありがとうございました。なんとかイメージした絵を作れそうです。
北川さんには書籍もホームページもアドバイスも含めて大変参考にさせていただき本当に感謝です。
Houdiniとても楽しいです。
恐縮ですが、現在の進捗送付させて頂きます。
この後北川さんの書籍を参考に火花や煙を足していこうと思うのですが、一点アドバイスを頂きたい点がございます。
FBXで読み込んだパーツが複数あるモデルに複数マテリアルを付与してオブジェクトマージでRBDに使用しているのですが、
オブジェクトマージした時点でマテリアルの情報が消えてしまいます。これが正しい挙動だとは思うのですが、
マテリアル情報を維持したままRBDに送る事は出来るのでしょうか。合わせてRBDで出来た断面にもそれに隣接しているマテリアルを付与出来るものでしょうか。
サンプルファイルを送付させて頂きます。
(色々ツッコミどころのあるデータだと思いますがその点はご容赦下さいませ)
度々厚かましくて恐れ入りますが、ご教授頂けると幸いです。
■進捗動画
https://vimeo.com/341268821
■サンプルファイル
https://www.dropbox.com/s/ed2y2muh3n7akqe/Drone_Fracture_materialSample2.hipnc?dl=0
https://vimeo.com/341269313