Unity│知っておくべき!テクスチャ画像に関するTIPS 3選

Unityのテクスチャ画像に関するTIPSをまとめました。

容量削減のためのディザリング処理、PVRTCの画質改善、圧縮形式のサイズについて紹介します。

目次

画像素材の減色のためのディザリング処理について

容量節約のために画像素材は減色したいですが、UIはできるだけきれいに表示させたいものです。

半分のサイズで劣化も少ないRGBA16bitを選択する場合、そのまま変換するとグラデーション部分にマッハバンドが目立ってしまいます。

ディザリング処理を事前に行うことで、減色後もきれいに表示されるようになります。

Unityでもインポート時にディザリング処理をかけてくれるスクリプトがあります。

手順

  1. 下記リンクからデータをダウンロードして、Assets/Editorの中に「TextureModifier.cs」を入れる
  2. スクリプトを開き、importer.textureType = TextureImporterType.GUI;importer.textureType = TextureImporterType.Advanced;に変更
  3. ディザリング処理したい画像(.png)のファイル名を「○○○Dither.png」のように末尾をDitherにしてAssetsに入れる
  4. インポート時に自動でディザリング処理される

ダウンロード:https://github.com/keijiro/unity-dither4444

ディザリング処理の比較

Gimpでディザリング処理したものと比較して、スクリプト(unity-dither4444)の方がきれいでした。ディザリング処理も簡単なので非常に便利です。

PVRTCの画像をきれいに表示する方法

テクスチャ圧縮形式PVRTCを使用すると、画像の端が汚くなったり、アルファの抜け部分にゴミがついたりすることがあります。特に目立つものは以下の方法を試すと効果があります。

方法1:透明部分の最適化

透明部分を一度、後ろの画に対して最適な色で塗りつぶしてから透明にしてPNGで出力します。

  1. 下記リンクからスクリプトをダウンロード
  2. 命名の最後を「PVR.png」にする
  3. インポート時に処理が行われる

ダウンロード:https://github.com/keijiro/unity-pvr-cleaner

※サイズが大きいとかなり時間がかかるので注意

方法2:アルファマスクを使用

  1. 下記リンクからスクリプトをダウンロード
  2. Switch PlatformでiOSに切り替え
  3. 命名の最後を「with alpha.png」にする
  4. インポート時に処理が行われる
  5. シェーダーをSpriteWithMaskにして、マスクとテクスチャをアサイン
  6. ColorをRGBA(127, 127, 127, 127)にする

ダウンロード:https://github.com/keijiro/unity-alphamask

※デフォルトだとすべて256になっていて元の色になっていないため、127に設定します。

結果

PVRTC改善の比較
  • 方法1:上部にあった目立ったゴミが取り除かれた。ただし処理に時間がかかるのがネック
  • 方法2:マスクを使うとクリアになりすぎて、意図したボケ具合が失われる可能性がある。ただしETC(Android)でも使える方法なので有効

テクスチャの圧縮形式のサイズについて

圧縮形式のファイルサイズの求め方

テクスチャの合計サイズの求め方は幅 × 高さ × bppです。

ファイルサイズのサンプル

※サイズは2のべき乗の正方形でMipmapを含むものです。PVRTCと記載していますが、ETC等も同サイズです。

サイズ(Pixel)RGBA 32bitRGBA 16bitPVRTC 4bitsPVRTC 4bits(imesta7)
2048×204821.3MB10.7MB2.7MB2MB
1024×10245.3MB2.7MB0.7MB0.5MB
512×5121.3MB682.7KB170.8KB128KB
256×256341.3KB170.7KB42.8KB32KB
128×12885.3KB42.8KB10.7KB8KB
64×6421.3KB10.7KB2.7KB2KB

Mipmapについて

Mipmapとは各テクスチャの同じ画像を徐々に低解像度にしたもので、テクスチャが画面上で非常に小さい場合に使用されます。

各レベルの高さと幅は、直前のレベルより2の累乗だけ小さくなります。

例:128×128pixelのテクスチャの場合、64×64のテクスチャが生成される

UIなどMipMapが必要ない画像は生成のチェックを外すと軽量化できます。

圧縮率の目安

  • RGBA32bit → RGBA16bit:圧縮率約50%
  • RGBA16bit → PVRTC:圧縮率約25%
  • PVRTC → PVRTC(imesta7):圧縮率約75%

まとめ

Mipmap:UIなど不要な場合はOFFにして軽量化

ディザリング処理:RGBA16bit変換時のマッハバンドを軽減

PVRTC最適化:透明部分の処理やアルファマスクでゴミを除去

圧縮形式選択:用途に応じて適切な形式を選び容量削減

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次