ディザ処理をした16bitsテクスチャはディスク上での容量が大きいかもしれない話
結論から言うと、「16 bpp + ディザ処理」というのはあくまでもメモリ消費を抑えるためのものであって、圧縮を考慮するとディスク上でのサイズはむしろ大きくなる場合があるという話です。
ここに512x512のTexture があります。
Format をTruecolor (32 bits) に設定したので 512 * 512 * 4 byte = 1 MB のメモリを消費します。
次に、メモリ使用を抑えるために、Format を「16 bits」に設定します。
今度は、512 * 512 * 2 byte = 0.5 MB になりました。
しかしこれでは画質が今ひとつなのでディザ処理をして綺麗にしましょう。
(これを使わせて頂きました:keijiro/unity-dither4444 · GitHub)
きれいな画質のままメモリ使用を抑えることが出来たのでめでたしめでたし…と言いたいところですが、ディスク上でのサイズはどうなっているでしょうか。
まず、BinaryWriter 等を使って、上の画像のピクセルデータをバイナリファイルに書き出します。 ファイルサイズを確認すると、上記の通りになることがわかります。
次に、Unity は Asset を LZMAで圧縮することが多いので、lzmaコマンドで圧縮してみます。
結果はこんな感じです。
- Truecolor: 1024 KB -> 28 KB
- 16 bits: 512 KB -> 12 KB
- 16 bits (dithered): 512 KB -> 104 KB
ディザ処理をした場合の圧縮率が他に比べて相当悪いですね。 これはあくまでも一例ですが、直感的にはランダムなノイズ画像でも無い限りそのような傾向があると思われます(未検証)。エントロピーの増加 = 情報量の増加 = 理論上の最小圧縮容量の増加、なので。
メモリに余裕がある場合は、わざわざディザ処理をしてまで 16 bits の画像を使うべきでは無いかもしれません。