630 likes | 700 Views
実時間物理シミュレーション技術 . 東京工業大学精密工学研究所 長谷川晶一. 内容. 物理シミュレーションの意義 なぜ,今物理シミュレーションなのか? 物理シミュレーションでできること シミュレータの特徴と選び方 接触力計算法,高速化法 制御 シミュレータ内の物体の動かし方 デモ 我々が開発している物理シミュレータ付き VR 開発環境 Springhead と力覚インタフェース SPIDAR のデモ. なぜ物理シミュレーションが必要か?. 入力に対する反応の多様さ →ゲーム世界の多様さ・楽しさ 入力の進化
E N D
実時間物理シミュレーション技術 東京工業大学精密工学研究所 長谷川晶一
内容 • 物理シミュレーションの意義 • なぜ,今物理シミュレーションなのか? • 物理シミュレーションでできること • シミュレータの特徴と選び方 • 接触力計算法,高速化法 • 制御 • シミュレータ内の物体の動かし方 • デモ • 我々が開発している物理シミュレータ付きVR開発環境Springheadと力覚インタフェースSPIDARのデモ
なぜ物理シミュレーションが必要か? • 入力に対する反応の多様さ →ゲーム世界の多様さ・楽しさ • 入力の進化 • アナログパッド,画像,力覚 → 選択肢の増加 • たくさんの反応を用意しなければならない • 従来の延長 場合分けの爆発 たくさんの手間と時間 • シミュレーション 自動的に多様でリアルな反応 • 従来の新技術と同じこと • 多量の2次元画像 → 3DCG • ストーリの分岐 → 束構造に
物理シミュレーションが役立つ例 • 動きの生成 例:歩行 • シミュレーションなし: 足の動きと体の動きを別々に計算 • シミュレーションあり: 足を動かすと自然と体が動く • 当たり判定 • なし: 当たり判定専用計算 • あり: ポリゴンモデルの接触位置が毎ステップ求まる • ダメージ計算 • なし: 当たったもの,当たり方毎に値を用意 • あり: 加わった力の大きさからダメージを計算 • 効果音 • なし: イベントごとに音を用意 • あり: 加わった力,材質から自動的に音を発生
物理シミュレーションの役割 • ゲーム世界の物体が現実世界と同様に自律的に動く • 計測と制御 • 従来のゲームでも物理は使われていた? • 従来は,特別に,物理法則を作りこんでいた. • 物理シミュレータでは,物体はすべて物理法則にしたがう.
物理シミュレータを使うには • 物理シミュレータの中身を知る • 物理シミュレータの選定 • 自分のゲームでは何が大事か? • Havok, MathEngine? (商用), Tokamak(無料) • Open Dynamics Engine, Springhead (オープンソース) • パフォーマンスを引き出す • スピードと精度のトレードオフ • 精度同士のトレードオフ • ボトルネックの特定
物理シミュレーションとは • 物理法則(現実世界)は微分方程式で記述できる • たとえば • シミュレーションは微分方程式の数値解の計算 質点の運動 剛体の運動 流体の運動 運動方程式: f m 差分方程式にすると: x … 順番に求めて行く: x(Dt) x(2Dt) x(0)
剛体運動のシミュレーション • 剛体の運動の話だけにします. • 剛体 • 硬いもの,変形しないもの • 剛体だと考えてよいものが多い • 積み木,ボール,ロボット,人体・・・ • 剛体でないもの • スポンジ,粘土,水・・・
剛体の運動 m: 質量I: 慣性テンソルf: 外力 v: 速度 ω:角速度 (すべて絶対座標系) 運動方程式 ならば,速度一定・角運動量一定
剛体に働く力 • 重力→ f=mg… 定数 • バネ→ f=kx… 位置に比例 • 拘束力 • 力の大きさは不明 • 剛体同士の位置・速度関係が決まっている • 蝶番:2物体の相対位置が一定 • 抗力:2物体が互いに侵入しない • 静止摩擦力:物体が滑らない • 拘束力の計算が難しい kx mg fn ft
拘束力の求め方 • 例:球関節の拘束. • 2物体が 点pAと点pBで繋がっている • 拘束の式: pA =pB • この式を満たすように,関節に働く力を求める • 解析法:運動方程式と拘束の式を連立させて解く • David Baraff 89-93など • Havok,Tokamak, Open Dynamics Engine • ペナルティ法:拘束違反に応じた力を加える • 昔からいろいろな用途に使われてきた • Springhead • 接触判定時に拘束違反の量(侵入量)を調べる必要がある B pB pA A
解析法1(関節) B 拘束: f rB A pB pA rA 運動方程式: 計算量はo(n3)
B fn pB pA A 0 -a/b f 解析法2(抗力) 拘束: 運動方程式: 抗力は,反発だけ: これを満たす f を見つける→線形計画法,2次計画法・・・ 利点: 物体同士が侵入しない. 欠点: 遅い,跳ね返り係数を考慮していない.
解析法3(摩擦力) • クーロンの摩擦モデル 拘束: 運動方程式: B fN 抗力は,反発力: 摩擦力の条件: fS A 場合分けを無くすため とすることが多い
. 侵入量 d,相対速度 d ペナルティ法(抗力) • 拘束を解かない. • 拘束を侵した分だけ罰(ペナルティ)として力を加える. • 繰り返すうちに拘束が満たされる...はず. • 力が直接決まるので,計算量はo(n) • 接触部にバネとダンパを入れたと考えられる バネ ダンパ 利点: 高速,跳ね返り係数を考慮できる. 欠点: 物体同士が多少侵入してしまう.
ペナルティ法(摩擦力) • 静止摩擦:ずれに比例した力を加える • 接触の履歴を利用 • クーロンの摩擦モデルをそのまま利用できる 静止摩擦 動摩擦 静止摩擦
ペナルティ法(面接触) • 面で接触する場合 • 力は接触部分全体から発生 • 正確な接触力の計算 • 分布バネダンパモデルを考える • 発生する力を接触部全体について積分 • 意外と簡単な式になる • 解析法に比べ,とくに摩擦力が正確 • 接触部分の形を求める必要
計算量と高速化 • ここまでで,物理の話は終わりです. • 関節を持つ剛体 • 剛体同士の接触のシミュレーションができるようになりました. • ここからは,リアルタイム動作に必要な,計算量と高速化について話します.
解析法の計算量と接触数 接触している 関節で繋がれる 多物体が 場合多くの拘束が働く. f2n f1n 行列Aの次元=抗力 fi の数 方程式を解くので,行列の次数nに対して,計算量はo(n3) 立方体の面接触1つ:4次元 10個つむと:40次元
解析法の高速化 • Aを早く解く工夫 • ODEの場合 • 巨大な行列Aを作らず,2物体単位で計算する • 繰り返し計算する • 繰り返し回数が少ないと精度が落ちる (ペナルティ法に近い) 巨大行列Aを解いた場合 2体単位で,繰り返し 解く場合 Open Dynamics Engineのドキュメントより
構造を利用した,解析法の高速化 • Articulated Body • 多数の剛体を関節でつないだもの • 動物や人間の体,ロボットなど • 構造に特徴 • 剛体が輪になっていない→木構造 輪になっている例 全部繋がっている例
3 D C 2 B 1 A 解析法で求めると... Aの運動方程式: 1の拘束の式: Bの・・・・・・・・・・・・・・・・ 並べてみると 0だらけ,すかすか,sparse行列 普通に解くより早い方法があるのでは?
Featherstoneの方法 • 巨大行列を普通に解かない • 根から葉に向かって1つずつ拘束力を求める • とても速い O(n)
D D 3 3 C C 2 2 B B 1 1 A A Featherstoneの方法 • 全体を一つの剛体だと考え,加速度を求める. • 剛体Aの加速度が求まる • AとBから先の2つの剛体と考え • 関節1に働く力を求める. • Bの加速度を求める • BとCから先 〃
3 D C 2 B 1 A Featherstoneの方法 • 先ほどのsparse行列で考えると, 1. 葉から根に向かってMを合成 2.加速度 を求める.
Featherstoneの方法 3.根から葉に向かって, を求める
60 ペナルティ法(Springhead) 解析法(Open Dynamics Engine) 50 40 計算時間[ms] 30 20 10 0 0 5 10 15 ブロック数 ペナルティ法は高速 バネダンパモデルから力が求まる
解析法とペナルティ法 • 解析法 • 1ステップで拘束と評価関数を満たす力を計算ステップが大きく取れる.1ステップの計算は多い. • 摩擦や跳ね返り係数などは難しい→ 動きの精度低 or 評価関数化難,計算量増大 • 繰り返し計算による高速化:1ステップに何度も計算 • ペナルティ法 • バネダンパモデル→1ステップの計算は速い. • 侵入量∝Δt なので,ステップ数が多くなる. • 摩擦・跳ね返り係数なども簡単にモデル化できる. • シミュレーション法・高速化法の特性を考慮して,シミュレータを選んでください.
Springhead • 我々が開発している物理シミュレータ • 開発の動機 • 力覚インタフェースに使いたい • 超高速更新(>300Hz),安定性重視 • シミュレータでロボット対戦(ロボコン)をやりたい • 2台以上 • フィールドに障害物 • 押し合い → 摩擦が重要
Springheadの選択 • 接触力計算はペナルティ法 • 高速性,安定性 • 摩擦の精度 • 多少剛体同士が侵入するが,気にしない • ロボットなど関節を持つ物はFeatherstone法 • 構造が変化しないので非常に高速. • ループのある機構は少ない. • ペナルティ法とは簡単に組み合わせられる.
ゲームの作成 • シミュレータの限界 • 限界を見極めてモデリングする必要がある • 安定性の限界 • 極端に重いものと軽いもの • 衝突時に速度が大きくなりすぎる • 質量と慣性モーメントの比率がおかしいもの • 回転速度が極端に大きくなることがある • 極端に大きさが異なるもの • 衝突判定の精度が問題となる • 計算速度の限界 • 物体数,ポリゴン数,時間刻み
ゲームの作成 • 物理以外に必要なもの • ゲームのルール • 物体の位置や速度で判定 • ダメージの計算 • 接触力や関節に働く力の計測 • 物理シミュレーションを活かして作ると効果的 • 人物,動物,車などの動き • 自然の動きではなく,意図を持った動き → コントロール=制御が必要
物体の制御 • シミュレータ内の物体は,速度・慣性を持つ. • 自動的に運動する • 強制的に位置を指定不自然な動き,非常に大きな力が発生 • シミュレーションの意味がない • やわらかい動き • 物理を無視せず,実世界と同じく力を加えて動かす.=制御をする
誤差に比例:バネ Proportional制御 微分に比例:ダンパ Differential制御 PD制御 • 目標位置に質点を持っていくには? • 誤差に応じた力を加えてやる • 例えば f=k(xg –x)では? 振動し続ける 減衰し,振動が止まる f m xg x0 初期位置 目標位置
k m 目標位置 b PD制御の性質と調節 • バネ係数kとダンパ係数bでPD制御の性質が決まる • バネ・ダンパと考えられるので, • バネ係数 k • 大きいほど早い.小さいほど柔らかい. • ダンパ係数b • 負だと振動がどんどん大きくなる • 0だと振動が止まらない • 大きいほど振動しにくい • b>0ならば,収束する(振動が収まる). • kが大きいほど早く動く. 振動の周期は • シミュレーションは時間が離散 少なくとも周期<2Δtは無理 Δt
m 0 x v 位置 速度 目標位置 シミュレータ上でのPD制御 • シミュレータ上でのPD制御 • 時間が離散
シミュレータ上でのPD制御 • 安定性の確認 行列A An →0 ならば,このPD制御は安定になる 安定:そのうち目標位置でとまる
シミュレータ上でのPD制御 • 安定性の確認(つづき) |Aの固有値| < 1 ならば, An →0 なので, Aの固有値を求めてみる Aの固有値
シミュレータ上でのPD制御 ~ ~ • 安定な k,b の範囲, 早く静止する k,b を求める ~ ~ ~ b b=k 2 実際に良く使うのはこの辺 ~ k
無次元化について • この数値は何? • この数値は質量m,ステップΔtに依らない?
PD制御の実験 ~ ~ • いろいろな k, b での挙動をご覧ください ~ ~ ~ b b=k 2 1.5 ~ k 2 0.5
. 侵入量 r,相対速度 r バネ ダンパ ペナルティ法とPD制御 • ペナルティ法もバネ・ダンパモデル • バネ・ダンパ係数は? では多物体が接触したときに安定しない. Springheadでは, を使用
まとめ • 物理シミュレータの役割 • ゲーム世界の多様性,多様な反応の実現 • シミュレータの中身と選定 • 解析法とペナルティ法 • 私はペナルティ法が好きですが,目的次第です. • 高速化法 • 行列Aをいかに早く解くか(解かずに済ますか) • やわらかく動かすための制御 • PD制御 • バネ・ダンパ係数の決め方,無次元化
謝辞 • このような機会を与えて下さった,星野准一先生,新清士様,IGDAの皆様 • 一緒に開発したSpringhead開発チーム 田崎勇一,岡田直樹,市川宙,白井暁彦, 藤井伸旭,田上信一郎 • ご清聴ありがとうございました.
参照 • デモとすべてのソースはSpringheadのWebで公開http://springhead.info/この資料や参考文献リストもおく予定 • ご意見,ご質問,お問い合わせを hase@hi.pi.titech.ac.jp springhead@yahoogroups.jp WebのWiki・掲示板・バグトラッカー でお待ちしております
衝突 • 実世界の物体は • 互いに侵入しない. • 跳ね返る. • 再現するためには • 衝突検知 • 剛体間に働く力の決定
階層化による高速化 • Model Hierarchy: • 各ノードが子ノードを含む Bounding Volume を持つ. • Bouding Volume は,球,直方体などで表される. • 階層構造の一番したのノード(葉)が多面体モデルを持つ. • Bouding Volumeが球で子が2つの場合の例: