みことし堂 2023/02/02 17:40

進捗報告202302

◇今月の配布物

今月も成果が見れる状態までまとめられなかったためおやすみに…
というのも寂しいので、代わりにここ数日で進めていた検証について軽くまとめてみようと思います。

長文になってしまいましたが、お時間ある方はぜひお付き合いいただければと思います。

◇検証したもの

今回検証したのはテスト用の構成で作ったLive2Dモデルの処理速度です。


テスト用なので動きも差分も最低限どころかほぼ作っていない、どころか表示順さえ調整していません。
モザイクやなんかを調整するための黒海苔ですらスカートの下にそのまま表示されてたりします。
ですのでデフォーマやパラメータも少なく、本来ならとても軽い動作になるはずのモデルです。

そして、ぱっと見は至って普通のLive2Dモデルですが普通のLive2Dモデルと違う点がふたつほど。

その1つ目がこれ。


どういうことかと言うと、実は、体、前髪、後ろ髪、服などとパーツごとに別のモデルに分けて、Unity上で重ねることでひとつに見せているモデルなのです。
よく、複数の画像を重ねて表情差分などを表現しますが、それのLive2Dモデル版ということですね。

Live2Dモデル内でもそういった差分の作成はできますが、その差分が多くなると非表示なのに処理をしている、みたいな無駄が多くなってしまいます。
その対策を模索中、というわけですね。

そして2つ目、どちらかといえばこちらのテストがメインですが…
実はこのモデル…


ほぼ全てのパーツで影やハイライトを統合していません。線画すら別レイヤーです。
それでいて、足ならばふくらはぎ、膝、太ももといったようにパーツごとに分かれているためおそらく通常の4~5倍の情報量があります。

まぁ早い話が、未統合&未整理PSDをそのままLive2Dにインポートした、ということですね。

ではなぜこんな、重くなるのが確定的に明らかなことを実行に移したかというと…
実はUnityにインポートしたLive2Dモデルはパーツ毎に色をつけられるのです。
もちろん影やハイライトを統合してしまっていても色をつけることは可能ですが、全て同じ色で補正がかかる関係上満足いかない形になることも多いので…


こうして影やハイライトを分解しておくと、このように別の色をつけることも可能、というわけです。

と、いうわけでこのテスト用モデルの負荷に関する検証が以下になります。

◇検証結果の前に

検証結果に触れる前に、こちらの画像をご覧ください。


これは、Unity標準の機能を使ってテスト用シーンの処理にどのぐらい時間がかかるかを調べたものです。
この処理にかかる時間の合計値が小さければ小さいほど高いFPSが出せます。
うちが目標としている60FPSでゲームを動かすにはこの合計累積値が16ms(ミリ秒)以内でないといけないとのことです。

色々な数値があってどこを見ればいいかわからなかったりもしますが…
今回はとりあえず「PlayerLoop」という数値に着目してみました。

上記の画像でPlayerLoopの値は0.137msですね。
何度か調べたところ大体0.2~0.3ms以内に収まっていましたのでこの値を基準としようと思います。

◇検証結果

テスト用Live2Dモデルをテスト用シーンで表示させたのがこちらです。


上記の通り、PlayerLoopは2.24ms、つまりモデル単体で大体2ms程度かかっていますね。

ではモデルを2体、4体、8体と増やしていったら?
というのが以下になります(モデルのスケールはただのミスです)。


結果はまぁお察しの通りですね。
4体の時点でPlayerLoopは4倍近い8.85ms、累積時間に関していえば13.80msと既に限界が見えてしまっていますね。

更に


体、前髪、後ろ髪と最低限の構成の場合のPlayerLoopは1.87ms、服装込の場合と大体0.3~0.4msの差が出ました。
意外と無視のできない数値ですしここもなにか対策が必要そうです。

ちなみにこのテスト用シーンに前作NurseryDimensionの主人公のLive2Dモデルを表示させた場合


PlayerLoopは5.68msという値になりました。
最適化の甘さが如実に出てしまっていて非常に恥ずかしい限りではありますが、それはそれとして…

前作のように主人公がいて、主人公のみがベースで、主人公以外に重たいキャラがいなくて…
みたいな普通のゲームならこのモデルでもなんとかなるのかもしれないけれど、というのが率直なところです。

◇まとめ

ほとんど何も実装されていないモデルでも4体表示が限界、となると流石にやりたいことはできそうにないので仕様を変更しないといけない、という結論になりました。
最も、こうなりそうな予感がしたからこそ最低限すら整えずにテストに踏み切ったわけなのですが。
Live2Dへインポートする前の段階で既に、レイヤー数が多すぎてこれはだめぽとなりましたよ、ええ。

なお、今後の予定としては…

影等を統合して普通に作った場合の処理速度や髪等の差分の作り方でどの程度処理速度に差が出るのかなど、調べたいことがまだ残っているのでそれらを調査してから本作成に入ろうと思っています。

また、どのような方向に転換するかについては既にある程度の目星は付いていますが…
Live2Dの仕様についてももう少し情報を集めたりしないといけないな、と思っているので作業再開は少し先になりそうです。
ちょっと調べただけでもCubismSDKの中身に手を入れないといけなさそうな気配がプンプンしたりもしますしね…。

カスタマイズ性極振りという現在の状態からどのあたりまで処理速度に振ればいい塩梅になってくれるのか、
どの程度スクリプト部分に手をいれる必要があるのかなど…まだまだ前途は多難のようです。


今回は以上です。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事を検索