色をLuma(輝度)とChroma(彩度)で表し、Chromaの方だけを圧縮すると比較的高品質になるという手法です。ChromaPackは1ビットのアルファしか対応していないので、半透明を表現できません。そこで、ChromaPackとほぼ同じ方式で半透明も対応したものを作ってみました。github.com圧縮の概要まず、RGBをYCgCoに変換。ChromaPackで使っているYCbCrより計算が簡単。行列演算が高速であればYCgCoもYCbCrも計算速度は同じっぽいので要検証。Cg・Co・Alpha成分を以下のどれかで保存。4bppのブロック圧縮(PVRTC、ETC1、DXT1)。幅と高さを半分にして、RGB565かRGB24。結果的にサイズは、8+4=12bppとか、8+6=14bppとかになります。クリックすると圧縮テクスチャが同じフォルダに出力されます。生成されるようになっています。AssetImporter.userDataに、元画像のGUIDや出力フォーマット等を書き込んでいます。例128x128の半透明テクスチャを圧縮して描画した例です。酷くセンスが悪いですが、半透明のUIを想定しています。黄色が今回の手法、白字が他の普通の手法です。ETC2が使えることになっているので、ETC2を使いましょう。それ以外の端末向けには本手法も利用価値があるかもしれません。普及率をUnityのサイトで確認した限りでは、1年後には新規開発ではES2以下を無視する時代になってそうですが...。上の方法だとその辺も問題無さそうです。以前、9-Patchのために、16ビットのスプライトシートに32ビットを簡単に埋め込む方法を研究したりしたんですが、それに比べると何倍も役に立ちそうな感じがします。懸念点メモリ上ではなくディスク上でのサイズをちゃんと確認した方が良さそうです。32ビットのままlzmaで圧縮した場合より大きくなることも多分あり得るので...。月別アーカイブはてなブログをはじめよう!yoda_nさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。