Texture2Dのサイズ(スケール)を変更したかったので TextureScale を使用したところ、変換出来るものと以下のエラーで出来ないものがあった。
Unsupported texture format - needs to be ARGB32, RGBA32, RGB24, Alpha8 or one of float formats
Resources.Load メソッドを使って読み込んだ画像テクスチャをスケール変換できるフォーマットに変更したい。
まず読み込んだ画像のフォーマットを見てみる。
成功したもの: RGB24
失敗したもの: ETC_RGB4
これらは同じように作った2値画像で見た目で判別はできない。
ちなみにフォーマット一覧はリファレンスにあるけど、見てもよくわからなかった。
画像の違いでどう変わるのか確かめるため3つ画像を用意して読み込んでみた。
24bitで保存:透過なし |
32bitで保存:透過なし |
32bitで保存:透過あり |
すると左からRGB24、RGB24、ETC2_RGBA8 となった。
しかし、別に新規プロジェクトを作って試すと DXT1, DXT1, DXT5 となった。
違いとしてUnity上部に「DX11 on DX9 GPU」とあったのが新規プロジェクトだと「DX11」になっていた。
細かいことは不明だが android apk build 時「DX11 on DX9 GPU」に変わった。
環境によってもフォーマットは変わるみたいだ。
色々と考慮するのも面倒なので、スクリプトで強制的にフォーマットを変える。
1 2 3 |
Texture2D t1 = (Texture2D)Resources.Load("opaque",typeof(Texture2D)); Texture2D tc = new Texture2D (t1.width, t1.height, TextureFormat.RGB24, false); tc.SetPixels(t1.GetPixels()); |
これで全パターンでRGB24にすることができた。