投票
大犬太とCHPとCHEXA モーションの仕組み(長文)
CHPとCHEXAやるよ
スポンサーサイト
--年--月--日 (--) | 編集 |
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


モーションの仕組み(長文)
2008年08月19日 (火) | 編集 |
==キーモーションと補間モーション==

ここでは、便宜的に「キーモーション」と「補間モーション」という名称を利用します。
「キーモーション」とは、アクションを行うと、必ず発生する1フレームのモーションでどんなに機動性が向上しても省略されない、固定化されたモーションを意味し、
「補間モーション」とは、現在のモーションから、次の「キーモーション」までを、機動性に応じて必要なレーム数に分割して補間する、計算されたモーションを意味します。
また、補間モーションは、あくまでも次のキーモーションまでを補間するモーションであるため、
アクション時間が1フレームとなるキーモーションの場合、補間モーションは発生しません。
また、モーションとは、機体の体勢や姿勢、ポーズなどの総称して指します。

たとえば、アクション時間が3フレのキーモーションがあるとすると、
0fS←現在のモーション。
1f□←アクション実行。補間モーション1フレ目。
2f□←補間モーション2フレ目
3f■←キーモーション
こんなイメージです。

このキーモーションと補間モーションのフレーム数については、
nas_Bさんのアクション時間を参照してください。
積載率100%でキーモーションが発生するまでのフレーム数が、基本アクション時間となり、
積載率に応じて、実際のキーモーションが発生するまでのフレーム数が、アクション時間となります。

例えば、積載率100%(67%~130%であれば同じです)の月影の急速前進であれば
1歩目の踏み出しは基本アクション時間3フレで、キーモーションは1枚となるため

0fS←現在のモーション
1f□←急速前進の実行。右足を前に持っていく補間モーション1フレ目
2f□←右足を前に持っていく補間モーション2フレ目
3f■←右足が着地したキーモーション。
の合計3フレ、となります。

これが、積載率67%未満になると、基本アクション時間3フレのアクションは2フレに短縮されるため、
0fS←現在のモーション
1f□←急速前進の実行。右足を前に持っていく補間モーション1フレ目
2f■←右足が着地したキーモーション。
の合計2フレ、となります。

これがトリンカーの場合、
例えば、積載率100%(49%~130%)のトリンカーの急速前進だと、
1歩目の踏み出しが、基本アクション時間2フレのキーモーション2枚で構成されるため
  
0fS←現在のモーション
1f□←急速前進の実行。補間モーション。
2f■←右足を前に大きく進め、少し浮いたキーモーション
3f□←補間モーション
4f■←右足が着地したキーモーション。
の合計4フレとなります。

ところが、積載率49%未満になると、基本アクション時間が2フレのアクションは1フレに短縮されるため
0fS←現在のモーション
1f■←急速前進の実行。右足を前に大きく進め、少し浮いたキーモーション
2f■←右足が着地したキーモーション
と、いきなり合計2フレになるわけです。

ただ、最初にも書きましたが、どんなに機動性を上げてもキーモーションは省略できないので
トリンカーは加速を使っても急速前進が1フレで着地することはないです。

こんな感じで、各機体の各アクションによってどのモーションが省略可能かを調べると
いろんな動きを作るときに応用することが出来ます。

==補間モーションとキャンセルの話==
先にも説明しましたが、補間モーションは前のモーションと後のモーションの中間的なモーションです。
あくまでも計算式で計算された姿勢であるため、
多くの場合で、着地している補間モーションであったとしても
前のモーションや地形によっては、着地したり着地しなかったります。
そのため、補間モーションで着地していることを前提にキャンセルするようなプログラムを組むと、
着地しておらずinAirで失敗するといったことがよく発生します。ここは注意が必要です。

逆に着地するキーモーションでキャンセルすれば、inAirになることはまずありません。
とわいえ、それも100%ではなく、急な下り坂などでは着地に失敗することがあります。
こんな感じで、各アクションのキーモーションを把握することで効率よく、
キャンセルしていいフレームを把握できます。

==移動速度とモーション==(未確定記事)
まずはお断りです。
自分は、理系出身ではなくて、この辺に用語が正確に把握できていません。
ベクトルや慣性という用語の使い方が間違っていたら、ごめんなさい。

移動には軸足移動と慣性移動の2つがあります。

軸足移動は先ほどまでに説明した、着地と軸足による移動です。
これには慣性はなく、機動性による速度変化もなく、
機動性できまるアクション時間による大きくスピードが変化します。
基本的には脚のあるニ脚、多脚でのみ発生します。

これとは別に慣性移動は、本体自体がずれる(滑る)ことによる移動です。
これは、飛行、車両、ホバー、ニ脚(ジャンプ要素)、多脚(ジャンプ要素)で発生します。
こちらは、機動性に応じて直接スピードが変化します。
そして、移動速度は、各モーションの持つ加速力と機動性によって、決まります。

ひでさんの調査によるローケンの急速前進速度の調査を参考としますが、
グラフから加速と減速の特性を読み取ると、
減速する場合、速度が速いほど早く減速し、
加速する場合、速度が速いほど遅く加速しているようです。

これは、単純化すると

「移動量=現在の移動ベクトル×減速係数+モーションにより発生する加速力」

という式で移動量が計算されている言えそうです。
ただ、この辺は正確な式を出すのは大変そうなので割愛させてもらいますが
ちなみに、ローケンの積載率100%(丁度)の場合、で測定したところ
急速前進を1フレキャンセル(前進⇒急速前進⇒STOP1の繰り返し)について、

移動速度=現在の移動速度×減速係数0.865430088068524+加速力31.87

という計算と100フレ以上一致します。
ちなみに、1フレ~5フレのどのフレームでキャンセルしても、同じでした。
これは、同一モーション中は補間モーションであってもキーモーションであっても
同一の加速力と減速係数が適用されるということです。

これが、前進になると
移動速度=現在の移動速度×減速係数0.904838709677419+加速力15.93
となるので、(ただ、こちらはなぜか、速度表示と45フレーム目のみ一致しません。)

ゆえにモーションによって、減速係数も加速力も異なることになりそうです。

以下、余談ですが、

ひでさんの調査によると、ローケンの14Fの急速前進は
ラスト8フレームが加速するとのことなので
これを、アクション時間から、モーションに分解すると
低速モーション6F+高速高速モーション8Fの2モーションで、構成されているといえそうです。

これをさらに積載率で細かく分解すると

10F  37%~ 49%未満 低速4F高速6F
11F  49%~ 63%未満 低速5F高速6F
12F  63%~ 83%未満 低速5F高速7F
13F  83%~ 87%未満 低速6F高速7F
14F  87%~114%未満 低速6F高速8F
15F 114%~118%未満 低速6F高速9F
16F 118%~     低速7F高速9F
となります。
スポンサーサイト


コメント
この記事へのコメント
納得!
大犬太さん こんばんは。

2回読んで理解しました。
CHPの根幹を成す仕組みについての調査にひたすら感心です。

搭載率をどんなに下げて、加速装置をつけても実行される固定モーションを見つけ、それを考慮して行動計画を立てて行くと、
効率が良かったり、今までにないアクションを見つけやすいということですね。

私の調査を参考にして頂いて光栄です。
私も理系出身では無いのですが、大犬太さんの「理系出身ではない」とはレベルが違うようで、減速係数とか加速力とか言われても算出方法がサッパリです。
機会があれば算出方法についてご教授下さい。

急速前進のモーション分割は気づきませんでした。
6/14にnas_Bさんの「アクション時間」ではホイリーコーンの急速前進が間違った値が出てしまう旨、ご本人に報告させて頂きましたが、分割すると解決するということですね。
ローケンの急速移動が114%と118%という近似した値でアクション時間が変わってしまうのも納得です。

貴重な情報ありがとうございました。
2008/08/20(水) 18:53:54 | URL | ひで #mQop/nM.[ 編集]
またまたものすごく参考になる考察ですね!
「固定モーション」ですが、映像編集などで表示させたいフレームを「キーフレーム」と言ったりするので、「キーモーション」と呼称してもしっくりくるかもしれません。
2008/08/20(水) 19:38:59 | URL | ニナガワ #-[ 編集]
>ニナガワさん
なるほど、キーフレームという単語がデフォルトなんですね。
グーグルで検索したところ、
補完についても、補間がデフォルトのようなので、
近いうちに全面的に改訂しておきます。

ただ、フレームだとCHPの時間概念のフレームと被るので、
モーションという単語を利用しようと思います。

>ひでさん
トリンカーを作成している時に、
急速前進が49%で4フレななのに、48%でいきなり2フレになることが不思議だったのですが、
1つのアクションに、いくつかの分割ポイントがあると仮定すると説明がつくと分かったので
ちょっと調べて、文章にまとめみました^^;

また、移動速度のことを調査しようと思った時に、
ひでさんのブログに記事があったのを思い出して、参考にさせてもらったのですが、
丁度、モーション分割の理論で説明できる内容があったので、余談として記載させてもらいました。

ちなみに、計算式は・・・完全にチカラ技です。

①1フレーム目から、最高速度になるまで、全フレームの速度を記録します。
②最高速度の正確な数字が欲しいので、最高速度になってから、全フレームの移動距離を記録します。
③最高速度の移動距離から、最大速度を測定します。
 たとえばローケンの場合、13フレームの2.2mと1フレームの2.1mがループしていたので、
 最高速度は,(13f*2.2m+1f*2.1m)/14f*30f*3600/1000≒236.8286km/hとなります。
④「現在速度×減速係数+加速力=次の速度」という式を仮定すれば、
 最高速度が出た時点で「最高速度×減速係数+加速力=最高速度」が成り立つはずです。
⑤同様に、停止中の速度0の時点から加速であれば「加速力=1フレームの速度」も成り立つはずです。
⑥最高速度を③で求めたので、④に代入して式を変形すると
 「減速係数=1-加速力/最高速度236.82876km/h」となります。
 これで、加速力が決まれば、減速係数も1意に決まりことになります。
⑦また、⑤で、「1フレーム目の速度=加速力」と同じであることも判っていますので、
 1フレーム目の速度が決まれば、減速係数が決まることとなります。
⑧1フレーム目の速度は、①で記録しましたが、
 ①の速度は小数点以下が四捨五入されているので、正確な速度がわかりません。
 そのため、最高速度になるまでの速度が1フレ単位で完全一致する初速を0.01km/h単位に計算して確認しました。
⑨その結果、「31.87km/h」の前後0.02km/hぐらいが最高速度のでるフレームまでの速度と一致するため、
 便宜的に、中間値である「31.87km/h」を加速力としました。
 
こんな感じです^^;;
2008/08/21(木) 00:37:35 | URL | 大犬太 #JalddpaA[ 編集]
CHPのシステムに深くメスを入れる考察、非常に参考になります。
これほどまでに深く掘り進めたことに、もうただただすごいとしか思えません。
補間モーションの加速力、減速定数は固定モーションと同じというのが色々利用出来そうですね。
モーション分割の話は、加速フェーズとか適当に呼んでいただけに目から鱗でした。
チップで指定する動作は、いくつかの動作を連続で行うものであると理解すれば良いのでしょうか。
この記事を頭に入れておけば、手探りだったスプー機動やキャンセル機動の作成が楽になりそうです。
今後、キャンセル機動を作る時に活用させていただきます。
2008/08/21(木) 01:55:08 | URL | スクリーン #-[ 編集]
>スクリーンさん。
こんばんわ。
自分も思いつきで書いているので使っている用語があまりよくないかもしれませんが、
簡単に用語定義をまとめて置きます。

・チップで指定する一連の動作を、1アクションと呼びます。
・1アクションは、複数のモーション(或いは単数のモーション)で構成されます。
 つまり、1チップの一連の動作=1アクション=nモーション(nは1~∞)です。
・各モーションは、基本アクション時間とキーモーション、減速係数、加速力などを持ちます。
・各モーションは、実際に適用される際、機動性に応じて、アクション時間が決まり、
 アクション時間が2フレーム以上の場合はキーモーションが表示される最終フレームの前に
 補間モーションが差し込まれます。

といった感じでしょうか。
実際に活用する場面は少ないと思いますが、頭の隅にいれておいていただければ幸いです。
ということで、スプー機、期待しています^^;
2008/08/21(木) 03:00:35 | URL | 大犬太 #JalddpaA[ 編集]
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。