■ はじめに
こんにちは!プロンプト・ウサギです!
3Dモデリングツールに、ついにIK(インバースキネマティクス)を導入しました!
これでキャラクターのポーズ作りが、ずいぶん楽になるはず。
ところが……。
新しい機能を使ってみたら、今まで気にならなかった問題が次々と見つかってしまいました。
今回は、IK導入から始まった、予想外の改修騒動をご紹介します。
1. IKが使えるようになったので、弓を射るポーズに挑戦!
これまでのFK(フォワードキネマティクス)は、肩、肘、手首などの関節を一つずつ動かしてポーズを作る方式です。
一方、IKは手先などの目標位置を指定すると、関節の曲がり方を計算してくれる仕組みです。
つまり、弓を引くポーズのように、手の位置が重要になる動作にはピッタリ!
さっそく弓を持たせて、弦を引かせてみました。
ところが……。
弓のつるがキャラクターの頭を貫通している!
これでは、弓を射るどころではありません(笑)。
どうやら腕の位置だけを調整しても、自然な弓の構えにはならないようです。
弓をまともに引かせるには、腕だけでなく身体全体を的の方向に向ける必要がありそうです。
そこで、キャラクターの回転機能を見直すことにしました。
2. FKの操作も見直すことに!
身体の向きを調整しようとしたところ、今度はFKの操作にも問題があることに気づきました。
問題① 関節を回すと座標の方向まで変わる
関節を回転させると、その関節を基準にした座標の方向も一緒に変わってしまいます。
例えば、腕をひねった後に別の方向へ動かそうとすると、最初に考えていた方向と違ってしまうのです。
これでは、分かりづらい!
そこで、座標の基準をワールド座標に統一することにしました。
ワールド座標とは、キャラクターの関節がどの方向を向いていても変わらない、3D空間全体の共通の座標です。
これなら、関節を回転させても操作の基準が変わりません。
問題②「前後」「左右」では分かりづらい
もう一つ気になったのが、操作画面の表現です。
「前後」「左右」と書かれていても、キャラクターの向きが変わると、どちらの方向なのか分かりづらくなります。
そこで、方向を具体的な座標平面で表現することにしました。
- XY平面:X軸とY軸で構成される平面
- YZ平面:Y軸とZ軸で構成される平面
曖昧な方向の表現をやめて、座標に基づいた操作に変更したわけです。
これで、FKの操作もかなり見やすくなりました。
ところが……。
3. 見やすくなったら、今度はバグが目立ってきた!
不思議なものです。
操作が分かりやすくなると、今まで見逃していた問題まで気になってきます。
そこで、さらに調べてみることにしました。
バグ① キャラクターの回転とポーズの回転が同じ?
キャラクターの向きを変えたいのに、ポーズ全体を回転させただけのような動きになっていました。
これでは、キャラクターの正面方向を自由に設定することができません。
そこで、ワールド座標を明確に定義し、ワールド座標に対するキャラクターの正面方向の角度差(位相差)を扱えるようにしました。
これによって、キャラクターの正面方向とポーズの向きを区別して管理できるようにします。
バグ② 一つのポーズを変更したら、他のポーズまで変わる!
これは困ります。
例えば、弓を射るポーズの正面を調整しただけなのに、他のポーズにも影響してしまうのです。
ポーズ保管庫には、いろいろな動作を保存しています。
弓を射るポーズを変更したら、斧を振るポーズまで変わってしまう……なんてことになったら大変です。
そこで、回転の変更が指定したポーズだけに反映されるように修正しました。
バグ③ 回転の変更がセーブデータに反映されない!
最後に見つかったのが、保存に関する問題です。
画面上では変更できているのに、セーブデータには反映されていませんでした。
これでは、せっかく苦労して作ったポーズも、保存して読み込むと元に戻ってしまいます。
そこで、回転の設定もセーブデータに正しく保存され、読み込み後も再現できるように修正しました。
4. 今回の改修で学んだこと
今回の作業を振り返ると、最初の目的は「IKを使って弓を射るポーズを作りたい」という、たった一つのことでした。
ところが、実際に使ってみると、
- IKだけでは自然なポーズにならない
- FKの座標操作が分かりづらい
- キャラクターの正面方向とポーズの回転を区別できない
- 一つのポーズの変更が他のポーズに影響する
- セーブデータに変更が反映されない
と、次々に課題が見つかりました。
でも、これは悪いことばかりではありません。
新しい機能を追加したからこそ、今まで見えていなかった問題を発見できたとも言えます。
そして、AIにコードの修正を依頼するときも、単に「ここを直して」と伝えるだけでは不十分だと感じました。
何を変更するのか。そして、何に影響してはいけないのか。
ここまで具体的に伝えることが、安全な改修につながります。
■ まとめ:一つ便利にすると、他のあらが目立つ!
アプリ開発では、新しい機能を追加すれば、それで完成というわけではありません。
むしろ、便利になったことで、今まで我慢していた操作の不便さや、隠れていたバグが目立つことがあります。
今回のIK導入は、ポーズ作りを便利にするだけでなく、3Dモデリングツール全体を見直す良い機会になりました。
AIと一緒に開発していると、こんなことがよくあります。
一つ直すと、別の問題が見つかる。
別の問題を直すと、また新しい課題が見つかる。
まるでモグラたたきです(笑)。
でも、少しずつ使いやすくなっていくのは楽しいものです。
AI開発は、機能を増やすだけでなく、使いながら育てていくことが大切なのかもしれませんね。
さて、次は弓を頭に貫通させずに、格好よく射るポーズを完成させたいと思います!



