昨日の「第9回 Unity開発技術勉強会」にて、メモリに関する面白い話が聞けたんので、ちょっと確認してみた。

確認した内容はNPOT(二の二乗でないテクスチャ)がOpenGL ES Frame Captureで内部を確認した際にPOT(2の二乗のテクスチャ)に引き伸ばされているように見える問題について。

スクリーンショット 2012-10-24 21.57.11

前書きは置いておいて、実際に試してみた。圧縮形式はRGBA32で、元々のサイズは286×320で、Power of 2はNONEに設定しmipampも切った画像をテクスチャに登録し、実行してメモリの中に展開する内容を確認した。
で、実際に確認した所、確かにサイズがおかしい。元々は上に書いた通り286x320の中途半端なサイズなのだが、実際に表示された内容は512x512。確かに引き伸ばされている。また、同様に余白部分を含めて512x512の画像も展開されていることが確認できた。
スクリーンショット 2012-10-24 22.02.10

とは言え、どうもUnityだけの話ではないらしい。Cocos2dで元々64x64だったテクスチャを65x64に変更し実行表示してみたところ、こちらも同様に128x64に変化していた。
スクリーンショット 2012-10-24 22.17.06

一応NPOTについて調べてみた所、

新しいハードウェアはサポートしてるしOpenGL2.0も機能制限が色々つくけど動く。けど古い端末はダメだし新しい端末でも微妙に挙動が違うかもしれんし、パフォーマンス的にも不利やから気をつけてやー

といった印象。読んでる資料が英語圏なので間違ってるかも。
しかし、勝手に引き伸ばされてしまうのであればRGBA32やNPOTに対応した形式であってもPOT形式で作ったほうが良い気もしてきた。ファイルサイズに余裕があれば。
とは言え、もう少し調査する必要がありそうだ。

最近ちょっと深い内容に入りつつあるので、明日こそはライトな内容に戻したいと思ってたリ。はてさて。