ウニの3Dアバター制作日記です!
ウニのリアルタイム3Dアバターを制作する過程を書き残していきたいと思います。
最新の状況
時代はAIだ!!!
・・・ということで、今流行のChatGPTのような対話型AIをUnityを用いてリアルタイムコンテンツで運用するフレームワークを試作しています。
![UnixoAI_Framework](assets/images/UnixoAI_Framework.png)
ユーザーの音声とリアルタイム映像からAIが最適の結果を予測するシステムになります。AI部分にはML.NETを利用した独自AIを搭載しています。ユーザーとAIによる音声のやりとりにはJuliusとVOICEVOXを利用しています。これらのコンポーネントは非常に優秀で無料かつ商用利用可能なものでUnityを使ってリアルタイムAIコンテンツを制作するのに敷居が低い環境になります。ML.NETをUnityで扱う方法は後ほどまとめようと思っています。
具体的な利用方法ですが、例えばゲーム画面をAIが状況分析してアドバイスを貰ったりナビゲーションしてもらったり。別の例ではサッカーの試合で背番号で選手を特定したり、オフサイドを即座に判定したり、音声で個人や試合のスタッツを教えてもらったりと考えれば考えるだけたくさんの利用方法があると思います。
AIを利用したリアルタイムコンテンツ開発にはしばらく時間がかかると思いますが少しずつ見える形で公開していこうと考えています。
VOICEVOXエンジンの使い方は以下にまとめてあります。
Juliusの使い方は以下にまとめてあります。
![julius](assets/thumbnails/julius.gif)
過去の日記
ここより下は過去の日記になります。
上下左右の回転を実装しました
![Unixo_FaceRotation](assets/images/Unixo_FaceRotation.gif)
左右の顔の面積比率で左右に回転させています。上下方向も同じロジックです。
![Unixo_FaceRotationY](assets/images/Unixo_FaceRotationY.png)
若干ピクピクするのを改善したいですね。
左右へ転がるようにしてみました
![UnixoRoll](assets/images/UnixoRoll.gif)
左右の目を繋いだ線分の角度をトランスフォームにアサインしています。
![UnixoRollLogic](assets/images/UnixoRollLogic.png)
Z軸回転と左右(X軸方向)に少し移動させて転がしています。
![UnixoRollTransform](assets/images/UnixoRollTransform.png)
まばたきさせてみました
OpenCVで顔認識してまばたきを実装してみました。
![unixo_blink](assets/images/unixo_blink.gif)
2つのベクトルの内積で求めた角度で瞼を動かしています。
![unixo_blink_dot](assets/images/unixo_blink_dot.png)
UnityでOpenCVを使う方法はこちらにまとめてあります。
![opencv](assets/thumbnails/opencv.gif)
目と口を付けてみた
![unixo20220809](assets/images/unixo20220809.gif)
目玉は球で瞼は半球を2つ用意して上瞼(青)と下瞼(赤)にわけて作りました。
![unixo20220809_eyelid](assets/images/unixo20220809_eyelid.gif)
口は複雑な変形をしたいのでブレンドシェイプを使って作りたいです。
細分化して追加した頂点のみ伸ばしてみた
![computesubdivision](assets/thumbnails/computesubdivision.gif)
上記記事で紹介した方法で三角形に中点xを追加して伸ばすことにしました。
![ComputeSubdivisionMethod](assets/images/ComputeSubdivisionMethod.png)
この方法だと伸ばした頂点xに隣接する頂点は伸ばされることがないのでキレイなトゲの表現ができます。
![Unixo3d_Needles](assets/images/Unixo3d_Needles.png)
頂点数を増やすべく細分化してみました
続いて試したのはメッシュを細分化して頂点を増やしてトゲをキレイに表現しようとしました。 ランダムで伸ばす頂点を選択すると隣接する頂点を伸ばしてしまう場合もあるので見た目的によくありません。 ランダムでトゲを伸ばすのは諦めました。
![ComputeSubdivisionUni](assets/images/ComputeSubdivisionUni.png)
ウニのトゲを作ろうとするも
球の頂点をランダムで法線方向に伸ばしてみました。
隣接する頂点も一緒に伸ばしてしまったりしてうまく調整できず。
![ComputeParam](assets/images/ComputeParam.png)
関連ページ
こちらのページも合わせてご覧下さい。
![julius](assets/thumbnails/julius.gif)
![opencv](assets/thumbnails/opencv.gif)
![computesubdivision](assets/thumbnails/computesubdivision.gif)