見出し画像

Unity Naninovelビルドサイズ削減 その2 キャラクターテクスチャ設定

で背景のテクスチャ設定について考えた。今回はキャラテクスチャについて。

ノベルゲームでは表情差分用に画像を複数用意するのが一般的。なので高画質な画像を使っていると重くなりがち。
Unity Naninovelでトータルビルドサイズを軽くするために、キャラの表情差分テクスチャどう扱えばよいかについて考える。(Naninovelに限らずUnityで扱うテクスチャの基本的な考え方は一緒のはず)

前提

ビルド環境
Win10 + Unity 2019.4.22f1 (64-bit) +Naninovel v1.16pre
Naninovel設定解像度: 608*1080
※1920*1080をベースに設計(スマホ、PCの両対応)
してそこからトリミングしている
1つのキャラ表情差分が10個あるとする。
1180*2048サイズのキャラを扱う。

扱うキャラは、自作ゲームで使用しているメインキャラのテクスチャ


結論

1,インポートするキャラ画像は、ゲーム画面の解像度に最適化した幅/高さにしておく。

2,インポートするキャラ画像の解像度は幅/高さが4の倍数にする
※2のべき乗にしておくとなおよい。

3,Naninovel Character Implementationそれぞれのビルドサイズ比較は
live 2d Characters < Diced Sprite Characters < Sprite Characters

※メモリ使用量は考慮しない。

解説


1、インポートするキャラ画像は、ゲーム画面の解像度に最適化しておく

ゲームの解像度が1920*1080の解像度とするのであれば、それに収まる解像度にする。例えば、縦のサイズが1080以上だとスクリプトから画像縮小して呼び出す事になるが、画面上で縮小されてもビルドサイズは変わらない。
ビルドサイズを削減したいのであれば、ゲーム解像度に合わせてキャラ画像の解像度に決めておく。

2、インポートするキャラ画像の解像度は幅/高さを4の倍数にする

これを気にせずに適当な画像解像度でインポートすると

Only textures with width/height being multiple of 4 can be compressed to DXT5 format
(DXT5形式に圧縮できるのは、幅/高さが4の倍数のテクスチャのみです。)

と警告がひそかに出てる。そして強制的に圧縮形式None(無圧縮)と同等になりサイズが爆増する。ファイルひとつで9MBくらいのビルドサイズになってたりする。4の倍数の幅/高さに設定していればちゃんと圧縮してくれる。

3、Naninovel Characters Implementationの選択

Sprite Characters
最も一般的でシンプルなもの。
.jpg、.pngとかUnity上にインポートしたものをそのまま使用する場合はだいたいコレになる。

Diced Sprite Characters
テクスチャを細切れに抽出して、テクスチャの共通部分を再利用することで、ビルド時の容量削減が可能。
Diced Sprite導入についてUPMからの取得が必要。別途記事化

live 2d Characters
Live2D Cubism 2Dモデリングとアニメーションソフトで制作されたテクスチャとアニメモーションのデータ。1つの表情差分を1アニメーションとして扱う。
live2dキャラのインポートについては下記記事を参照。

テクスチャビルドサイズ比較結果


1キャラ表情差分画像10枚(1180*2048)1.6MB×10=16MB程度の場合

Sprite Characters : 23MB (1180*2048 ※×10枚分)
Diced Sprite Characters : 6.9MB (952*1904 ※変換後)
live 2d Characters:  5.3MB (2048*2048)

※live2dやDicedSprite動作に必要なライブラリ等のサイズは含んでいない(テクスチャに比べて軽い)ので、これらテクスチャサイズの差分が純粋にトータルのビルドサイズに表れるわけではない。

※画像によってはLive2dのテクスチャよりDicedSpriteの方が軽くなるケースもあると思う。

※導入の簡単さで言ったら
Sprite Characters > Diced Sprite Characters > live 2d Characters

この結果を踏まえて、Naninovelに使用するテクスチャの設定をちゃんと決めておき、ビルドレポートなどから最終的なビルドサイズを確認しておくのがよさそう。


おまけ

縦横サイズが二のベキ乗でないテクスチャをNPOT(Non Power of two)
縦横サイズが二のベキ乗であるテクスチャをPOT(Power of two)
という。

なぜ画像サイズを2のベキ乗推奨か?
調べると古いGPUには、2のベキ乗のテクスチャーしか対応していないものがあるらしいから、らしい。最新のものであれば気にしないでもよさそう。

2のn乗 リスト
n=0 : 1
n=1 : 2
n=2 : 4
n=3 : 8
n=4 : 16
n=5 : 32
n=6 : 64
n=7 : 128
n=8 : 256
n=9 : 512
n=10 : 1024
n=11 : 2048

参考にした記事リンク



この記事が気に入ったらサポートをしてみませんか?