質問: ### 前提・実現したいこと Unity初心者です。 uguiでアンドロイドゲームを制作しておリます。(unity v5.6使用中) フォトショップでボタン画像(PNG形式)を作っております。 「画像の大きさは2のべき乗にする」というルールについて質問させてください。 (APKファルのサイズが大きくならないようにしたいと考えております。) 質問1 例えばUnityのシーン上で40 x 40ピクセル という「2のべき乗ではない」大きさで使用したい場合、 フォトショップで2のべき乗に準じて64 x 64ピクセル の画像を作り、 Unityのシーン上で40 x 40ピクセルに縮小する形で問題ないのでしょうか? また、Unityのシーンで画像を縮小する場合、 縮小後のピクセルの大きさが、整数ではなく、 大きさが40.25ピクセル、40.5ピクセル というような 端数になっても問題ないでしょうか?(またはスケールの値が0.25、0.73等) つまりUnityのシーン上で縮小の際、大きさを端数にすることより、 整数よりもメモリを多く使用してしまうということはないでしょうか? (最後のAPKファイルの大きさを心配しております。) 質問2 例えば、128 x 64ピクセルのような横長な画像の場合でも、 画像に透明の空白を含めて、正方形の128 x 128ピクセルで作る方がよいのでしょうか? すいませんが、ご教授よろしくおねがいいたします。
回答: まず、なぜテクスチャが2のべき乗でないといけないのか。 それは単純に3Dゲームはポリゴンにテクスチャを割り当てていて、 明示されるまでは同じテクスチャを使いまわすという処理がされています。 使いまわすということは、そのテクスチャ(色合いと座標)を使いまわすわけですが、 その座標がfloat型なんです。 このことから、float型の浮動小数点(IEEE754)という規格は2の累乗でなければ、 有限小数として表現できないという条件がつきます。 簡単に言うと2のべき乗にしないと2進数に入れることが出来ないから、 強制的に2進数に入るように調整される。(たしか四捨五入される) そうすると、座標位置が四捨五入されて微妙にずれてしまうわけなんですね。 これを防ぐために、2のべき乗にしてくださいねってことなんですね。 それを踏まえて質問にお答えします。 質問1 2のべき乗でなくても2Dであれば使えると思います。 インポートする際だったと思いますが、そのまま使うか一番近い2のべき乗にするか選べたはずです シーン上で大きさやスケールが小数点以下にしても問題は無いです(たぶん収まるように数値が丸められます) >>Unityのシーン上で縮小の際、大きさを端数にすることより、 >>整数よりもメモリを多く使用してしまうということはないでしょうか? >>(最後のAPKファイルの大きさを心配しております。) この部分が何をいいたいのか分かりませんが、例えばAsset内に1920×1080のテクスチャをインポート それをシーンに配置、1/10スケールで表示したとします。 スケールを変えたところで元画像のメモリを食うでしょうし、実行ファイル(APK等)は当然大きくなります。 そんなことをするより、最初から192*10.8(四捨五入して192*11)で画像を作ったほうがよくないでしょうか。