■ はじめに

こんにちは!プロンプト・ウサギです!


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開発は、機能を増やすだけでなく、使いながら育てていくことが大切なのかもしれませんね。

さて、次は弓を頭に貫通させずに、格好よく射るポーズを完成させたいと思います!