KuMA Advent Calendr 2022 1日目の記事です.
みなさんアバターに強化学習,させたいですよね!?
この世界には Unity ML-Agents という,Unityで機械学習を行うことができる神パッケージが存在しています(しかも無料!).これを使ってアバターを動かしてみたので紹介します.
Unity ML-Agentsのサンプル環境
ML-Agentsはrelease_18,Unityは2019.4.22f1を用いました.
ML-Agentsの環境構築などに関する説明はこの記事では割愛します.公式のドキュメントが結構丁寧に書かれているので,そちらを参考にやってもらえればと思います.
今回はML-Agentsのサンプル環境の一つである「3DBall」を参考に学習させてみました.「3DBall」は,水色のキューブ型のエージェントがボールを落とさないように回転運動を学習するサンプルです.
このエージェントの厚みを薄く(高さを小さく)して,アバターが板を持ってボールを落とさないように動かすような場面を考えます.雑なイメージ↓
アバターが板を把持する部分には後述のFinal IKを用います.
Final IKについて
まずIKというのはInverse Kinematics(逆運動学)の略で,目標点に向けて腕の関節を動かす,みたいなやつです.あまり詳しくないですが,もともとはロボット工学でロボットアームを動かす方法とかからはじまったのかな(知らんのに語りたがるオタク登場).
CGのアバターを動かすときなどにも使います.例えばVRSNSでHMDを被ってバーチャル美少女になるとき,自分のコントローラの位置にアバターの手が追従(同期)しますよね.そのときにもIKが使われていることが多いです.コントローラ位置を目標点として,アバターの手や腕(のボーン)をいい感じに動かすような計算が行われています.VTuberが3Dの身体を動かすときにも多く使われているはずです.
Final IKは,UnityでIKを簡単に動かすことができるアセットです.神アセットで1万円くらいするんですが,不定期的に半額とかになっているので安いときに買うのがおすすめです.僕は情弱だったので90ドルで買った記憶があります.
(今(2022/12/1/0:45JTS)見たらサイバーウィークセールで50%オフの45ドルになっていました.)
今回は板の端に目標点となるCubeを配置して,ここにアバターの手を追従させるようにしてみます.アバターはVRoid Studioで作成したVRMモデルを用いています.
学習させてみる
与える報酬やエージェントの動作,ハイパーパラメータなどはサンプルそのままで学習させてみます.ボールが板の上にあるとき報酬+0.1,ボールが板から落下したとき報酬-1を与えます.
5000万ステップ学習後のモデルを適用すると,下のようになりました!
上手にできましたね.
ちょっといじってみる
サンプルはx軸,y軸両軸の回転だったので,この軸を減らしてみます.
報酬やハイパーパラメータはサンプルのままです.
今回紹介した方法は直接アバターを学習させているわけではなく,あくまで板がエージェントであり,勝手に動く板にアバターの手を追従させてそれっぽく見せるという方法ですが,わりといい感じにアバターが動いているように見えるのではないでしょうか.
今後はドラえもんのようなAIを作っていきたいです.
追伸
ポケモンSVのやりすぎでアドカレ初日から遅れてしまいました.申し訳ございませんでした.説明も雑になってしまったので,時間があるときにまた追記しようと思います.質問などあればお気軽にコメントください.ここまで読んでいただきありがとうございました.