【Unity】TextureFormatをスクリプトで変更する


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」に変わった。

環境によってもフォーマットは変わるみたいだ。

 

色々と考慮するのも面倒なので、スクリプトで強制的にフォーマットを変える。

これで全パターンでRGB24にすることができた。

 


コメントを残す

メールアドレスが公開されることはありません。