Vket Mall の入稿規定が死ぬほど厳しくて発狂したので、入稿できるラインまで何を最適化したかの話をまとめておく。
入稿物
そもそもなにを展示予定かというと、この衣装モデルを(モデル作者様に許可を取った上で)、素体に着せて展示予定。
入稿規定おさらい
最適化の話に入る前に入稿規定をみておきましょう。
うちは、ショップ分類の都合上、小物Bで申し込んだので
- スペースサイズ 1m x 1m x 2m
- マテリアル 3, SetPass 4, Batch 6
- 入稿パッケージサイズ 1MB
となっています。
スペースサイズの最適化
元々が小柄な子なので、高さは問題なし。
ただし、横幅が 1mなので、テストであってもTスタンスだとはみ出る。
故に、仮のポーズでもAスタンスに近い形にする必要があった。
と、この問題はそうそう問題ではありませんでしたね。
SetPass/Batch との戦い
さて、ここから本格的に辛くなります。メッシュ数とマテリアル数を相当数絞らないといけない。
メッシュ結合/最適化
まず最終的にマテリアルは3に抑えようと設計しました。
- 衣装モデル
- アバターの肌/顔
- アバターの髪
この三つです。
そのため、マテリアルごとに1メッシュになるようにメッシュを結合します。
この作業、Blender等でやってしまえるならその方がいいですが、Unity上でポーズつけたり、締め切りまでにアバター側の更新が入って対応が発生することを考えると、Unity上で処理しておきたいと今回は考えました。
そのため、
- 昔のVketスタッフの方が作った「Skinned Mesh Baker」でポーズをつけたモデル/衣装を通常Meshへ変換
- SimplestMeshBakerでマテリアル毎の単一メッシュへ変換
- これらを FBX Exporter で一度FBX化
- ImportしてFBXのMesh Compression を Medium に指定
ここで特に重要なのは最後の工程、FBX化と圧縮です。
通常のコンセプトワールドであれば、たかが、数百KB程度無視できることが少なくないですが、何せ今回は1MBという制限。MeshBakerなどで生成される非圧縮のMeshは、それだけで数百KBになってしまいます。
また Mesh Compression はせめて Low にしたかったですが、アバター/衣装のポリ数がそれなりにあったのもあり、Mediumまで下げざるをえませんでした。(Lowに比べて数百KB減る)
実は、今回一番ネックになったのがFBXで、この圧縮設定(さらにもろもろImport切った状態で)でさえ、アバター側 440KB, 衣装側 190KB であり、大半をもってかれました。
マテリアル最適化
この状態でテストすると、
- マテリアル 3, SetPass 6, Batch 6
SetPassがアウトです。
アウトライン付きのシェーダーを使うと、SetPassが2消費されるので、UTSは、no outline のものに変更します。 (これ、outlineなし版がないのシェーダ使ってる人大変そう...)
髪の毛は元の表現を残したかったが
- ステンシル付きのため、outlineを削っても2Passになる
- outlineつけても、Maskの解像度とMesh圧縮の都合でoutlineが汚い
- シェーダーが増えるとビルドサイズが増える(コンパイル後サイズなのでだいぶ小さいが)
ということで、NoOutline/ToonColor_DoubleShadeWithFeather に統一
なにはともあれ、これで
- マテリアル 3, SetPass 4, Batch 4
になったので、クリアです。
容量との戦い:テクスチャ最適化
さて、あとはテクスチャとのにらめっこです。
正直、どこか一箇所は 2Kテクスチャいけるでしょ?っておもっていたけど、そんな余裕微塵もなかった。
「Crunch圧縮」はもちろん「Alpha Source を切る」「Generate Mip Maps を切る」「Read/Write Enable を切る」といったことも、少しでも容量を稼ぐために行います。この削減が、Crunch圧縮の品質設定を1でもあげる容量を確保する...
- 衣装 メインテクスチャ : 1K, Crunch Normal 90
- 衣装 ノーマル : 512, Crunch Normal 60
- 衣装 リムマスク : 512, Crunch Normal 50
- 衣装 MatCap : 256, Crunch Normal 80
- 衣装 ハイカラーマスク : 512, Crunch Normal 50
- アバター肌 メインテクスチャ : 1K, Crunch Normal 80
- アバター肌 リムマスク : 512, Crunch Normal 50
- アバター肌 エミッション : 512, Crunch Normal 50
- アバター髪 メインテクスチャ : 1K, Crunch Normal 80
正直マスク系は白黒なのもあって既に10KB以下、メインテクスチャを削るしかなかった。
アバター作者様に申し訳ない気持ちしかでてこない圧縮設定で、心苦しい。
無事入稿
ここまでやって、最終パッケージサイズが 1022.87KB !
なんとか、入稿規定内に収まりました。
告知画像とか入れれるかな?とか当時考えてたけど、そんなとこにテクスチャを割く余裕など微塵もなかったですね...
蛇足
正直、色々費やして作ったものが、ここまで見た目を犠牲にさせられて展示せざるを得ない Vket Mall にかなり思うところがあります。(VketTool/Webがひどいバグまみれなのはおいといたとしても)
これに運営の工数割くくらいなら、コンセプトワールドのスペース数増やして欲しかった。いやほんっっとに。(今回の展示をMallの小物Bで、無理してやらざるを得なくなったのはそもそもそういうことなので)