220立ち絵アニメ編j:瞬きとリップシンクをゲーム画面で実験しよう!【美しょゲを作ろう】
友達の影響でBeatmania始めました、恒石涼平です。レベル4で苦戦してます。
今週は美少女ゲーム制作日誌、 #美しょゲを作ろう の続き。前回の記事で見つけた問題を実験していきます。
しかしまずは謝罪を。前回の記事完全にタイトル詐欺になってました、ごめんなさい。
「ゲームで動かそう!」とか言っておきながらそこまで辿り着かず、タイトル変えるの忘れてましたすいません。なんでこの人、記事書く前にタイトル決めちゃってるんだろうね、おかしいね。
……はい、今後は記事書いてからタイトル決めます。では気を取り直して作業へと入っていきましょう!
《Live2Dの残り作業!》
まずは現在の進行状況について。残っている作業は以下の通りです。
Live2Dアニメーションの実験
表情変化ごとの動作モーション複製、調整
涙などの必要な素材制作、モデリング
カメラ関係のアニメーション制作
残り4つですね、頑張って進めていきましょう。
《今日やること!》
今日やる内容としては「Live2Dアニメーションをゲームで動かした場合の、目と口の動きについて」を実験していきます。具体的に述べると……
モーション内で打っている「瞬き」中に、他のモーションに変わったときに動きがどうなるか
口の開閉をリップシンク(ボイスに合わせて動く機能)にする場合、台詞中に別モーションへ変わったときに動きがどうなるか
この2つを実際にゲーム上で動かしてみてどのようになるか実験します。
まあ恐らく前者は各モーションの冒頭に目が開いた状態のパラメータを打っておけば何とかなりそうですが……ともあれ試してみることで気付く事もありますからね。やってみよう。
《実験の準備》
まずは実験に必要なものを作って、制作中のゲームデータへと放り込んでいましょう。
モーションに関してはこれまで作ったやつをぶち込むだけでOKですね。どちらの実験もクリックしたときにモーションが切り替わるようにすれば試せるので、実際のモーションを活用していきましょう。
「表情変化」に関してはまだ書き出し方を書いてなかった気がするんだけど……まあ涙とかの足りない素材作ってからにしようか。忘れてないことを祈る。
そしてもう1つ必要なのが「ボイス」のデータ。
……と思ったらいつやったのか分からんけど、冒頭の10台詞だけ仮で書き出してました。どこかの記事でやったっけ……覚えてない。
とりあえずデータは揃ってたので、それぞれゲームデータへとぶち込んでいきます。
ボイスは「sound」フォルダに、Live2Dのモーションデータは「others」にあるLive2Dプラグインの方に入れて……
あとは実験用のシナリオデータを作れば準備完了です。ちなみにシナリオデータというのは以前にも出したことのあるこんな感じのやつ。
[cm]
@clearstack
@mask_short_bk
[live2d_show name="koiro" x=0 y=-0.4]
@layopt layer="message" visible=true
[layopt layer=0 visible=true]
[wait time=300]
[mask_off time=100]
[l]
[live2d_motion name="koiro" mtn="GenkiA"]
[live2d_expression name="koiro" expression="Syobo"]
[l]
[live2d_motion name="koiro" mtn="HeadUpA"]
[l]
[live2d_motion name="koiro" mtn="ArmUshiroA"]
[s]
「スクリプト」と呼ばれる文章を使って、ゲーム上で何をするのか、何を表示するのかとかを書いていくものになります。
こちらの後半部分にある「live2D_○○」と書かれた行が、Live2Dアニメーションを動作させるための命令文。現状だと1回クリックするとモーション「元気」を動作、そして表情を「しょぼん」にする感じ。
こちらを実験内容に合わせて……
クリック1回目で別モーション動作
クリック2回目で違う別モーション動作
クリック3回目で別の表情差分に変化
クリック4回目で別の表情差分に変化&ボイス再生
クリック5回目で別モーション動作
クリック6回目で別のボイス再生
クリック7回目で別の表情差分に変化
……こんな感じに組んでみます。1~3で「瞬き中のモーション変化」を実験して、4~7で「ボイス中のモーション変化」を実験できれば。
そして組んだスクリプトがこちら。
;クリック1回目:別モーション動作
[live2d_motion name="koiro" mtn="GenkiA"]
[l]
;クリック2回目:別モーション動作
[live2d_motion name="koiro" mtn="BodyYureA"]
[l]
;クリック3回目:表情変化
[live2d_expression name="koiro" expression="Syobo"]
[l]
;クリック4回目:表情変化&ボイス再生
[live2d_expression name="koiro" expression="Emi"]
[playse buf=1 storage="koiro/koi_1001.ogg"]
#小色
[l]
;クリック5回目:別モーション動作
[live2d_motion name="koiro" mtn="ArmUshiroA"]
[l]
;クリック6回目:別ボイス再生
[playse buf=1 storage="koiro/koi_1002.ogg"]
#小色
[l]
;クリック7回目:表情変化
[live2d_expression name="koiro" expression="Ika"]
[l]
ところどころにある"[l]"は「クリック待ち」の命令文です。クリックされるまで動作を止めてね、とお願いしてます。
よしこれで準備が整いました。では実験に移りましょう!
《実験をしてみよう!》
①瞬きとモーション変化
では1つ目、「瞬きをしている時にモーション変化が起きた場合の動作」を実験します。
各モーションの冒頭には目の開閉に関するパラメータを入れてないので、これで問題なく瞬きが行われるなら問題ないんだけど、目を閉じた状態で止まってしまう場合は「モーションの冒頭に目を開くパラメータを打つ」必要が生まれる。
……まあ特に影響なさそうだし、最初から入れときゃいいのではとも思うんだけども。仕様を知るのはいいことだから、うん。
んじゃ動かしてみましょう。1クリック目は「目を閉じたすぐ後にクリック」、2クリック目は「目を閉じ始めた瞬間にクリック」でいきます。
うーむ、分かりづらい。一応2回クリックしてます。
結果としては、どちらも目を閉じた状態が継続されることはないようです。気になったのでモーションファイルの中身を見てみたら……
こちら目の開閉に関する記述。数字だけ並んでて正直意味分からんけども……恐らく「時間軸or経過時間」と「パラメータの数値」が交互に書いてあるんじゃないかなと推測。
それを元に見てみると、どうやらモーション開始時にはパラメータ打ってないのに、恐らくデータ上では開始時の状態も自動で打ってくれてるみたいです。
一応別にモーション作って見てみたりもしたので恐らく理解は間違ってないはず。どうやら書き出しに含んだモーションは、冒頭に初期値を打っておく必要はなさそうですね。
……ちょっとややこしい話をしましたごめんなさい。ともあれ「瞬き中にクリックされても問題ない」ということが分かりました。
②リップシンクとモーション・表情変化
次に台詞に応じて動く口と、モーション・表情変化の兼ね合いを見ていきます。
今度は「ボイスを再生→クリックでモーション、表情を変化させる」という感じで実験します。これは分かりづらいから普通に動画でどうぞ!
クリックしてるタイミングが分かりづらいんだけど、0:07と0:16でそれぞれモーション・表情を変化させてます。そして口の動きは……うん、影響ないね。例えモーションが変わっても表情が変わっても、ボイスの音がある部分だけ口が開くようになってます。
つまり「リップシンク中にモーション・表情が変わっても問題なく動作する」ということが分かりました。
なので口の開閉に関しては特に考える必要はなさそう。リップシンクさん有能やでぇ……
《実験の結果!》
Live2Dのモーションデータは、書き出したパラメータの冒頭に「自動で現状のパラメータが打たれている」……っぽい
なので瞬き中にモーションを切り替えても問題なし
リップシンク中はモーション・表情変化しても問題なく動作する
という感じで、今日はすごい基本的なことを実験にて確認しました。改めて考えると「瞬き」を自動でしてくれる設定もあるんだけど、そっち使った方が楽だったかもしれぬ。
でも今回は状況によって瞬きの頻度や速度を変えたいから、現状のまま進んでいこうかなと思います。
……まあ自動まばたきの数値も調整できるっぽいんだけども、ティラノスクリプトでのやり方よく分かってないので。プログラミングの知識があればいいんだけども、そこまでの知識はないのだ……今後の課題としましょう。
長くなりましたが今日はここまで。進展はなかったけど、あと2回くらいで立ち絵アニメ編は終わらせたい所存です。終わればいいなあ……
では、また次回お会いしましょう!