シミュレーションとモデリングと
キャラクタモーション
東京工業大学
研究院 未来産業技術研究所
/工学院 情報通信系
長谷川晶一
1993年学部1年、以来バーチャルリアリティの研究をしています。
資料はこちら:バーチャルリアリティ(VR)が普及しています
HMDの低価格化(Oculus Rift)により用途が拡大中
VR世界でコミュニケーション
アバター(=自分の姿)が変わると行動や性格が変わる人も
バーチャルリアリティの仕組みと中身のリアリティ
バーチャルリアリティでは
中身のリアリティも大切。
バーチャル世界は
シミュレーションと
モデリングでできている。
3インタフェース
提示
バーチャル世界
入力
計測
コンピュータ
シミュ
レー
ション
聴覚 触覚 Oculomotor nucleus Abducens nucleus MLF Temporal retina Nasal retina Midline Medial rectusLateral rectus optical axis Vestibular nucleus Type II neurons Type I neurons Chiasma opticum 2 3 56 89 7 12 4 10 1 13 11 DLPN Visualcortex VPFL MT &MST LGN DLPN Visualcortex VPFL MT & MST LGN Oculomotor nucleus Abducens nucleus MLF Temporal retina Nasal retina Midline Medial rectus
Lateral rectus optical axis Vestibular nucleus Type II neurons Type I neurons Chiasma opticum 2 3 5566 89 7 1212 44 10 10 1 13 13 11 11 DLPN Visualcortex VPFL MT &MST LGN DLPN Visualcortex VPFL MT & MST LGN 視覚 頭部運動 到達運動 移動 バランス 眼球運動 前庭感覚
認識
行動決定
動作生成
体の制御
感覚
表面のリアリティ
感覚とインタフェースの層こころ
中身のリアリティ
認識とモデルの層VRの例:
バーチャルカヌー
カヌーの
シミュレーション
実際のカヌーの
スキルの一部が
身につく。
カヌーの近くを
掻くと前に進む。
遠くを掻くと
回転してしまう。
流体の
シミュレーション
5
水の動きと水圧=
水面の高さを
シミュレーション
色:水圧
白い線:流速
バーチャルカヌーの舞台裏
川岸の
映像用
3Dモデル
川岸の
衝突判定用
モデル
7
岩:障害物として川に固定配置
流木:水に浮く物体にして時々
上流から流す
バーチャルカヌーの
舞台裏
遠景、川岸、岩、カヌー
パドル
3次元の多面体で形状を
モデル化
テクスチャ(写真・模様)を
貼り付ける。
水面
流体の運動をシミュレー
ションして水面の形を求め、
半透明に表示する。
遠景
岩
川岸
水面
9バーチャルカヌーでは漕ぐことしかできない
作ってないものは存在しない
カヌーを降りて、川岸を歩いて、山に登ろうと思っても、遠景は、球に貼
り付けた写真でしかない。
カヌーから降りられない
カヌーを降りるために、手をカヌーにつけない。
降りるためのシミュレーションやプログラムがない。
歩けない
歩くための仕組みは作ってない。
なんでもできるバーチャル世界?
Google Street Viewは、車から360°カメラで計測した写真の中を
自由に歩き回れる。しかし動き回れるだけで、例えば物を拾えない。
Google street view
バーチャル世界を作る
バーチャル世界の
データの作成
色と形の作成の例:
どんなデータを用意する?
変形:硬さ
運動:質量、慣性
温度:比熱、熱伝導率
相転移(氷→水)? 化学反応(焦げる、固まる)?…
バーチャルクッキング
バーチャルクッキング
エンタテインメント・練習用の料理シミュレータ
熱伝達
水分
動力学
映像提示
バーチャル世界で料理がしたかったら
料理の手がかりとなる感覚を提示したい
→そのためのモデリングが必要。 どんな手がかりが必要?
必要な情報を調べるべく、とても詳しい料理レシピを作ってみた。
キッチン+料理初心者
料理が上手な、レシピ記述者
映像・
サーモカメラ
映像
料理レシピ
レシピの変遷1
17 レシピ< だし巻き卵> 初版 1. だしを作製する.ボールに砂糖大さじ1,醤油小さじ1,鰹だしスティック半分,みりん大さじ1.5,お 湯大さじ4 を計りボールに入れる. 2. 卵3 個をボールに入れて研ぐ.ここで,繋がっている白身を切るようにして研ぐことに注意する. 3. だしを2. に入れて混ぜ合わせる. 4. サラダ油で浸したキッチンペーパーで,フライパンに油を敷く. 5. フライパンに卵を一筋だけたらし,ジュージューと音がすることを確認出来たら,ボールに入っている 量の4 分の1 の量をフライパンに流し込む. 6. 卵から空気泡が出てきたら,奥から3 分の1 の所でひっくり返す操作を2 度繰り返す. 7. 6.の卵をフライパンの奥に持っていき,5. と6. の操作を3 回繰り返す. → 小さじ、大さじがどれか分からず、停止 1. だしを作製する.ボールに砂糖大さじ(15 のスプーン)1,醤油 小さじ1(2.5 のスプーン),鰹だしスティック半分,みりん大さ じ1.5,お湯大さじ4 を計りボールに入れる. → 火をつける手順・火加減がないため、停止 5. サラダ油を敷いたら,火をつける.火加減は中火で. → 最後まで調理できたが、黒焦げレシピの変遷2
レシピ< だし巻き卵> 第4 版 1. だしを作製する.ボールに砂糖大さじ(15 のスプーン)1, 醤油小さじ1(2.5 のスプーン), 鰹だしス ティック半分,みりん大さじ1.5, お湯大さじ4 を計りボールに入れる. 2. 卵3 個をボールに入れて研ぐ.ここで,繋がっている白身を切るようにして研ぐことに注意する. 3. だしを2. に入れて混ぜ合わせる. 4. サラダ油で浸したキッチンペーパーで,フライパンに油を敷く. 5. サラダ油を敷いたら,火をつける.火加減は弱火で. 6. 卵を料理箸に伝わせて一筋(一滴) だけたらし,ジュージューと音がすることを確認出来たら, ボールに入っている量の4 分の1 の量をフライパンに流し込む. 7. 卵から空気泡が出てくるまで箸などでひっくり返さずに,フライパンを回しながら待つ.卵の焼け ていないところがなくなったら(柔らかいところがなくなったら), 奥から3 分の1 の付近を目安に, 箸で剥がしながらひっくり返す.この操作を2 度繰り返す. 8. 6. の卵をフライパンの奥に持っていき,4. で 使用した方法で油を敷く.卵の下のところにも 卵を動かして油を敷く. 9. 最初の量の4 分の1 程度をフライパンに流し 込む.このとき卵の下にも卵が流れ込むよう に卵を入れる. 10.6. から9. の操作を3 回繰り返す.レシピの変遷3
19 レシピ< だし巻き卵> 第5版 7. 卵から空気泡が出てくるまで箸などでひっくり返さずに,フライパンを回しながら待つ.空気泡 が出なくなったら(柔らかいところがなくなったら),奥から3分の1 の付近を目安に,箸で剥が しながら奥から手前にひっくり返す.この操作を2度繰り返す. レシピ< だし巻き卵> 第6版 6. 卵を料理箸につけてフライパンにポンと振って落とし,卵を落とした瞬間に固まる程度であれ ば(そうでなければもう少し待ってみて再度繰り返す), ボールに入っている量の4 分の1 の量をフ ライパンに流し込む. レシピ< だし巻き卵> 第7版 6. 卵を料理箸につけてフライパンにポンと振って落とし,卵を落とした 瞬間に固まる程度であれば(そうでなければもう少し待ってみて再度 繰り返す),ボールに入っている量の4 分の1 の量をフライパンに流し 込む.全体に行き渡すようにフライパンを振る. 7. 全体に卵が行き渡ったら,卵から空気泡(焼けてきたところ,大き い空気の固まりが出る) が出てくるまで箸などでひっくり返さずに じっと待つ.空気泡が全体から出始めたら,奥から3 分の1 の付近を 目安に,箸で剥がしながら奥から手前にひっくり返す.この操作を2 度繰り返す.もし空気泡が出なければ火が弱いのですこしだけ火を 強くする. → 一見焦げが多いように見えるが、厚さがあり柔らかく、美味しいバーチャル世界で作業XXがしたかったら
作業XXの手がかりとなる現象を再現し、感覚を提示したい。
何を手がかりとしているかは、作業の上級者も意識していない。
これを取り出しながら、バーチャル世界を作ることが必要になる。
様々な作業が可能なバーチャル世界のためのモデリングは、
なかなか大変だが、取り組みがいのある仕事。
作業を知る、実世界を知る、人を知ることに繋がる。
分子レベルでシミュレーションすれば良いかもしれないが、
食材や調理器具の分子の並びを作る必要がある(なんとかなるかもしれない)
規模が大きすぎる:原子数 < 10
9数ナノ秒にスパコン数日
(アボガドロ数は6.02×10
23)
メモリの物理的な大きさは、おそらく実物より大きくなる。
シミュレーションの役割
例えば、物の動きを軌跡でモデリングしたなら
初速度に応じて何種類も軌跡を用意しなければならない
数式を使うと
𝒑𝒑 = 𝑣𝑣
0𝑡𝑡, −
𝑔𝑔𝑡𝑡 2 2のようにまとめられる。
微分方程式を使えば、
m ̈𝒑𝒑 = 𝒇𝒇 + 𝑚𝑚𝒈𝒈
のように、任意の力𝒇𝒇の場合の動きが質量𝑚𝑚だけでモデリングできる。
運動方程式の使い方
解析解
運動方程式
𝑚𝑚𝑎𝑎 = 𝑓𝑓
フックの法則
𝑓𝑓 = −𝑘𝑘𝑘𝑘
𝑚𝑚𝑎𝑎 = −𝑘𝑘𝑘𝑘 → 調和振動 → 𝑘𝑘 = Acos𝜔𝜔𝑡𝑡 + Bsin𝜔𝜔𝑡𝑡 (𝜔𝜔 ≡
𝑘𝑘 𝑚𝑚)
変化に対応できない
23m
k
𝑓𝑓 = −𝑘𝑘𝑘𝑘 +
𝑓𝑓
𝑐𝑐(𝑡𝑡)
𝑘𝑘 = ? ? ?
数値シミュレーション
微分方程式を差分の式にする
𝑚𝑚𝑎𝑎 = −𝑘𝑘𝑘𝑘
𝑚𝑚 𝑣𝑣 𝑡𝑡 + Δ𝑡𝑡 − 𝑣𝑣 𝑡𝑡 = −𝑘𝑘𝑘𝑘𝑘𝑘𝑡𝑡
𝑣𝑣 𝑡𝑡 + 𝑘𝑘𝑡𝑡 = 𝑣𝑣 𝑡𝑡 −
𝑚𝑚𝑘𝑘𝑘𝑘𝑘𝑘𝑡𝑡
𝑘𝑘 𝑡𝑡 + 𝑘𝑘𝑡𝑡 = 𝑘𝑘 𝑡𝑡 + 𝑣𝑣(𝑡𝑡)𝑘𝑘𝑡𝑡
繰り返し適用して、少しずつ先の時刻の速度と位置を計算していく
𝑣𝑣 0 = 0
𝑣𝑣 0.1 =
0 − 1 ⋅ 0.1 = −0.1
𝑣𝑣 0.2 = −0.1 − 1 ⋅ 0.1 = −0.2
:
𝑘𝑘 0 = 1
𝑘𝑘 0.1 = 1 − 0 ⋅ 0.1 = 1
𝑘𝑘(0.2) = 1 − 0.1 ⋅ 0.1 = 0.99
:
数値シミュレーション
外力の変化に対応できる
𝑚𝑚𝑎𝑎 = −𝑘𝑘𝑘𝑘 +
𝑓𝑓
𝑐𝑐(𝑡𝑡)
𝑚𝑚 𝑣𝑣 𝑡𝑡 + Δ𝑡𝑡 − 𝑣𝑣 𝑡𝑡 = (−𝑘𝑘𝑘𝑘 +
𝑓𝑓
𝑐𝑐𝑡𝑡
)𝑘𝑘𝑡𝑡
𝑣𝑣 𝑡𝑡 + 𝑘𝑘𝑡𝑡 = 𝑣𝑣 𝑡𝑡 + (−
𝑚𝑚𝑘𝑘𝑘𝑘 +
𝑓𝑓
𝑐𝑐𝑡𝑡
)𝑘𝑘𝑡𝑡
𝒙𝒙 𝑡𝑡 + 𝑘𝑘𝑡𝑡 = 𝒙𝒙 𝑡𝑡 + 𝒗𝒗(𝑡𝑡)𝑘𝑘𝑡𝑡
機構の変化には対応できない
シミュレーションの式の立て直しが必要
25𝑣𝑣(0) = 0
𝑣𝑣 0.1 = −1 ⋅ 0.1 = −0.1
𝑣𝑣 0.2 = −0.1 + (−1 +
𝑓𝑓
𝑐𝑐(0.2)
) ⋅ 0.1
𝑘𝑘 0 = 1
𝑘𝑘 0.1 = 1 − 0 ⋅ 0.1 = 1
𝑘𝑘(0.2) = 1 − 0.1 ⋅ 0.1 = 0.99
𝑓𝑓
𝑐𝑐(𝑡𝑡)
数値シミュレーションと物理エンジン
普通の物理シミュレーション
𝑚𝑚𝑚𝑚 + 𝐼𝐼 ̈𝜃𝜃 = −𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝜃𝜃
↑運動方程式を人が立てる
物理エンジン
人は機構の情報(関節位置、慣性、形)を与える
自動で運動方程式を立てながらシミュレーションする
接触などにより、機構がシミュレーション中に変わっても大丈夫
θ
θ
ニュートン・オイラーの剛体の運動方程式
+ 拘束力
𝒇𝒇
𝒄𝒄を用いる
運動方程式は同一なので自動化が簡単
𝑚𝑚 ̇𝒗𝒗 =
𝒇𝒇
𝒄𝒄+ 𝑚𝑚𝒈𝒈
𝑰𝑰 ̇𝝎𝝎 = 𝒓𝒓
𝒄𝒄×
𝒇𝒇
𝒄𝒄𝒇𝒇
𝒄𝒄物理エンジンの計算の流れ
1.
接触を見つけ、拘束を更新
2.
拘束力を求める
3.
位置・速度を更新する
27運動方程式(シミュレーションの式)
𝑀𝑀 ̈𝑘𝑘 = 𝐹𝐹外力 + 𝐹𝐹拘束 → 𝑣𝑣 𝑡𝑡 + Δ𝑡𝑡 = 𝑣𝑣 𝑡𝑡 + ⋯
機構の設定
(物体のつながり方)
拘束条件
2.連立
3.位置・速度
の更新
拘束力の値
1.接触判定
物理エンジンSpringheadのデモ
我々が開発している物理エンジン
Springheadのサンプルプログラム
ソース:
https://github.com/sprphys/Springhead
物理エンジンの中身の解説
http://haselab.net/class/vr/
の”物理エンジンサミット.pdf”
物理エンジンによるバーチャル世界
積み木については、
大抵の操作が可
のこぎりで切る
などには対応して
いません。
29柔軟物や流体のシミュレーション
力覚+物理シミュレーション+カブトムシ
31
ただ前に歩くだけ
のカブトムシだが
この世界の主人公
になった。
動物の存在感に
驚いた。
バーチャル世界で、生き物や人とふれあいたい
現実世界から連れてくる方が簡単
例:VRChat, cluster.muなど、多人数が一つのバーチャル空間に入り、
コミュニケーションなどの活動をする。
理想のバーチャル世界を作るには、バーチャルな生き物や人も欲しい
バーチャル人間 → 人間のような知能
人間のように会話できるエージェント
ELIZA[J. Weizenbaum, 1966] チャットができるエージェント(人工無脳)
人の知能は言語能力だけではない。特にバーチャルリアリティでは身体を
使ったコミュニケーションも大切
33人の動きが持つ情報
Biological Motion[G. Johansson,1973]
関節に小さな光るマーカーを付け暗闇で撮影
数個の光の点の動きで、行動がわかる。
歩行動作から性別や気分などがわかる。
バーチャル人間やバーチャル動物の動きからも、
キャラクタモーションのモデリング
ゲームなどのキャラクタモーションの作り方
予め運動を作っておき、タイミングに合わせて再生する。
記録・再生
役者の演技をモーションキャプチャする
人が作る
キーフレームアニメーション
→人の動きに応じた、キャラクタの反応動作を作ることが難しい。
動作が限られてしまう。
シミュレーションによる動作生成
人の動きに合わせてその場で動作を作ることができる。
物理法則にあたる法則がはっきりしない。
3537 https://www.youtube.com/watch?v=V9dkqS_pzio
Kobitoの動きの作り方
移動 距離 傾き 行動の種類 走る 歩く 押すリアルタイム
剛体シミュレーション
多次元キーフレーム
アニメーション
移動距離 傾き 傾きq 長さ l 質量M 倒立振子モデル に基づく制御 力 F剛体モデルの制御
運動量・角運動量 を 力を用いて制御
角運動量:
L
→
0
運動量:
p
→ m
v
(
v
:歩行速度)
制御可能な力:床との摩擦力
f
(|
f
|<
f
max)
倒立振子の制御
足で歩く人・動物の最も単純なモデル
状態フィードバック制御で実現
41g
N
f
mv
多次元キーフレームアニメーション
作りこまれたポーズの集合体
剛体の運動状態(姿勢・移動量・速度等)に依存
キャラクタの行動の種類(歩く・走る・押す など)に依存
多次元キーフレームアニメーション
多次元空間にキーフレームを配置
剛体の状態に応じて多次元座標を決定
→周囲のキーフレームを補間
移動 距離 傾き 行動種別 走る 歩く 押す多次元キーフレームの作成法
複数の一次元(=従来の)キーフレームアニメーションで構成
① 各次元軸に沿ったアニメーションを作成
② 1.で作成したキーフレームを起点にさらにキーフレームを追加
③ 実際に動作させ,キーフレームの追加・調整
キーフレームアニメーションの作成は従来スキル・ツールで可能
43 ② 移動距離 傾き ①シミュレーションと制御だけによる動作生成
何をシミュレーションするか?
選択的注意
一つの対象に感覚、注意を向ける仕組み
人間を含む動物の外界の捉え方
45感覚
選択的注意
動機(目的)
運動
関心対象
行動決定
選ばれた
感覚情報
(位置等)
シミュレーションによる動作生成
Jv = ω
ω = J
#v
運動制御
行動決定ルール
体の運動目標
・到達位置
・視線方向
到達目標決定
注意対象
•
注意対象を注視する
•
注意対象に触れる
v
物理
エンジン
v
F
視覚モデル
触覚モデル
触覚的注意
視覚的注意
v
F
Max
トップダウン注意
注意を惹き、人を呼び込むエージェント
会話の聞き手の動作生成(学習)
3人中一人が聞き手。聞き手の動作の法則は分かっていない
人間の会話を計測し、学習モデルを作る。
学習(教師あり学習)モデル
入力(話し手2人の動作)と出力(聞き手の動作)のペアをたくさん与える。
→入力を与えると、ありそうな出力を推測してくれる。
(U1=…, U2=…, A=…) (U1=…, U2=…, A=…) (U1=…, U2=…, A=…)
・ ・ ・