fanbox post: creator/53638632/post/1705859
この記事は上記の前編のつづきになります。
ただアニメーションを読んでダンスするだけだと、普通のMMD動画と大差はないので、やっぱりビートセイバーさせたいですよね。セイバーを持ってノーツを切るようにしたいと思います。
プレーヤーのセイバーは奪いたくなかったので、3本、4本目のセイバーを生成して手の位置に配置します。この技術は NinjaSaber を開発したときに作っていたので、セイバーの生成自体には苦労しませんでしたが、手の中にセイバーを持っているように見せるため、微妙な位置と角度調整の試行錯誤が大変でした。
また動かしてみて、通常の1m以上の長さがあるセイバーだとすこし違和感があったので、サイリウムを振りながらダンスしている感じをイメージして、セイバーの長さも短めに調整しました。
twitter post: 1338976965605224448
上の動画ではトレイルが出ていませんが、これもあとで修正しました。このあたりはCustomSaber modのメンテナンスでひたすらトレイル処理のコードを読み込んだおかげで可能になりましたが、以前の知識では無理だったと思います。何が得になるかわからないものですね。
今回は、踊りながら自動で完璧にノーツを切ってくれるようにしたいので、ダンスの動きに完全に一致した譜面を作成する必要があります。
譜面には、各ノーツが何分何秒の時点で切られるべき、という情報が入っています。そこで、実際にセイバーを持ってダンスするアバターととも譜面を動かしてみて、各ノーツの切られるべき時間のセイバー位置を取得して、その位置にノーツが来る新しい譜面を出力するようにしてみました。
まずmodなしで動く普通の譜面を生成してみたのですが、これがもうひどくて心が折れかけました。ダンスの振り付けとして体の正面に手がある場合が多く、この動きをそのまま譜面にすると、視界を遮る「Vision Notes」というやってはいけない配置だらけになってしまいます。
twitter post: 1338935360693231618
これはひどい。
この後、MappingExtensionsの精密配置(Precision Placement)や、Noodle Extensionsも試しましたが、ノーツの飛び方があまり意図通りにならなかったのと、次に書く問題もあって、結局、自前のmod内でノーツの発生と移動を制御することにしました。
さきほど「各ノーツの切られるべき時間のセイバー位置」にノーツを配置する、と書きましたが、これで上下左右位置をきっちり合わせても、空振りするノーツがでてきます。というのも、アバターが持っているセイバーは前後にも移動していて、ぐるぐる回った時などは最大で1m程度、前後位置のずれが生じてしまいます。
厳密にやるのであれば、ノーツ速度から逆算して、ノーツの到達時間をずらす必要があるのですが、今回はノーツとセイバーのZ軸(前後方向)の距離が必ず一定になるようにmodでノーツ移動を制御しました。
文字で書くとわかりにくいですが、セイバーが前に移動したときはその分ノーツが後ろに移動し、セイバーが後ろに移動すればその分ノーツがこちらに近づくような制御になっています。これでセイバーの前後位置がどれだけ動いても、ノーツの到達時間のずれはなくなります。
0:55あたりからよく見ると、赤と青のハートの接近速度にずれがあるのに気づくと思います。これは赤が左セイバー、青が右セイバーの前後位置に対応して接近速度が変わっていいるためです。
「Vision Notes」だらけなのはどうにもならないので、視界を遮らないように小さいカスタムノーツを使うことにしました。結局、モーションから自動生成した譜面は遊べない代物でしたが、瞬間瞬間のセイバー位置に吸い込まれるようにノーツが飛んで来るのは、ちょっとおもしろい絵になったと思います。
前回書き忘れていたのですが、この「お願いダーリン」のMMDモーションを変換して使用できるのは体の動きだけなので、表情の変化は自分で作る必要があります。
技術的にたいしたことはしていないのですが、ひたすら動画再生を繰り返して、各時間に表情を割り振る地道な作業になります。前回も書きましたが、「お願いダーリン」は曲の中で怒ったり、嘆いてみたり、ころころ感情が変わる楽しい曲なので、表情があるのとないのとでは大違いです。
こんな感じでデータを作りました。左から開始時間(秒)、維持時間、どのイベントを発生させるか、になっています。
あとは、わたしの普段の動画でもやっていることなのですが、表情は瞬間的に変化すると不自然なので、1秒以下の遷移時間をかけて、なめらかに変わっていくような制御を入れています。また眼球も、サッケード*と言われる眼球運動を模した動きを入れています。
*一点を注視していても、無意識のうちに眼球が上下左右に動いている現象
これはビートセイバーMMD動画の2本目を作っていたときに気付いたのですが、AssetBundleにすると、BlendShape(表情)だけでなく、SpringBone(揺れ物の当たり判定)の位置や大きさも初期化されていました。(前編参照)
twitter post: 1342294548098162688
左下の顔アップカメラを見ると、後ろ髪が(横も)ずっとはねた状態になっているのがわかります。本来は髪が頭内に埋まらないために存在する当たり判定がおかしくなっていて、ずっと髪が外側に浮いている状態です。
1本目の動画のときも同じ問題は起きていたのですが、髪型のせいか初期状態のままでもそんな違和感がなくて気づかなかったんですね。(ちゃんと額に当たり判定設定したはずの前髪が、なぜか額に埋まるので、ちょっとおかしいとは思ってました)
この問題も、BlendShapeのときと同じように、SpringBoneの情報を別途保存しておいて、modで後から復元する形で対応しました。
twitter post: 1342454627371896832
おかしな後ろ髪の浮きはなくなりました。良かった!
他にもこまごまとしたパッチワーク的なことをして、最終的に見られる形にしているのですが、おおまかなところは紹介した以上になります。
このように、いつも思わぬトラブルに悩まされつつ、modを作っているのがわかっていただけたでしょうか。たまにはすんなり一発で動くものができて欲しいと願っているのですが、思うようにはいかないものです。
マニアックな内容な上、役に立つ知識でもないため、どこまでみなさんのご期待に沿えたのか、正直不安なところではありますが、また機会がありましたらこんな感じの記事を書きたいと思っております。よろしくお願いいたします。
なるるるるな / NALULUNA
2020-12-27 15:15:08 +0000 UTC