Unityのテクスチャ画像に関するTIPSをまとめました。
容量削減のためのディザリング処理、PVRTCの画質改善、圧縮形式のサイズについて紹介します。
画像素材の減色のためのディザリング処理について
容量節約のために画像素材は減色したいですが、UIはできるだけきれいに表示させたいものです。
半分のサイズで劣化も少ないRGBA16bitを選択する場合、そのまま変換するとグラデーション部分にマッハバンドが目立ってしまいます。
ディザリング処理を事前に行うことで、減色後もきれいに表示されるようになります。
Unityでもインポート時にディザリング処理をかけてくれるスクリプトがあります。
手順
- 下記リンクからデータをダウンロードして、Assets/Editorの中に「TextureModifier.cs」を入れる
- スクリプトを開き、
importer.textureType = TextureImporterType.GUI;をimporter.textureType = TextureImporterType.Advanced;に変更 - ディザリング処理したい画像(.png)のファイル名を「○○○Dither.png」のように末尾をDitherにしてAssetsに入れる
- インポート時に自動でディザリング処理される
ダウンロード:https://github.com/keijiro/unity-dither4444

Gimpでディザリング処理したものと比較して、スクリプト(unity-dither4444)の方がきれいでした。ディザリング処理も簡単なので非常に便利です。
PVRTCの画像をきれいに表示する方法
テクスチャ圧縮形式PVRTCを使用すると、画像の端が汚くなったり、アルファの抜け部分にゴミがついたりすることがあります。特に目立つものは以下の方法を試すと効果があります。
方法1:透明部分の最適化
透明部分を一度、後ろの画に対して最適な色で塗りつぶしてから透明にしてPNGで出力します。
- 下記リンクからスクリプトをダウンロード
- 命名の最後を「PVR.png」にする
- インポート時に処理が行われる
ダウンロード:https://github.com/keijiro/unity-pvr-cleaner
※サイズが大きいとかなり時間がかかるので注意
方法2:アルファマスクを使用
- 下記リンクからスクリプトをダウンロード
- Switch PlatformでiOSに切り替え
- 命名の最後を「with alpha.png」にする
- インポート時に処理が行われる
- シェーダーをSpriteWithMaskにして、マスクとテクスチャをアサイン
- ColorをRGBA(127, 127, 127, 127)にする
ダウンロード:https://github.com/keijiro/unity-alphamask
※デフォルトだとすべて256になっていて元の色になっていないため、127に設定します。
結果

- 方法1:上部にあった目立ったゴミが取り除かれた。ただし処理に時間がかかるのがネック
- 方法2:マスクを使うとクリアになりすぎて、意図したボケ具合が失われる可能性がある。ただしETC(Android)でも使える方法なので有効
テクスチャの圧縮形式のサイズについて
圧縮形式のファイルサイズの求め方
テクスチャの合計サイズの求め方は幅 × 高さ × bppです。
ファイルサイズのサンプル
※サイズは2のべき乗の正方形でMipmapを含むものです。PVRTCと記載していますが、ETC等も同サイズです。
| サイズ(Pixel) | RGBA 32bit | RGBA 16bit | PVRTC 4bits | PVRTC 4bits(imesta7) |
|---|---|---|---|---|
| 2048×2048 | 21.3MB | 10.7MB | 2.7MB | 2MB |
| 1024×1024 | 5.3MB | 2.7MB | 0.7MB | 0.5MB |
| 512×512 | 1.3MB | 682.7KB | 170.8KB | 128KB |
| 256×256 | 341.3KB | 170.7KB | 42.8KB | 32KB |
| 128×128 | 85.3KB | 42.8KB | 10.7KB | 8KB |
| 64×64 | 21.3KB | 10.7KB | 2.7KB | 2KB |
Mipmapについて
Mipmapとは各テクスチャの同じ画像を徐々に低解像度にしたもので、テクスチャが画面上で非常に小さい場合に使用されます。
各レベルの高さと幅は、直前のレベルより2の累乗だけ小さくなります。
例:128×128pixelのテクスチャの場合、64×64のテクスチャが生成される
UIなどMipMapが必要ない画像は生成のチェックを外すと軽量化できます。
圧縮率の目安
- RGBA32bit → RGBA16bit:圧縮率約50%
- RGBA16bit → PVRTC:圧縮率約25%
- PVRTC → PVRTC(imesta7):圧縮率約75%
まとめ
Mipmap:UIなど不要な場合はOFFにして軽量化
ディザリング処理:RGBA16bit変換時のマッハバンドを軽減
PVRTC最適化:透明部分の処理やアルファマスクでゴミを除去
圧縮形式選択:用途に応じて適切な形式を選び容量削減
