前回行った衝突シミュレーションの改良版。
作業時間は、毎日やっていたわけでないがおよそ3週間くらい。
houdini car crash test 02 from shuichi sakuma on Vimeo.
備忘録もかねて今回作成した内容を書いておく。
今回作成したSOPネットワーク
(図の黄色の四角はメモ書き。後で意味がわかるようにメモ貼りまくり)
今回、車と地面との衝撃時における車ボディの一瞬の歪みの表現には
DOP内のFEM(有限要素法)とSOP内のPoint Deformの組み合わせを使用した。
(最初Lattice SOPを使ってFEMから取得したポイントで車を変形しようとしたが
うまくいかなかった)
ちなみにPoint Deform SOPはPBD(Position Based Dynamics)の導入に合わせて
Houdini14から新しく追加されたノード。
車と地面との衝突に関しては今回RBD(Rigid Body Dynamics)は使っていない。
衝突時のボディの細かな凹みには
SOP内で専用のネットワークを作成することで実現した。
凹み生成のために、Point Wrangle SOP内で二種類のノイズの周波数を変えて@Pを変動させた。
周波数を大きめにした細かいノイズをかける直前にメッシュをサブディビジョンしている。
このやり方で気をつけなければならないことは衝突時にボディを凹ませた分、
ボディが若干宙に浮いてしまうこと。
(つまりFEMは接地していても、その中の車は宙に浮いている状態)
その隙間を埋めるために車の高さ調整もSOPで行っている。
これは元のFEMのバウンディングボックスと、凹後の車のバウンディングボックスの
地面からの高さを比較し、その差分をY軸方向の移動量として高さ調整することで実現した。
また、FEMの衝突ポイントがどうやっても取得できなかったので
(SOP Solver DOP内のImpactsでも駄目、Impact Analysis DOPでも駄目、
ちなみにDom Import SOPのintrinsicアトリビュートの行列も空)
そのための専用ネットワークをSOPで組んだ。
これには、地面にScatter SOPでポイントをばら撒いておき、色情報を設定してから
AttributeTransfer SOPを使用して色情報(赤)を近傍のFEMポイントに対して
移し変えるやり方を使った。
色が変わったらその近傍で衝突したこととし、色が変わった時間を
そのポイントの衝突時間として記録した。
今回、車のガラスパーツが衝撃で割れるが、衝突の影響を前面のウィンドウガラスまで
届かせるためにトランスファーされた色情報の若干の調整も行っている。(図で赤で示した部分)
その他にも、レンダリング時に衝突時のガラス破片にボロノイエッジではない
元メッシュのエッジを表示させないために
ForEach SOP内で各破片プリミティブにDivide SOPを適用させて
余分なエッジの削除なども行っている。(下図は比較図)
一口に「変形を伴う衝突」と言っても、とても奥が深い分野であることを今回再認識した。
今後やるべきこととしては以下の二点
・FEMのパラメータ調整
・完全なプロシージャル化を行いアセット化
そういえば今日は七夕か~
特に何もない(笑)