a/b - Springhead

Download Report

Transcript a/b - Springhead

Human interface Section, P&I Lab, Titech
ゲームと実時間物理シミュレーション技術
東京工業大学精密工学研究所
長谷川晶一
Human interface Section, P&I Lab, Titech
内容
IGDA Japan SIG-GT(ゲーム技術研究会)
物理シミュレーションの意義
なぜ,今物理シミュレーションなのか?
物理シミュレーションでできること
シミュレータの特徴と選び方
接触力計算法,高速化法
衝突判定と計算速度
制御
シミュレータ内の物体の動かし方
デモ
我々が開発している物理シミュレータ付きVR開発環境
Springheadと力覚インタフェースSPIDARのデモ
なぜ物理シミュレーションが必要
か?
Human interface Section, P&I Lab, Titech
入力に対する反応の多様さ
→ゲーム世界の多様さ・楽しさ
入力の進化
アナログパッド,画像 → 選択肢の増加
たくさんの反応を用意しなければならない
 従来の延長
 シミュレーション
場合分けの爆発
たくさんの手間と時間
自動的に多様でリアルな反応
従来の新技術と同じこと
 多量の2次元画像
 ストーリの分岐
→
→
3DCG
束構造に
Human interface Section, P&I Lab, Titech
物理シミュレーションが役立つ例
動きの生成
例:歩行
シミュレーションなし: 足の動きと体の動きを別々に計算
シミュレーションあり: 足を動かすと自然と体が動く
当たり判定
なし: 当たり判定専用計算
あり: ポリゴンモデルの接触位置が毎ステップ求まる
ダメージ計算
なし: 当たったもの,当たり方毎に値を用意
あり: 加わった力の大きさからダメージを計算
効果音
なし: イベントごとに音を用意
あり: 加わった力,材質から自動的に音を発生
Human interface Section, P&I Lab, Titech
物理シミュレーションの役割
ゲーム世界の物体が
現実世界と同様に自律的に動く
従来のゲームでも物理は使われていた?
従来は,特別に,物理法則を作りこんでいた.
物理シミュレータでは,
物体はすべて物理法則にしたがう.
Human interface Section, P&I Lab, Titech
物理シミュレータを使うには
物理シミュレータの中身を知る
物理シミュレータの選定
自分のゲームでは何が大事か?
Havok (有料),Tokamak, NovodeX(無料でテスト可能)
Open Dynamics Engine, Springhead (オープンソース)
パフォーマンスを引き出す
スピードと精度のトレードオフ
精度同士のトレードオフ
ボトルネックの特定
Human interface Section, P&I Lab, Titech
物理シミュレーションとは
物理法則(現実世界)は微分方程式で記述できる
たとえば
質点の運動
剛体の運動
流体の運動
f  m x
 
m v  f , I ω
シミュレーションは微分方程式の数値解の計算
f  m x
運動方程式:
f
m
f t
差分方程式にすると: x ( t   t )  x ( t ) 
m
x
x ( t   t )  x ( t )  x ( t )  t
順番に求めて行く:
x (  t )  x ( t )  t  x ( 0 )
x ( 2  t )  ...
x ( 3  t )  ......
…
x(0) x(t) x(2t)
Human interface Section, P&I Lab, Titech
剛体運動のシミュレーション
剛体の運動の話だけにします.
剛体
硬いもの,変形しないもの
剛体だと考えてよいものが多い
積み木,ボール,ロボット,人体・・・
剛体でないもの
スポンジ,粘土,水・・・
Human interface Section, P&I Lab, Titech
剛体の運動
v: 速度
ω:角速度
m: 質量
I: 慣性テンソル
f: 外力
(すべて絶対座標系)
運動方程式
m v  f
m v (t   t )  m v (t )  f  t
I ω  τ
I (t   t ) ω (t   t )  I (t ) ω (t )  τ  t
f  0 , τ  0 ならば,速度一定・角運動量一定
Human interface Section, P&I Lab, Titech
剛体に働く力
重力→ f=mg… 定数
バネ→ f=kx… 位置に比例
拘束力
mg
kx
力の大きさは不明
剛体同士の位置・速度関係が決まっている
 蝶番:2物体の相対位置が一定
 抗力:2物体が互いに侵入しない
 静止摩擦力:物体が滑らない
拘束力の計算が難しい
fn
ft
Human interface Section, P&I Lab, Titech
拘束力の求め方
例:球関節の拘束.
2物体が 点pAと点pBで繋がっている
拘束の式: pA = pB
A
pA
この式を満たすように,関節に働く力を求める
解析法:運動方程式と拘束の式を連立させて解く
 David Baraff 89-93など
 Havok,Tokamak, Open Dynamics Engine
ペナルティ法:拘束違反に応じた力を加える
 昔からいろいろな用途に使われてきた
 Springhead
 接触判定時に拘束違反の量(侵入量)を調べる必要がある
pB
B
Human interface Section, P&I Lab, Titech
解析法1(関節)
B
f
A
拘束: p B
rB
(rA ,  θ A  ( p A  r A )  θ A  ( p A  r A ))
pA pB
 (rB ,  θ B  ( p B  r B )  θ B  ( p B  r B ))  0
rA
B r  b  0
運動方程式:
mA






IA
mB
M
 A  0
p
1
  rA  


 

θ
 A    (p A  r A )  
  r   
 f
1
 B  







I B   θ B   ( p B  r B )  
r 
C
f
Af  b  0
計算量はo(n3)
Human interface Section, P&I Lab, Titech
解析法2(抗力)
拘束: ( p B  p A )  n  0
B
( B r  b )  n  0
pB
fn
運動方程式: M r  C f n
pA
A
af  b  0
抗力は,反発だけ:
これを満たす f を見つける→
利点:
欠点:
0 -a/b
f 0
線形計画法,2次計画法・・・
物体同士が侵入しない.
遅い,跳ね返り係数を考慮していない.
f
Human interface Section, P&I Lab, Titech
解析法3(摩擦力)
クーロンの摩擦モデル
f S   0 f N ( 静止摩擦 )
f d   f N ( 動摩擦 )
拘束:
B
fN
運動方程式:
抗力は,反発力:
fS
A
 B  p
 A )  n  0
(p
M r  Cf
f n  0
摩擦力の条件: f  n / | f |  / 1   2
場合分けを無くすため  0   とすることが多い
Human interface Section, P&I Lab, Titech
ペナルティ法(抗力)
 拘束を解かない.
Af  b  0
 拘束を侵した分だけ罰(ペナルティ)として力を加える.
.
侵入量 d,相対速度 d
f  Kd  B d
バネ ダンパ
 繰り返すうちに拘束が満たされる...はず.
力が直接決まるので,計算量はo(n)
接触部にバネとダンパを入れたと考えられる
利点:
欠点:
高速,跳ね返り係数を考慮できる.
物体同士が多少侵入してしまう.
Human interface Section, P&I Lab, Titech
ペナルティ法(摩擦力)
静止摩擦:ずれに比例した力を加える
接触の履歴を利用
クーロンの摩擦モデルをそのまま利用できる
f d   f N ( 動摩擦 )
f S   0 f N ( 静止摩擦 )
静止摩擦
動摩擦 静止摩擦
Human interface Section, P&I Lab, Titech
ペナルティ法(面接触)
面で接触する場合
力は接触部分全体から発生
正確な接触力の計算
分布バネダンパモデルを考える
発生する力を接触部全体について積分
意外と簡単な式になる
解析法に比べ,とくに摩擦力が正確
接触部分の形を求める必要
Human interface Section, P&I Lab, Titech
計算量と高速化
ここまでで,物理の話は終わりです.
関節を持つ剛体
剛体同士の接触
のシミュレーションができるようになりました.
ここからは,リアルタイム動作に必要な,
計算量と高速化について話します.
Human interface Section, P&I Lab, Titech
解析法の計算量と接触数
接触している
多物体が
場合多くの拘束が働く.
関節で繋がれる
f1n
f2n
Af  b  0
f  0
行列Aの次元=抗力 fi の数
方程式を解くので,行列の次数nに対して,計算量はo(n3)
立方体の面接触1つ:4次元
10個つむと:40次元
Human interface Section, P&I Lab, Titech
解析法の高速化
 Aを早く解く工夫
 ODEの場合
Af  b  0
f  0
 巨大な行列Aを作らず,
2物体単位で計算する
 繰り返し計算する
 繰り返し回数が少ないと精度が落ちる (ペナルティ法に近い)
巨大行列Aを解いた場合
2体単位で,繰り返し
解く場合
Open Dynamics Engineのドキュメントより
Human interface Section, P&I Lab, Titech
構造を利用した,解析法の高速化
Articulated Body
多数の剛体を関節でつないだもの
動物や人間の体,ロボットなど
構造に特徴
剛体が輪になっていない→木構造
輪になっている例 全部繋がっている例
Human interface Section, P&I Lab, Titech
解析法で求めると...
3
2
D
Aの運動方程式: M A rA  C A1 (  f 1 )
1の拘束の式: B 1 A rA  B 1 B rB  b 1  0
Bの・・・・・・・・・・・・・・・・ ここで, rや f は6次元ベクトル
r  v
v
v


 
T
B1
A
x
y
z
x
y
z
並べてみると
M A






B
 1A



C A1
MB
C B1
MC
C C2
MD
B 1B
B 2B
B 2C
B 3C
C B2
B 3D
C C3
C D3
  rA

  rB
  r
 C
  rD

f
 1
 f 2

 f 3
  0 
 

  0 
  0 
 

 0 
 

 b1
 

  b2 
 


b
3 
 
0だらけ,すかすか,sparse行列
普通に解くより早い方法があるのでは?
Human interface Section, P&I Lab, Titech
Featherstoneの方法
巨大行列を普通に解かない
根から葉に向かって1つずつ拘束力を求める
とても速い O(n)
Human interface Section, P&I Lab, Titech
Featherstoneの方法
1. 全体を一つの剛体だと考え,加
速度を求める.
 剛体Aの加速度が求まる
3
2
D
B
1
A
2. AとBから先の2つの剛体と考え
1. 関節1に働く力を求める.
2. Bの加速度を求める
3
2
B
1
3. BとCから先 〃
A
D
Human interface Section, P&I Lab, Titech
Featherstoneの方法
先ほどのsparse行列で考えると,
3
2
B1
A
D
1. 葉から根に向かってMを合成
M A






B
 1A



C A1
MB
C B1
MC
C C2
MD
B 1B
B 2B
B 2C
B 3C
C B2
B 3D
2.加速度rA を求める.
C C3
C D3
  rA

  rB
  r
 C
  rD

f
 1
 f 2

 f 3
  0 
 

0
 

  0 
 

 0 
 
 f 3 を消去
 b1
 

  b2 
 

   b 3  rD を消去
Human interface Section, P&I Lab, Titech
Featherstoneの方法
3.根から葉に向かって,f i , r を求める
M A






B
 1A



C A1
MB
C B1
MC
C C2
MD
B 1B
B 2B
B 2C
B 3C
C B2
B 3D
C C3
C D3
  rA

  rB
  r
 C
  rD

f
 1
 f 2

 f 3
  0 
 

  0 
  0 
 

 0 
 

 b1
 

  b2 
 


b
3 
 
rA が求まったので,
f 1 を求める
Human interface Section, P&I Lab, Titech
ペナルティ法は高速
バネダンパモデルから力が求まる
f   k x  b x
60
計算時間[ms]
50
ペナルティ法(Springhead)
解析法(Open Dynamics Engine)
40
30
20
10
0
0
5
10
ブロック数
15
Human interface Section, P&I Lab, Titech
解析法とペナルティ法
解析法
1ステップで拘束と評価関数を満たす力を計算
ステップが大きく取れる.1ステップの計算は多い.
摩擦や跳ね返り係数などは難しい
→ 動きの精度低 or 評価関数化難,計算量増大
繰り返し計算による高速化:1ステップに何度も計算
ペナルティ法
バネダンパモデル→1ステップの計算は速い.
侵入量∝Δt なので,ステップ数が多くなる.
摩擦・跳ね返り係数なども簡単にモデル化できる.
シミュレーション法・高速化法の特性を考慮して,
シミュレータを選んでください.
Human interface Section, P&I Lab, Titech
Springhead
我々が開発している物理シミュレータ
開発の動機
力覚インタフェースに使いたい
超高速更新(>300Hz),安定性重視
シミュレータでロボット対戦(ロボコン)をやりたい
2台以上
フィールドに障害物
押し合い → 摩擦が重要
Human interface Section, P&I Lab, Titech
Springheadの選択
接触力計算はペナルティ法
高速性,安定性
摩擦の精度
多少剛体同士が侵入するが,気にしない
ロボットなど関節を持つ物はFeatherstone法
構造が変化しないので非常に高速.
ループのある機構は少ない.
ペナルティ法とは簡単に組み合わせられる.
Human interface Section, P&I Lab, Titech
状況を利用した高速化
動かない物体を凍らせる
複数の剛体を1つの剛体
とみなす.
接合部分の力の制約を
求めておく.
制約を満たす間は,1つ
の剛体として計算する.
地面の上の剛体の運動
は計算不要
Human interface Section, P&I Lab, Titech
衝突判定と計算速度
接触力を求める→高速な衝突判定が必要
階層化
Human interface Section, P&I Lab, Titech
衝突判定と計算速度
接触力を求める→高速な衝突判定が必要
階層化
簡単な境界で囲む
階層的に境界を作る
大まかに判定してから,詳細な判定をする
境界(Bounding)の例
球
判定簡単
K-DOP
AABB
ぴったりフィット
Human interface Section, P&I Lab, Titech
階層化と計算時間
階層化すると:
log2n
n
Human interface Section, P&I Lab, Titech
アルゴリズムの速度
a を検索
ランダム
AdhjJLfC gMalmD bpEH UVstwQ RWYxzOZ
ソートされている場合
ACDEHJLMOQRUVWYZabdfghjlmpstwxz
きちんと並んでいる場合
ABCDEFGHIJKLMNOPQRSTUVWXYZabcde
Human interface Section, P&I Lab, Titech
アルゴリズムの速度
 a を検索
ランダム
AdhjJLfC gMalmD bpEH UVstwQ RWYxzOZ
頭から見ていく
ソートされている場合
ACDEHJLMOQRUVWYZabdfghjlmpstwxz
あたりをつけてみていく
きちんと並んでいる場合
ABCDEFGHIJKLMNOPQRSTUVWXYZabcde
どこにあるか分かる
Human interface Section, P&I Lab, Titech
アルゴリズムの速度
 a を検索
ランダム
AdhjJLfC gMalmD bpEH UVstwQ RWYxzOZ
頭から見ていく
O(n)
ソートされている場合
ACDEHJLMOQRUVWYZabdfghjlmpstwxz
あたりをつけてみていく
O(log n)
きちんと並んでいる場合
ABCDEFGHIJKLMNOPQRSTUVWXYZabcde
どこにあるか分かる
O(1)
Human interface Section, P&I Lab, Titech
アルゴリズムの速度
対象に対する知識があるほど速く出来る
ランダム
知識なし
a = = ? しか分からない場合
ソートされている場合
左<右
<演算が定義されている
きちんと並んでいる場合
右-左=1 何がどこにあるか分かっている
Human interface Section, P&I Lab, Titech
アルゴリズムの速度(ソート)
総当りソート: O(n2)
最小を先頭へ
最小を先頭へ
5 7 3 6 9 1 2
1 5 7 6 9 3 2
1 2 5 7 6 9 3
n回比較
n回比較 n回
クイックソート: O(n log n)
5 7 3 6 9 1 2
3 1 2 5 7 6 9
3 1 2 <3を前へ
<5を前へ
n回比較
log n回
7 6 9 <7を前へ
n回比較
バケツソート: O(n)
5 7 3 6 9 1 2
1
2
3
1 2 3
4
5
6
7
5 6 7
8
9
9
n回移動 1回
Human interface Section, P&I Lab, Titech
衝突判定(動く場合)
物体が動き回る場合,物体同士の衝突
境界が作れない.
総当り?
5
2
1
4
3
6
1-2
1-3
1-4
1-5
1-6
2-3
2-4 3-4
2-5 3-5 4-5
2-6 3-6 4-6 5-6
n
n
O(n2 )
Human interface Section, P&I Lab, Titech
衝突判定(動く場合)
境界を作りながら判定
5
2
41
3
6 1より左?
1-2 1-3 1-4 1-5 1-6
1より右? 1-3 1-4 1-6
5
2
4
41
要判定
3
2より左? 2-5 2-4
6 4より左?
2-4
1-4 の判定
O(n log n)
Human interface Section, P&I Lab, Titech
衝突判定
中身の判定
中身は
凸多面体
三角形?
多面体?
凸形状
非凸形状
凸形状 距離が極小となる点が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)
Human interface Section, P&I Lab, Titech
衝突検知(GJK)
2次元で説明 (3次元でも原理は同じ)
凸形状A上の点から,
凸形状B上の点へのベ
クトルを
原点を始点に並べると
ベクトルの終点の集合
も凸形状になる
Human interface Section, P&I Lab, Titech
衝突検知(GJK2)
1
V0 : 凸形状内の任意の点
Wi :OViとOWiの内積が最小の点
Vi :三角形Wi-2 Wi-1 Wi内の点で原点に
一番近い点
2
3
4
Human interface Section, P&I Lab, Titech
接触解析
衝突部分の形状を求める方法
D. E. Muller and F.P.Preparata:
“Finding the intersection of two convex” (1978)
凸形状2つの交差部分の形を求める
共有点1点が必要(GJKで求められる)
Human interface Section, P&I Lab, Titech
接触解析(2)
2つの凸形状の交差部
半平面表現
Human interface Section, P&I Lab, Titech
接触解析(3)
2つの凸形状の交差部(2)
半平面表現
双対変換
交差部の頂点
双対変換
Quick hull
n log n もっと早くできる?
Human interface Section, P&I Lab, Titech
物理シミュレータの利用
シミュレータの限界
限界を見極めてモデリングする必要がある
安定性の限界
極端に重いものと軽いもの
• 衝突時に速度が大きくなりすぎる
質量と慣性モーメントの比率がおかしいもの
• 回転速度が極端に大きくなることがある
極端に大きさが異なるもの
• 衝突判定の精度が問題となる
計算速度の限界
物体数,ポリゴン数,時間刻み
Human interface Section, P&I Lab, Titech
物理シミュレータの利用
物理以外に必要なもの
ゲームのルール
• 物体の位置や速度で判定
ダメージの計算
• 接触力や関節に働く力の計測
物理シミュレーションを活かして作ると効果的
人物,動物,車などの動き
自然の動きではなく,意図を持った動き
→ コントロール=制御が必要
Human interface Section, P&I Lab, Titech
物体の制御
シミュレータ内の物体は,速度・慣性を持つ.
自動的に運動する
強制的に位置を指定
不自然な動き,非常に大きな力が発生
シミュレーションの意味がない
やわらかい動き
物理を無視せず,実世界と同じく力を加えて動かす.
=制御をする
Human interface Section, P&I Lab, Titech
PD制御
 目標位置に質点を持っていくには?
誤差に応じた力を加えてやる
例えば f=k(xg – x)では?
m x  k ( x g  x ) 
x  ( x 0  x g ) cos(
k / m t)  xg
振動し続ける
m
f
x0
xg
初期位置 目標位置
運動方程式:
f  m x
誤差に比例:バネ
Proportional制御
 f  k ( x g  x )  b ( x g  x ) では?
x  ( x0  x g ) e
(b / 2)t
cos(
減衰し,振動が止まる
k / m t)  xg
微分に比例:ダンパ
Differential制御
Human interface Section, P&I Lab, Titech
PD制御の性質と調節
 バネ係数kとダンパ係数bでPD制御の性質が決まる
 バネ・ダンパと考えられるので,
k
 バネ係数 k
 大きいほど早い.小さいほど柔らかい.
 ダンパ係数b
 負だと振動がどんどん大きくなる
 0だと振動が止まらない
 大きいほど振動しにくい
目標位置
m
b
x  ( x0  x g ) e
 (b / 2)t
cos(
k / m t)  xg
 b>0ならば,収束する(振動が収まる).
 kが大きいほど早く動く. 振動の周期は 2 k / m
 シミュレーションは時間が離散 少なくとも周期<2Δtは無理
Δt
Human interface Section, P&I Lab, Titech
シミュレータ上でのPD制御
シミュレータ上でのPD制御
時間が離散
m
位置 x
速度 v
0
目標位置
Human interface Section, P&I Lab, Titech
シミュレータ上でのPD制御
安定性の確認
行列A
An →0 ならば,このPD制御は安定になる
安定:そのうち目標位置でとまる
Human interface Section, P&I Lab, Titech
シミュレータ上でのPD制御
安定性の確認(つづき)
|Aの固有値| < 1 ならば, An →0 なので,
Aの固有値を求めてみる
Aの固有値
Human interface Section, P&I Lab, Titech
シミュレータ上でのPD制御
~~
安定な k,b の範囲, 早く静止する k,b を求める
~
b
~ ~
b=k
2
実際に良く使うのはこの辺
~
k
Human interface Section, P&I Lab, Titech
無次元化について

この数値は何?
この数値は質量m,ステップΔtに依らない?
Human interface Section, P&I Lab, Titech
PD制御の実験
~~
いろいろな k, b での挙動をご覧ください
~
~~
b
b=k
2
1.5
~
0.5
2
k
Human interface Section, P&I Lab, Titech
ペナルティ法とPD制御
ペナルティ法もバネ・ダンパモデル
.
侵入量 r,相対速度 r
f  Kr  B r  c
バネ・ダンパ係数は?
Springheadでは,
バネ ダンパ
では多物体が接触したときに安定しない.
を使用
Human interface Section, P&I Lab, Titech
まとめ
物理シミュレータの役割
ゲーム世界の多様性,多様な反応の実現
シミュレータの中身と選定
解析法とペナルティ法
 私はペナルティ法が好きですが,目的次第です.
高速化法
 行列Aをいかに早く解くか(解かずに済ますか)
やわらかく動かすための制御
PD制御
バネ・ダンパ係数の決め方,無次元化
Human interface Section, P&I Lab, Titech
参照
 デモとすべてのソースはSpringheadのWebで公開
http://springhead.info/
この資料や参考文献リストもおく予定
 ご意見,ご質問,お問い合わせを
[email protected]
[email protected]
WebのWiki・掲示板・バグトラッカー
でお待ちしております
 より進んだ内容を勉強したい方へ
 ACM SIGGRAPH の1987-2000のPhysics simulationのCourse, Paper
をおすすめします.
 論文には,うそではないけど...正直とはいえないなあ...
ということもあるのでお気をつけください.