640 likes | 1.27k Views
ゲームと実時間物理シミュレーション技術 . 東京工業大学精密工学研究所 長谷川晶一. 内容. IGDA Japan SIG-GT( ゲーム技術研究会) 物理シミュレーションの意義 なぜ,今物理シミュレーションなのか? 物理シミュレーションでできること シミュレータの特徴と選び方 接触力計算法,高速化法 衝突判定と計算速度 制御 シミュレータ内の物体の動かし方 デモ 我々が開発している物理シミュレータ付き VR 開発環境 Springhead と力覚インタフェース SPIDAR のデモ. なぜ物理シミュレーションが必要か?.
E N D
ゲームと実時間物理シミュレーション技術 東京工業大学精密工学研究所 長谷川晶一
内容 • IGDA Japan SIG-GT(ゲーム技術研究会) • 物理シミュレーションの意義 • なぜ,今物理シミュレーションなのか? • 物理シミュレーションでできること • シミュレータの特徴と選び方 • 接触力計算法,高速化法 • 衝突判定と計算速度 • 制御 • シミュレータ内の物体の動かし方 • デモ • 我々が開発している物理シミュレータ付きVR開発環境Springheadと力覚インタフェースSPIDARのデモ
なぜ物理シミュレーションが必要か? • 入力に対する反応の多様さ →ゲーム世界の多様さ・楽しさ • 入力の進化 • アナログパッド,画像 → 選択肢の増加 • たくさんの反応を用意しなければならない • 従来の延長 場合分けの爆発 たくさんの手間と時間 • シミュレーション 自動的に多様でリアルな反応 • 従来の新技術と同じこと • 多量の2次元画像 → 3DCG • ストーリの分岐 → 束構造に
物理シミュレーションが役立つ例 • 動きの生成 例:歩行 • シミュレーションなし: 足の動きと体の動きを別々に計算 • シミュレーションあり: 足を動かすと自然と体が動く • 当たり判定 • なし: 当たり判定専用計算 • あり: ポリゴンモデルの接触位置が毎ステップ求まる • ダメージ計算 • なし: 当たったもの,当たり方毎に値を用意 • あり: 加わった力の大きさからダメージを計算 • 効果音 • なし: イベントごとに音を用意 • あり: 加わった力,材質から自動的に音を発生
物理シミュレーションの役割 • ゲーム世界の物体が現実世界と同様に自律的に動く • 従来のゲームでも物理は使われていた? • 従来は,特別に,物理法則を作りこんでいた. • 物理シミュレータでは,物体はすべて物理法則にしたがう.
物理シミュレータを使うには • 物理シミュレータの中身を知る • 物理シミュレータの選定 • 自分のゲームでは何が大事か? • Havok (有料),Tokamak, NovodeX(無料でテスト可能) • 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法 • 構造が変化しないので非常に高速. • ループのある機構は少ない. • ペナルティ法とは簡単に組み合わせられる.
状況を利用した高速化 • 動かない物体を凍らせる • 複数の剛体を1つの剛体とみなす. • 接合部分の力の制約を求めておく. • 制約を満たす間は,1つの剛体として計算する. • 地面の上の剛体の運動は計算不要
衝突判定と計算速度 • 接触力を求める→高速な衝突判定が必要 • 階層化
衝突判定と計算速度 • 接触力を求める→高速な衝突判定が必要 • 階層化 • 簡単な境界で囲む • 階層的に境界を作る • 大まかに判定してから,詳細な判定をする • 境界(Bounding)の例 K-DOP 球 AABB 判定簡単 ぴったりフィット
階層化と計算時間 • 階層化すると: log2n n
アルゴリズムの速度 • a を検索 • ランダム • ソートされている場合 • きちんと並んでいる場合 A d h j J L f C g M a l m D b p E H U V s t w Q R W Y x z O Z A C D E H J L M O Q R U V W Y Z a b d f g h j l m p s t w x z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e
アルゴリズムの速度 • a を検索 • ランダム • ソートされている場合 • きちんと並んでいる場合 A d h j J L f C g M a l m D b p E H U V s t w Q R W Y x z O Z 頭から見ていく A C D E H J L M O Q R U V W Y Z a b d f g h j l m p s t w x z あたりをつけてみていく A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e どこにあるか分かる
アルゴリズムの速度 • a を検索 • ランダム • ソートされている場合 • きちんと並んでいる場合 A d h j J L f C g M a l m D b p E H U V s t w Q R W Y x z O Z O(n) 頭から見ていく A C D E H J L M O Q R U V W Y Z a b d f g h j l m p s t w x z あたりをつけてみていく O(log n) A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e どこにあるか分かる O(1)
アルゴリズムの速度 • 対象に対する知識があるほど速く出来る • ランダム • 知識なし a = = ? しか分からない場合 • ソートされている場合 • 左<右 <演算が定義されている • きちんと並んでいる場合 • 右-左=1 何がどこにあるか分かっている
1 2 3 5 6 7 9 アルゴリズムの速度(ソート) • 総当りソート: O(n2) • クイックソート: O(n log n) • バケツソート: O(n) 5 7 3 6 9 1 2 最小を先頭へ n回比較 n回 1 5 7 6 9 3 2 最小を先頭へ n回比較 12 5 7 6 9 3 n回比較 5 7 3 6 9 1 2 <5を前へ 3 1 2 5 7 6 9 log n回 3 1 2 <3を前へ 7 6 9 <7を前へ n回比較 5 7 3 6 9 1 2 n回移動 1回 1 2 3 4 5 6 7 8 9
衝突判定(動く場合) • 物体が動き回る場合,物体同士の衝突 • 境界が作れない. • 総当り? 1-2 1-3 2-3 1-4 2-4 3-4 1-5 2-5 3-5 4-5 1-6 2-6 3-6 4-6 5-6 1 2 4 3 6 5 n O(n2 ) n
衝突判定(動く場合) • 境界を作りながら判定 1 1より左?1-2 1-3 1-4 1-5 1-6 2 4 3 6 5 1より右?1-3 1-4 1-6 2より左?2-5 2-4 1 2 4 4 3 5 6 4より左?2-4 要判定 1-4 の判定 O(n log n)
凸形状 非凸形状 衝突判定 • 中身の判定 • 中身は 三角形? 多面体? • 凸多面体 • 凸形状 距離が極小となる点が1点 • 最近傍点が簡単に求まる GJK algorithm • E. G. Gilbert, D. W. Johnson and S. S. Keerthi • A Fast Procedure for Computing the Distance between Complex Objects in Three-Dimensional Space (1988)
凸形状A上の点から,凸形状B上の点へのベクトルを凸形状A上の点から,凸形状B上の点へのベクトルを 原点を始点に並べると ベクトルの終点の集合も凸形状になる 衝突検知(GJK) 2次元で説明 (3次元でも原理は同じ)
V0 : 凸形状内の任意の点 Wi :OViとOWiの内積が最小の点 Vi :三角形Wi-2 Wi-1 Wi内の点で原点に 一番近い点 衝突検知(GJK2) 1 2 3 4
接触解析 • 衝突部分の形状を求める方法 • D. E. Muller and F.P.Preparata:“Finding the intersection of two convex” (1978) • 凸形状2つの交差部分の形を求める • 共有点1点が必要(GJKで求められる)
接触解析(2) • 2つの凸形状の交差部 半平面表現
接触解析(3) • 2つの凸形状の交差部(2) 半平面表現 双対変換 交差部の頂点 双対変換 Quick hull n log n もっと早くできる?
物理シミュレータの利用 • シミュレータの限界 • 限界を見極めてモデリングする必要がある • 安定性の限界 • 極端に重いものと軽いもの • 衝突時に速度が大きくなりすぎる • 質量と慣性モーメントの比率がおかしいもの • 回転速度が極端に大きくなることがある • 極端に大きさが異なるもの • 衝突判定の精度が問題となる • 計算速度の限界 • 物体数,ポリゴン数,時間刻み
物理シミュレータの利用 • 物理以外に必要なもの • ゲームのルール • 物体の位置や速度で判定 • ダメージの計算 • 接触力や関節に働く力の計測 • 物理シミュレーションを活かして作ると効果的 • 人物,動物,車などの動き • 自然の動きではなく,意図を持った動き → コントロール=制御が必要
物体の制御 • シミュレータ内の物体は,速度・慣性を持つ. • 自動的に運動する • 強制的に位置を指定不自然な動き,非常に大きな力が発生 • シミュレーションの意味がない • やわらかい動き • 物理を無視せず,実世界と同じく力を加えて動かす.=制御をする