非圧縮性流体を使った SoftBodyの挙動制御

なんか難しそうなタイトルですが、ようするにSoftBody内部を水で満たすことで動きの制御を行う方法を考えてみました。と思ったら、すでにSoftBodyにその機能がありました。体積を一定に保つように全ノードに膨張または縮小させる力を働かせるための設定とパラメータが用意されています。
なので、その機能の説明と適用した場合の動きを紹介します。

SoftBodyを布に使ってみようとしていましたが、まったくうまくいかないので、本来のSoftBodyの使い方に戻します。何百回と形状やパラメータを調整してもダメでした(心が折れました)。


解説動画

【ニコニコ動画】【物理エンジン】非圧縮性流体を使った SoftBodyの挙動制御


SoftBodyで形状を保つには

SoftBodyで物体を表現する際、形状をある程度保つようにする必要があります。以下の処理を組み合わせて、挙動の制御を行います。

リンク拘束

ノード間を接続する拘束で、SoftBodyの基本処理。この効果を強くしたり、補助用Linkを追加で形状を保つ。ただ固すぎると剛体と変わらなくなる(というより劣化剛体)。
補助用ノード、リンクで様々な状態を作り出せるが、その構造の作成が困難。専用ツールやプラグインがないと手作業では厳しい。

	//リンクの設定はマテリアルで
	btSoftBody* softbody = ...;
	btSoftBody::Material* sbmat = softbody->appendMaterial();
	// リンク強さ 距離を一定に保つ力の大きさ
	sbmat->m_kLST = cfg.BendConst.kLST;// 1.0; Linear stiffness coefficient [0,1]
	// この2つの効果はまだ未調査
	sbmat->m_kAST = cfg.BendConst.kAST;// 1.0; Area/Angular stiffness coefficient [0,1]
	sbmat->m_kVST = cfg.BendConst.kVST;// 1.0; Volume stiffness coefficient [0,1]

	// リンク追加時にマテリアル指定
	softbody->appendLink(node, node, sbmat);

	// 補助リンク追加時にも
	softbody->generateBendingConstraints(リンク距離, sbmat);
SetPose(false,true);とm_cfg.kMT

作成時の位置を保存しておき、その位置へ戻す力を各ノードに加える処理。効果は高いが、バネのように振動したり、重さを感じない挙動になる。
SoftBody全体が移動した場合、重心とノード分布から姿勢行列を求め、作成時の位置を変換する。これで全体的な移動や回転しつつ、形状を保持させる。

	//形状保持力
	// softbody作成時のノード位置を保存、その位置を保つ力を発生
	btSoftBody* softbody = ...;
	softbody->setPose( , true);
	softbody->m_cfg.kMT = 0.0~1.0; //元に戻す力の係数(大きさ)
SetPose(true,false);とm_cfg.kPR,kVC

SetPose(true,)で体積の計算が有効になる。
m_cfg.kPR:膨張力 全Faceの法線方向にkPR/体積の力
m_cfg.kVC:体積一定 全Faceの法線方向にkVC*(元の体積 – 現在の体積)の力
kPRは風船,kVCは水風船のような挙動になる。
この機能を使うことで、柔らかさと形状の保持の両立、重量感、中身が詰まった感じが出せる。

	//体積を使用した処理
	btSoftBody* softbody = ...;
	softbody->setPose(true, );
	// 体積一定にする力 
	softbody->m_cfg.kVC = ;	// 0.0; // Volume conversation coefficient [0,+inf]
	// 膨張する力
	softbody->m_cfg.kPR = ;	// 0.0; // Pressure coefficient [-inf,+inf]
その他

調べれば、他にも機能があるはず。


サンプルプログラム

動画作成用のプログラムです。
bulletのヘルパー関数を使わずに、SoftBodyを独自データ構造(mqoファイルから構築)から生成しています。zg_bullet.h/cpp struct CreateSoftBody;

“非圧縮性流体を使った SoftBodyの挙動制御” をダウンロード BulletSoftBody3.zip – 999 回のダウンロード – 334 KB


リンクなど

Bullet Physics Library

http://bulletphysics.org/

動画フォント(フリー素材)

「じゆうちょうフォント」 / 『よく飛ばない鳥』
「りいポップ角」 / 『りいのフォント』

動画作成

「ゆっくりMovieMaker」 / 『饅頭遣いのおもちゃ箱』
「AviUtl」 / 『AviUtlのお部屋』

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

認証:数字を入力してください(必須) * Time limit is exhausted. Please reload CAPTCHA.