テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

PVRTCがAtlasを破壊する問題について

PVRTCの圧縮について、ちょっとした補足。

画像の圧縮についてはこちら

[Unity3D]iosアプリサイズを節約する
http://terasur.blog.fc2.com/blog-entry-140.html

■PVRTCの正方形縛り

どうやら、Unityは画像をPVRTC形式で圧縮する場合
画像を「正方形」に強制的に変換するらしい。
(※PVRTCは正方形の縛りがあった)

正方形への変換は「引き伸ばし」で行う模様。
この辺りは、別に正方形でなくても圧縮できていたので見落としていた。

PVRTC formats require textures to be square (width equal to height)
Texture 2D(Unity Manual )
http://docs.unity3d.com/Documentation/Manual/Textures.html
要するに2048x1024でも圧縮時に2048x2048に変換されてしまう。

こうなると追加の2048x1024の容量が無駄になるので、
場合によっては1024x1024を2つに分割したほうが良さそうだ。
(Atlasが複数出来上がるので、
 管理の面倒くささ&パフォーマンス低下と容量のトレードオフになる)

スクリーンショット 2012-08-14 23.30.53
(元々は256x64の画像)

■Atlasが破壊される

この事で一番問題になるのは、Atlasが破壊されること。
正しく言うと、NGUIのAtlasが破壊されること。

Atlasはテクスチャを切り取る範囲を、画像のピクセルに対する座標で指定している。
なので、今回のように「画像が引き伸ばされる」や「画像のサイズが変更される」と
座標が対応できなくなり、表示対象が崩れる事になる。

これは実はUnityの「画像の最大サイズをプラットフォーム毎に設定する」機能も影響を受ける。

なので、Asset作者がAtlasをピクセルの割合で取得するようにするか、
Unity側が画像のサイズを変更しても変化してないように偽装する機能を
用意しれくれるととても楽できるんだけど。