Chat GPTの出現あたりでいったんめげてしまったSnack Virtualだが、
退職を機会に再構築をしてみたいと思った
そのきっかけはいくつかある
Chat GPTの出現
Skywayサービスの終焉
Live2D Cubism 5.0の口パクの進歩(モーションシンク)
まず最初に、いままでのあまりにぐちゃぐちゃなシステムを見直すことにした
ただ一発でシステム図を完成させるほど知識がないので、ひとつひとつ進める
Cubism 5.0
![](https://static.wixstatic.com/media/d6e266_e8d1414ef3e94909aae2b00c8eda35f7~mv2.png/v1/fill/w_980,h_955,al_c,q_90,usm_0.66_1.00_0.01,enc_auto/d6e266_e8d1414ef3e94909aae2b00c8eda35f7~mv2.png)
Cubism 4.2の製品版を1年間購入していたが、期限が来てしまった
このため4096画素あるFeeのテクスチャアトラスのままだと保存さえできない
これだけのことで前回同様製品版を買うのは癪だ
今後のことを考えると、お金より時間が豊富にある
だったら無料版でなんとかしよう
ということで、Cubism 5.0をインストール
テクスチャアトラス編集→テクスチャ→テクスチャのサイズ変更 で4096→2048に
自動レイアウトでパーツを自動で置きなおして OK
保存しようとすると、「オブジェクトにパラメータが4つアタッチされている、無料版は2つまで」みたいなエラーが出る
「選択したオブジェクトのパラメータだけ表示」のボタンを押し、オブジェクト(パーツ)をひとつひとつ選択して、パラメータが3つ以上設定されているものはパラメータを削除していった
その後、モデリング→パラメータ→モーションシンク設定で口パクの確認
今回は母音のみの方法ではなく、基本で設定
ただ、もともとのFeeの素材の口パクがあまり適切ではなく、A/I/U/E/Oの口の形にならない
ここは今後の改善点
あと、まばたきと呼吸の設定をして、保存、書き出し
パラメータをがんがん削除していったので、今後動きが欲しいときは追加が必要
Unity
![](https://static.wixstatic.com/media/d6e266_5aa1bbb575bf4929b5b03a3783a89e46~mv2.png/v1/fill/w_980,h_746,al_c,q_90,usm_0.66_1.00_0.01,enc_auto/d6e266_5aa1bbb575bf4929b5b03a3783a89e46~mv2.png)
Cubismがアップデートされたので、Unityもアップデートすべきだろうと考え、
2023.2.7f1をインストール
Cubism SDKはUnity用はβ版だが、それをインポート
事前にUnityの3Dゲームに関して40本の動画を見て勉強したが…う~ん、よくわからん
あとから細かいところは修正するとして、必要なパーツを並べる
まずはFee本体とまばたき、呼吸をさせる
次にCubism 5.0のモーションシンクの口パクだが、動かない(涙)
まったくわからないので、ちょっと保留
次にTextとInputFieldの追加 日本語フォントの追加 BGMの追加
InputFieldに入力した文字をEnterでTextに表示するスクリプトまで動作OK
今回はSkywayのようなWebRTCサービスを使わなくてもブラウザ上で動くように、WebGLで公開しようと考えている
このため、この時点でWebGLでBuildして確認
次にFeeの会話をどうするか?だが、とりあえずwavファイルに書き出し、これを指定して再生するという簡単な方法とした
Bingで教わったとおり、AudioPlayerを作って、とりあえずUnity上では動作した
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class AudioPlayer : MonoBehaviour
{
public string url = "file:///C:/Apache24/htdocs/Fee_test.wav";
IEnumerator Start()
{
using (var uwr = UnityWebRequestMultimedia.GetAudioClip(url, AudioType.WAV))
{
yield return uwr.SendWebRequest();
if (uwr.result == UnityWebRequest.Result.ConnectionError || uwr.result == UnityWebRequest.Result.ProtocolError)
{
Debug.LogError(uwr.error);
}
else
{
var audioClip = DownloadHandlerAudioClip.GetContent(uwr);
var audioSource = GetComponent<AudioSource>();
audioSource.clip = audioClip;
audioSource.Play();
}
}
}
}
がなぜかWebGL上では 動かない(涙)
urlをずんだもんのサーバーにすると、WebGLでも動く
![](https://static.wixstatic.com/media/d6e266_05c1a8dcfa984c46bd465b7d4a3ba561~mv2.png/v1/fill/w_980,h_659,al_c,q_90,usm_0.66_1.00_0.01,enc_auto/d6e266_05c1a8dcfa984c46bd465b7d4a3ba561~mv2.png)
調べてみると、CORSが原因では?と予想
とりあえず保留
これが昨日までの進捗
現時点での課題をまとめると
保留:
モーションシンクの口パクが動作しない
PC内部の音声ファイルを設定するとWebGLでは音声を再生できない
未検討:
Unity -- Python間の通信 通信プロトコルも含めて何が最適か?テストはInputFieldの入力をCallbackしてText表示させればいい
Python側でFeeのパラメータを変えた時、ブラウザ上でちゃんと動くか?
Python側でFeeの音声ファイルを上書きして再生指示をしたとき、ブラウザ側でちゃんと動くか?
このあたりがすべて解決して、初めて部品が揃ったといえよう
次回は未検討1:Unity -- Python間の通信 にトライしよう
Comentarios