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
※初期値では各値が255付近になっていて元の色と異なる場合があるため、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とは元テクスチャの縮小画像を段階的に保持した仕組みで、テクスチャが画面上で小さく描画される際に参照されます。
各レベルの幅と高さは、1つ前のレベルから半分(2の累乗分の1)ずつ小さくなります。
例:128×128pixelのテクスチャの場合、64×64や32×32などのテクスチャ群が順次生成されます。
UIなどMipmapが不要な画像は生成チェックを外すことでメモリ消費を抑えられます。
圧縮率の目安
- RGBA32bit → RGBA16bit:容量約50%削減
- RGBA16bit → PVRTC:容量約75%削減(元サイズの約25%)
- PVRTC → PVRTC(imesta7):さらに約25%削減(PVRTC比で約75%のサイズ)
Unityに関する他の記事は、まとめ一覧よりご確認いただけます。

2Dとスプライトの記事は、ほかにもあります。



まとめ
Mipmap:UIなど遠近変化のない画像はOFFにしてメモリを節約。
ディザリング処理:RGBA16bit減色時のマッハバンドを抑制。
PVRTC最適化:透明境界の処理やアルファマスクで輪郭ノイズを除去。
圧縮形式の選択:用途や画質と容量のバランスに応じて適切な形式を指定。
