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