強火で進め

このブログではプログラム関連の記事を中心に書いてます。

ピクセルパーフェクトの画像を使う場合に適したテクスチャ設定の確認(その1)

(2012/06/13 追記)
コメント欄にて椿さんより2の乗数でない場合は圧縮テクスチャを選択しても圧縮が行われないとの指摘を頂きました。その点、全く考慮していませんでした。

その為、改めて別の記事で2の乗数の画像で改めて検証を行いました。圧縮テクスチャ以外については参考にして貰って問題ないかと思います。
(追記ここまで)

UnityでiOSの画面を再現する様な場合に適したテクスチャの設定ってどれなんだろ?と思って検証してみました。

この様にUnityで2D描画をする時にはテクスチャのピクセル(テクセル)と画面のピクセルが1対1になったピクセルパーフェクトな状態な場合が一番綺麗に表示されます。

サンプルプログラムとしてはSafariで表示した画面を画面キャプチャした以下の様な画像をテクスチャ画像として準備して、iPhone 4S上でピクセルパーフェクトな描画に成るようにUnityのプログラムを作成し、検証しました。

【テスト環境】

  • OS : Mac OS X 10.7.4
  • Unity : Version 3.5.1f2
  • ビルドプラットフォーム設定 : iOS

テクスチャの元サイズは 150KB

Texture Type が GUI の時

まずは Texture Type が GUI の時はどうなるのか検証してみました。

Formatの設定とその時のテクスチャサイズは以下の様になりました。テクスチャサイズはアプリをビルドするに生成される Editor.log に記載されているものを記述しています。

名前 Format テクスチャサイズ
GUI_comp Compressed 1.8MB
GUI_16bit 16 bits 1.2MB
GUI_true Truecolor 1.8MB

※「名前」はキャプチャ画像を区別する為に画像の左下記載している名前です。

実機で表示したものをキャプチャした画像はこちら(そのまだと大きいので同じ位置で切り取っています)。

いずれもそれほどはっきりと分かるくらいの違いは無いみたいです。今回の様な用途の場合にはGUIの設定の場合には 16 bits で良いかな?

Texture Type が Advanced の時

次に Advanced の時はどうなるか試してみました。

名前 Format 生成されたテクスチャのサイズ
Adv_AC Automatic Compressed 1.8MB
Adv_RGB_DXT1 RGB Compressed DXT1 1.8MB
Adv_RGB_ETC4 RGB Compressed ETC 4 bits 1.8MB
Adv_RGB_PVRTC2 RGB Compressed PVRTC 2bits 1.8MB
Adv_RGBA_PVRTC2 RGBA Compressed PVRTC 2bits 2.3MB
Adv_RGB_PVRTC4 RGB Compressed PVRTC 4bits 1.8MB
Adv_RGBA_PVRTC4 RGBA Compressed PVRTC 4bits 2.3MB
Adv_RGB_ATC4 RGB Compressed ATC 4bits 1.8MB
Adv_RGBA_ATC8 RGB Compressed ATC 8bits 1.8MB
Adv_A16 Automatic 16 bits 1.2MB
Adv_RGB16 RGB 16 bit 1.2MB
Adv_RGBA16 RGBA 16 bit 1.2MB
Adv_AT Automatic Truecolor 1.8MB
Adv_RGB24 RGB 24 bits 1.8MB
Adv_ARGB32 ARGB 32bits 2.3MB
Adv_RGBA32 RGBA 32bits 2.3MB

※流石に Alpha 8 はここで取り上げても意味が無いので含めていません。

実機のキャプチャ画像はこちら。

「Automatic 16 bits」、「RGBA 16 bit」など16bitのものはキャプチャ画像の中央の帯のグラデーションの所を見るとちょっと描画が汚くなっているのが確認できます。グラデーションを含まない画像であれば使えそうですが含む場合には要検討なクオリティになるみたいです。

「RGBA 16 bit」に至ってはかなりクオリティが低いものになってしまっています。これについては使える場面はかなり限定されてしまいそうです。

それ以外はいずれもそれほど大きな差は出てない様です。今回の様な用途であればアルファを使ってないのでRGBのものを使い、透過部分が必要なGUIパーツを自前で準備する様な場合にはRGBAのものを使うという方針で良いような気がします。

もろもろを考えると GUI の「16 bits」か、 Advanced の「Automatic Compressed」辺りを使うのが良いかな?

今回検証に使ったプログラムはこちらにアップして有りますので気になる人は自分で検証してみて下さい。 Test01 のSceneが今回検証で使ったものになります。