Hybrid ccにおけるアニメーション が破綻しないための処理系の改良 修士論文中間発表 2005/10/25 上田研究室 M2 若槻 聡一郎 1 研究の背景および目的 Hybrid ccはハイブリッドシステム(離散的変化+ 連続的変化からなるシステム)の表現に適してい る 物体の運動 温度変化 制約を用いているため、直感的な記述で正しい アニメーションが表現可能 ※「直感的な記述」=物理の教科書に載っているよ うな式を(プログラムの記述にしたがって)そのま ま書くこと 2 研究の背景および目的 ただ、現状の処理系では直感的な記述で正しいア ニメーションが表現できているとは言いがたい 直感的でない記述を加えないと正しい動作をしない 自由落下+衝突 アニメーションが破綻してしまう ビリヤード 直感的な記述で意図した通りの動作を表現したい 3 Hybrid cc 並行制約プログラミング+連続的な動作を扱うた めの枠組み プログラムは以下の二つの部分の記述からなる ある時点での処理(point phase) ある時点からある時点までの間の処理(interval phase) 各記述は時間に関する微分方程式からなる 他の多くのツールと異なり、変化の大きい場所の データを詳細に生成してくれる(他のツールは一 定時間ごとのデータを出力することが多い) 4 並行制約プログラミング エージェント(制約ストアとやりとりを行う計算主体)と制 約ストア(制約の集合)で構成 エージェントには2種類ある X = 10 tell : 制約ストアに制約を追加 ask : 制約ストアにおいて制約が満たされているかを調べる X’ = 0 if x>0 then x’’=-10 if x>0 then x’’=-10 x’’=-10 エージェントの集合 tell ask x’ = 0, x = 10 tell x’ = 0, x = 10 x’ = 0, x =10, x’’ = -10 制約ストア 5 Hybrid ccのプログラムの記述 連続的な変化を表現するための構文とし てhence構文を用いる Hybrid ccのプログラムは一般的に以下の ような形になる //初期値の記述 hence{ //interval phaseでの記述 if … //point phaseへ切り替わる条件の記述 } 6 Hybrid cc の計算モデル 初期状態はpoint phase 以降point→interval→point→…の繰り返し point phase 解あり 制約伝播 stable point 解なし abort 制約ストアの状態が変化 (ある条件文が満たされた) stable point 解あり interval phase 解なし abort 制約ストアの状態に変化なし 7 Hybrid ccにおける状態集合 Γ : エージェントストア σ : 制約ストア next : 次のphaseで実行されるプログラムの集合 else : else文の集合 8 各phaseでのアルゴリズム point phase, interval phaseで共通 ① に対してΓ内のエージェントをσにいれ、制約を解 いていく ② σが矛盾 ⇒ return 0(Constraint error) ③ elseが空 ⇒ return 1 ④ elseから1つのelse文(if c else A)をとってくる。 ⇒ ③へ ⑤ Γ→(Γ, A)としてインタプリタを実行。 否定情報の処理 結果が1 かつ ⇒ return 1 ⑥ バックトラックによって⑤を実行する前の状態まで戻り、 Γのままでインタプリタを実行。 結果が1かつ ⇒ return 1 上記以外の場合 ⇒ return 0(Default error) 9 アニメーションが破綻する例 一つの物体に対して複数の物体との衝突 が同時に起こったときにDefault errorが起 こる 同時に衝突 Default error 本当は左側のボールが水平方向に 跳ね返ることが期待される? (c.f 部屋の角への衝突) 10 原因と思われる箇所 -vオプションをつけてログを追ってみた 気になるところが3つ Triggered constraint is… Last statement executed was: Unexpected failure! 11 Triggered constraint is… if文を満たした時にでてくる。これが同時に 2回起こっている Default error(else文を選ぶ順番によって 結果が変わってしまうときのエラー)の原因 ⇒“if X else Y, if Y else X”と同様? ⇒だとすると、処理系は正しく動作している 12 Last statement executed was: エラーが起こる前に実行していた文 この例ではc = (A.py+((B.py)))*1/(A.px+(-(B.px))) このこの文を削って実行したらDefault errorは起こらなくなったが、衝突時刻以降 の速さが発散していた 13 Unexpected failure! 処理系を見た限りでは、 “Triggered constraint is…”と同じくデフォルトエラーに 関係がありそう まだ調べ途中 14 解決方法の案 値をずらす 衝突する時間をずらす 位置をずらす 制約を合成する 複数の解の平均値を取る 制約自体を合成する 15 実験:衝突時間をずらす 衝突の時に片方のボールがないと仮定して衝突 させる 衝突直後のパラメタを初期値としてもう片方の ボールと衝突させる ⇒どちらに先に当たるかで挙動が異なった 16 現状の考察・課題 処理系としては正しく動作しているようだが 期待した通りに動いているとはいえない 思い付いた解決方法について、具体的な 方法を考えて試す必要がある 17 目標 Hybrid cc処理系の改良を行い、物体が同 時に衝突するような例で期待通りの動きを するような実装を行う 下のような例も動くことが期待される 18 参考文献 Bjorn Carlson, Vineet Gupta : Hybrid cc with interval constraints, 1997. Bjorn Carlson, Vineet Gupta : The hcc Programmer’s Manual, 1999. 石井大輔 : 制約に基づくアニメーション作成シス テムGrifonの設計と実装, 2004. 飛田伸一 : ハイブリッド並行制約プログラミング における多物体衝突モデルの高速化, 2005. 19 20 図置き場1 ? 区間値 壁 壁 ? 区間値 通過 21 図置き場2 22
© Copyright 2024 ExpyDoc