多関節アルゴリズム ~その1~
最近はボスの尻尾をどうやって動かすかで頭がいっぱいです。
色々調べたり、思考を重ねて、なんとなくこんな感じで動くかなと言う方法が浮かんだので、開発環境にテスト用の別プロジェクトを立ち上げました。
ここで実験を繰り返し、まともに動くようになったらそのまま本体のプロジェクトに移植するつもりです。
とりあえず関節一つ一つがもつデータを収納する変数を構造体でくくって、配列にして使います。
付け根側から一つとなりの関節との角度を末端に向かって決定していくと、各関節の座標が割り出せます。
関節間の距離を r とすると、各関節の座標は
X = r × cosθ + (ひとつ手前の関節のX座標)
Y = r × sinθ + (ひとつ手前の関節のY座標)
って感じで表せます。
r は変らない値です(今回の関節に伸縮の要素はないため)ので、各関節の位置は角度の値のみによってきまります。
つまりこの角度をどう動かすかが多関節のアルゴリズムとなります。
「多関節」で検索すると、インバース・キネマティクス( I・K )と言う概念がよく出てきます。
関節の末端を任意の位置に移動させる場合に、付け根側からではなく末端側から一つ一つの関節の角度を逆算的に求めてゆく方が、付け根側から計算するより簡単で効率的だという考え方です。
本気で勉強したわけじゃないんで浅い知識ですが、実際に絵を描いてみると感覚的につかめます。
ペダルに足を乗せて自転車を漕ぐ絵を描く事を想像してみてください。
股関節からまず腿の角度を決めて描き、次にひざの角度を決めてスネの部分を描き、足首を経て足を描いたとき、あらかじめ描いておいたペダルに自然な形で足を乗せるのは相当絵を描きなれている人じゃないと非常に難しいです。
やってみれば解ります。
そこで、まずペダルの上に足を描き、股関節の位置を見た上で足首と股関節から同じくらいの距離の「この辺かな」と思う位置に膝の点をとってすね部分を描き、あとは膝から股関節までを腿を描いてつなぎます。
こちらも普段絵を描いていない人には難しいかもしてませんが、股関節側から各関節の角度を決めて描いていくよりは遥かに簡単です。
描いてみれば解ります(笑)。
で、最初はこの I・K の概念を使って実装することを必死で考えたんですが、どうも今回の動きにI・Kは向いてなさそうと言う結論に達しました。
今回の多関節は、末端の位置が重要なのではなく動き方自体が重要だからです。
あくまで尻尾の付け根だけが動きに意思のある部分で、そこに加えられた運動エネルギーが末端方向へ各関節を伝わり、尻尾はしなって鞭のように振られる。
この動きの表現に I・K は向かないと思います。
(もちろん僕の勉強不足の可能性がありますが・・・)
I・Kはシューティングゲームにおいては末端が自機を追ってウネウネ動くような触手などの表現に向いています。
ですので、今回は物理的に自然に見える鞭の動きを目標にして、地道に付け根側から各関節の角度を計算する方法でアルゴリズムを作るつもりです。
もちろん真面目に物理計算をやるつもりはありません(笑)。
あくまで『まるで真面目に物理計算したかのように』見えればOKです。
とりあえず、一つ手前の関節との角度を1フレーム1度ずつ増やしていって、ぐるぐる巻きになる動きをテストで作ってみました。
ここから思った動きになるまでは、相当険しい道になりそうな気がします。

右下が付け根です。
びよーんと丸まってきて・・・

くしゃくしゃに小さくなってしまいます。
角移動量が180度を超えると、こんどは開いて伸びてスタート位置の直線状態へ向かいます。
最近はボスの尻尾をどうやって動かすかで頭がいっぱいです。
色々調べたり、思考を重ねて、なんとなくこんな感じで動くかなと言う方法が浮かんだので、開発環境にテスト用の別プロジェクトを立ち上げました。
ここで実験を繰り返し、まともに動くようになったらそのまま本体のプロジェクトに移植するつもりです。
とりあえず関節一つ一つがもつデータを収納する変数を構造体でくくって、配列にして使います。
付け根側から一つとなりの関節との角度を末端に向かって決定していくと、各関節の座標が割り出せます。
関節間の距離を r とすると、各関節の座標は
X = r × cosθ + (ひとつ手前の関節のX座標)
Y = r × sinθ + (ひとつ手前の関節のY座標)
って感じで表せます。
r は変らない値です(今回の関節に伸縮の要素はないため)ので、各関節の位置は角度の値のみによってきまります。
つまりこの角度をどう動かすかが多関節のアルゴリズムとなります。
「多関節」で検索すると、インバース・キネマティクス( I・K )と言う概念がよく出てきます。
関節の末端を任意の位置に移動させる場合に、付け根側からではなく末端側から一つ一つの関節の角度を逆算的に求めてゆく方が、付け根側から計算するより簡単で効率的だという考え方です。
本気で勉強したわけじゃないんで浅い知識ですが、実際に絵を描いてみると感覚的につかめます。
ペダルに足を乗せて自転車を漕ぐ絵を描く事を想像してみてください。
股関節からまず腿の角度を決めて描き、次にひざの角度を決めてスネの部分を描き、足首を経て足を描いたとき、あらかじめ描いておいたペダルに自然な形で足を乗せるのは相当絵を描きなれている人じゃないと非常に難しいです。
やってみれば解ります。
そこで、まずペダルの上に足を描き、股関節の位置を見た上で足首と股関節から同じくらいの距離の「この辺かな」と思う位置に膝の点をとってすね部分を描き、あとは膝から股関節までを腿を描いてつなぎます。
こちらも普段絵を描いていない人には難しいかもしてませんが、股関節側から各関節の角度を決めて描いていくよりは遥かに簡単です。
描いてみれば解ります(笑)。
で、最初はこの I・K の概念を使って実装することを必死で考えたんですが、どうも今回の動きにI・Kは向いてなさそうと言う結論に達しました。
今回の多関節は、末端の位置が重要なのではなく動き方自体が重要だからです。
あくまで尻尾の付け根だけが動きに意思のある部分で、そこに加えられた運動エネルギーが末端方向へ各関節を伝わり、尻尾はしなって鞭のように振られる。
この動きの表現に I・K は向かないと思います。
(もちろん僕の勉強不足の可能性がありますが・・・)
I・Kはシューティングゲームにおいては末端が自機を追ってウネウネ動くような触手などの表現に向いています。
ですので、今回は物理的に自然に見える鞭の動きを目標にして、地道に付け根側から各関節の角度を計算する方法でアルゴリズムを作るつもりです。
もちろん真面目に物理計算をやるつもりはありません(笑)。
あくまで『まるで真面目に物理計算したかのように』見えればOKです。
とりあえず、一つ手前の関節との角度を1フレーム1度ずつ増やしていって、ぐるぐる巻きになる動きをテストで作ってみました。
ここから思った動きになるまでは、相当険しい道になりそうな気がします。
右下が付け根です。
びよーんと丸まってきて・・・
くしゃくしゃに小さくなってしまいます。
角移動量が180度を超えると、こんどは開いて伸びてスタート位置の直線状態へ向かいます。
PR
この記事にコメントする
- ABOUT
やってやれないことはないっ!たぶん・・・
- カレンダー
04 | 2025/05 | 06 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 最新コメント
[11/09 CALL MY NAME]
[11/09 erin]
[08/18 うずランド]
[07/11 うずランド]
[06/23 うずランド]
- プロフィール
HN:
Call my name
年齢:
50
性別:
男性
誕生日:
1974/05/22
職業:
スロ屋店員
趣味:
いろいろ
自己紹介:
やる気だけはあるつもりです。
はい。
はい。
- ブログ内検索
- カウンター
- アクセス解析