39
アニメーション (物理シミュレーション) コンピュータグラフィックス基礎(第9回)

アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

アニメーション(物理シミュレーション)

コンピュータグラフィックス基礎(第9回)

Page 2: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

アニメーションの原理

原理◦ 少しずつ変化する画像を連続して表示することで物体やシーンの動きが認識される◦ 1秒間に30枚程度(FPS: Frame Per Sec)

2次元のセルアニメーション◦ 少しずつ変化する2次元画像を作成◦ 作成した画像を連続的に表示する

3次元のCGアニメーション◦ 3次元シーンを少しずつ変化させる◦ レンダリングによって画像を生成する◦ 作成した画像を連続的に表示する

Page 3: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

2D・3Dアニメーションの比較

2Dセルアニメ◦ 1枚1枚の絵を「ほぼ手描きで」作成する◦ 3次元シーン全体を作る必要がない(見えるところだけの情報でよい)

◦ 様々な変形、誇張表現、現実的でない動きが表現できる

◦ 後からの変更(視点の変更など)が原則できない◦ 複雑な立体形状の扱いが難しい

3DCGアニメ◦ 3次元シーンやキャラクタのモデリングに膨大な時間がかかる

◦ 形ができてしまえば、好きな視点から見た映像を作りだせる

◦ 動きを後から与え、編集できる◦ 破壊、炎上など複雑な物理現象の際限が難しい

Page 4: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

3Dアニメーションでの動きの生成

シーン内の移動◦ カメラ位置、向きの連続的な変更

物体の動き◦ 物理シミュレーション 剛体運動のシミュレーション 服、髪、煙、炎など様々なシミュレーション

人物の動き◦ モーションキャプチャデータなどによる動きの組み込み

Page 5: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

キーフレームアニメーション

◦ 全てのフレームの位置や向きを指定するのは手間がかかる。◦ 代表フレーム(キーフレーム)を用い、その間のフレームを自動的に補間する◦ 補間パラメータ:物体位置、向き、大きさ、色およびカメラパラメータ

Page 6: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

キーフレームの補間方法

単純直線補間 なめらかな動きの生成が困難

スプライン補間 スプライン曲線による滑らかな補間

Page 7: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

2006/7/10 Computer Graphics 7

キーフレームアニメーションの制御 テンションの制御

◦ 誇張表現

イーズイン・イーズアウト

◦ 速度変化を滑らかにすることにより、画面へのキャラクタの入り方、出方を滑らかに

Page 8: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

キャラクタ・アニメーション

パスアニメーション

◦ 曲線(パス)や曲面に沿って移動させ、自動的に姿勢を変えながらアニメーションを生成

◦ 物体、カメラ双方に利用

◦ パス上で様々なデータ(3次元位置や法線ベクトルの向きなど)を補間

Page 9: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

画像のモーフィング

◦ ある画像を別の画像に滑らかに変化させる手法◦ 画像Aと画像B上で、対応点を指定◦ 2枚の画像の混合比をもとに画像の2次元変換を行い、合成画像を生成

Page 10: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

形状変形アニメーション

パーティクル(粒子)の応用◦ 物理シミュレーション◦ 乱数を利用したパラメータの変化◦ 雨、噴水、滝、炎、煙 など

Page 11: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

形状変形アニメーション

自由形状変形(Free Form Deformation: FFD)◦ 柔軟な物体の形状変形を実現

◦ オブジェクトを囲む格子点を動かすことで内部の空間を変形、それに応じてオブジェクトを変形

有限要素法による変形の再現(シミュレーション)

Page 12: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

手続き型アニメーション

進化・生長のアニメーション◦ 植物の生長過程をモデル化し、自動でアニメーションを生成◦ 受光量や植生等の環境要因を考慮

物理法則・自然法則をシミュレートすることによる動きの生成

Page 13: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

手続き型アニメーション

自然現象 流体や火花など、不定形オブジェクトのアニメーション

流体:ナビエ・ストークス方程式(粘性流体の挙動を記述するための運動方程式)

Page 14: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

スケルトン法

キーフレーム法◦ 複雑な形状 → キーフレーム間の対応点が数くなる

スケルトン法◦ 動物、人間など、骨格形状が既知の対象にスケルトンを当てはめ、形状を変化

Page 15: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

2006/7/10 Computer Graphics 15

キャラクタ・アニメーション

フォワードキネマティクス 多関節物体を階層構造で表現 目的とする動作を得るため、各関節の回転角度を直接指定

初期位置

目標位置

Page 16: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

キャラクタ・アニメーション

インバースキネマティクス 目的位置を指定することで、その間の各関節角度を自動計算

逆運動学による動作付け(Inverse Kinematics)

解が一意に決まらない↓

効果的な制約条件の付与(曲がりやすさ、可動範囲など)

Page 17: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

キャラクタ・アニメーション

筋肉変形アニメーション

◦ 筋肉→骨→肉体→皮膚の解剖学構造をモデル化

◦ 筋肉の伸縮→骨→肉体の変形

Page 18: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

◦ 演者の実際の動きを測定し、動きデータを収集◦ 微妙で自然な動作を表現可能◦ 個人の形状、個人の運動 ⇔ 一般的なCGモデル

モーションキャプチャ

http://www.youtube.com/watch?v=19u7IBZ6dJ8

Page 19: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

モーションデータ

人体を多関節体として扱う

40程度の自由度関節の角度により人間の姿勢を表す

Page 20: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

骨格の自由度

基準点(腰)の自由度(位置+向き)6肘・ひざ :自由度1肩、首:自由度3◦ 各関節の角度の時間変化によって動作を表現できる

Popovic et al. © 1995

Page 21: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

表情のアニメーション

◦ FACS(Facial Action Coding System)に基づく幾何学変形手法

◦ 運動方程式に基づく物理変形手法

Page 22: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

布地のアニメーション

◦ ばね-質点系モデルによる変形予測

Page 23: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

リアルタイム・アニメーション

画像生成の高速化・簡略化◦ モデルの適応的な詳細度(LOD)制御◦ ビデオゲーム、テレビのバーチャルセット等

Page 24: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

動きの数値シミュレーション

動きを伴う物理現象をシミュレートする◦ 惑星の動き◦ 剛体の落下、衝突◦ 水・空気の流れ◦ 柔物体(布)の動き

Page 25: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

自由落下のシミュレート

y

時刻を与えれば位置が数式から定まる。

このような簡単な数式で表現できることはまれ。

空気抵抗があったら? 風が吹いてきたら?

Page 26: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

バネの振動

A

バネが1つだけなら簡単な数式で表現できる

複数のバネが連結すると数式で表現することが難しい

Page 27: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

物理シミュレーション(オイラー法)の考え方

時刻Δt後の位置を知るにはx(t+Δt) = x(t) + Δt v(t)

時刻Δt後の位置=現在の位置+微小時間×現在の速度

速度も時刻によって変化するv(t+Δt) = v(t) + Δt a(t)時刻Δt後の速度=現在の速度+微小時間×現在の加速度

加速度も時刻によって変化するa(t) = F(t) / m(t)現在の加速度=現在加わっている力/現在の質量(通常は変化しない)

力も時刻によって変化するF(t) = ? ← 物理現象によって異なる。例:バネの力、空気抵抗など

加えられる力がわかる→加速度がわかる→速度がわかる→位置がわかる

2次元平面なら、それぞれがxとyの値を持つ3次元空間なら、それぞれがx,y,zの値を持つ

※ 自由落下の場合は加速度一定

Page 28: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

自由落下の場合

時刻Δt後の位置を知るにはx(t+Δt) = x(t) + Δt v(t)

時刻Δt後の位置=現在の位置+微小時間×現在の速度

速度も時刻によって変化するv(t+Δt) = v(t) + Δt a(t)時刻Δt後の速度=現在の速度+微小時間×現在の加速度

加速度は一定(重力加速度)a(t) = g

(重力以外の)力は加わらないF(t) = 0

加速度一定→速度が更新される→位置が更新される

2次元平面なら、それぞれがxとyの値を持つ3次元空間なら、それぞれがx,y,zの値を持つ

Page 29: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

物理シミュレーションのアルゴリズム

// ループ処理1. 物体に働く力を求める

さまざまに働く力を合計する・連結しているバネによって加えられる力・空気抵抗・重力

2. 働く力を用いて加速度を計算する3. 加速度を用いて現在の速度を更新する4. 現在の速度を用いて現在の位置を更新する

描画更新

※物体に働く力さえ適切に設定できれば、後は決まったルーチン

Page 30: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

布のシミュレーション

布をどのような物理モデルで表現するか?

Page 31: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

スプリング・マスモデル

質点をバネのネットワークで連結する柔物体のシミュレーションで広く使われる

実装が容易

Page 32: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

Spring – Mass Model

各質点に働く力を独立に計算各質点の加速度・速度・位置を独立に計算

結果的に自然な布の動きが得られる

Page 33: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

物理シミュレーションのアルゴリズム

double dt = 0.01; // 時間の刻み幅double t = 0; // 時刻をゼロに設定while(true) { // ループ処理でシミュレーションを実行

1. 物体に働く力を求めるさまざまに働く力を合計する・連結しているバネによって加えられる力・空気抵抗・重力

2. 働く力を用いて加速度を計算する3. 加速度を用いて現在の速度を更新する4. 現在の速度を用いて現在の位置を更新する

描画更新if(シミュレーション終了) break;

t += dt; // 時刻を進める}

※ 物体に働く力さえ適切に設定できれば、後は決まったルーチン

全ての質点で計算

全ての質点で計算

全ての質点で計算

全ての質点で計算

Page 34: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

衝突判定

球と衝突(ワイヤフレーム)

球と衝突(面表示)

円柱と衝突(面表示)

Page 35: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

課題

Vector3d クラスの活用方法について学ぶ◦ C++の演算子のオーバーロードを用いることで、+ - * % などの記号による演算を自分で定義できる。◦ ベクトルの計算が簡単に記述できる。

Page 36: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

これまでの計算方法(x, y, z) の値を持つ3次元ベクトルのための Vector3d クラスを定義したとする。

(1) 値の設定Vector3d vecA;vecA.x = 1.0;vecA.y = 2.0;vecA.z = 3.0;

(2) 代入Vector3d vecB;vecB.x = vecA.x;vecB.y = vecA.y;vecB.z = vecA.z;

(3) 加算Vector3d vecC;vecC.x = vecA.x + vecB.x;vecC.y = vecA.y + vecB.y;vecC.z = vecA.z + vecB.z;

Page 37: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

サンプルコードに含まれるVector3dクラスを用いた場合

演算子がオーバーロードされているので、次のような記述ができる(1) 値の設定Vector3d vecA;vecA.set(1.0, 2.0, 3.0);

(2) 代入Vector3d vecB;vecB = vecA;

(3) 加算Vector3d vecC;vecC = vecA + vecB;

Page 38: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

課題

球の自由落下をオイラー法でシミュレートする

Page 39: アニメーション (物理シミュレーション)mitani.cs.tsukuba.ac.jp/lecture/old2014/cg/09/09...アニメーションの原理 原理 少しずつ変化する画像を連続して表示すること

// =======================================================// 一定時間ごとに呼ばれる。// ここで、対象物の物理量(力、加速度、速度、位置)を更新する// =======================================================void timer(int value) {

if(bRunning) { // シミュレーション実行中の処理

/* 加速度(ball.a)を設定する処理 */

/* 加速度に基づいて、速度(ball.v)を更新する処理(単純に現在の速度に加速度を加算すればよい)*/

/* 位置(ball.p)の更新(単純に速度を加算すればよい)

}

glutPostRedisplay(); // 描画内容の更新glutTimerFunc(10 , timer , 0); // 一定時間後にこの関数を再実行する

}