この記事はAkatsuki Advent Calendar 2018 - Adventarの4日目の記事です。
3日目は@sachaosさんの自作キーボードに挑戦した話(MiniAxe ビルドログ)でした。
はじめに
こんにちは、クライアントエンジニアのsanukin39です。
今回はモバイルでも利用できる画像圧縮フォーマットについての話をしようと思います。
最近の端末の性能向上によって新しい圧縮フォーマットを選択できるようになりました。今回はその中でもASTCというフォーマットを紹介します。
ASTCとは?
ARM社が開発した非可逆の画像圧縮フォーマット。2012年にOpenGLとOpenGL ESに採用されました。
画像を4x4 ~ 12x12のブロックに分割して圧縮することによって、1ピクセルあたり8bitから0.89bitまで容量を調整でき、フォーマットもフルカラー+アルファチャネル以外にも輝度や法線にも対応しており、とにかく用途が幅広く利用するプロダクトにおいて調整がしやすいフォーマットになります。
動作環境
ASTCを利用することができる動作環境について、特にモバイル(iOS, Android)に限ると以下のようになります。
ちなみにUnityで動作対象外の端末を用いてASTCを読み込むとtrue color扱いになり、ピクセルあたり32bit消費します。
iOS
A8プロセッサ以降、端末で表すとiPhone6以降
Android
OpenGL ES 3.2 and OpenGL ES 3.1+AEP GPUsといくつかのOpenGL ES 3.0 GPUs
動作端末のシェア
Appleは端末のシェアの公開をやめてしまったため、調査サイトを参考にしました。
下記サイトによると日本におけるiPhone6未満の端末の利用率は約2.5%でした。
The most popular iPhones - 2018
Androidに関してはGoogleが端末がサポートしているOpenGL ESのバージョンを開示しており、2018/10現在以下のようになっています。
- 2.0 21.1%
- 3.0 29.8%
- 3.1 13.6%
- 3.2 35.5%
Distribution dashboard | Android Developers
調査母数が世界であること、おそらく商用タブレットなどのゲームなどを行うように想定されていない端末も存在することから、このシェアをそのまま日本のアプリマーケットに当てはめることはできませんが、この割合を見るとAndroidでASTCを利用するのは躊躇しそうです。
実際に使ってみる
ARM社がASTCのエンコーダを公開していたのでそちらを利用します。
github.com
画像はUnityちゃんのイメージアルバムをお借りしました。
Image Album Vol.1 - Download - UNITY-CHAN! OFFICIAL WEBSITE
pngの画像をASTCにエンコードします。こちらの画像はTrueColorの場合約14mbになります
~/astc-encoder/Binary/mac-x64 ./astcenc -c ~/Desktop/CandyRockStar.png ~/Desktop/CandyRockStar-astc-4x4.astc 4x4 -medium
結果
容量
- TrueColor(tga) 14.6mb
- ASTC 4x4 3.7mb
- ASTC 8x8 918kb
- ASTC 12x12 407kb
4x4はあまり気になりませんが、8x8あたりから輪郭やグラデーションが怪しくなり、12x12だとキャラクターは厳しい印象でした。
Unityでの圧縮
Unityでは上記のツールを直接利用しなくても画像の圧縮設定からASTCを利用できます。複数のblockと圧縮の品質を選べるのでUnityで利用する分にはこれの設定で問題ないと思います。
まとめ
日本市場の95%以上のiPhoneが対応しており、品質と容量のコントロールがしやすいASTC、ダウンロード容量やロード時間の短縮のために採用を検討してみてはいかがでしょうか?
ここまで読んでいただきありがとうございました。
ライセンス表記
この作品はユニティちゃんライセンス条項の元に提供されています