Unity - объяснены родные форматы текстур - PullRequest
0 голосов
/ 04 мая 2018

Я прочитал следующее здесь :

При использовании формата сжатия текстур, который не поддерживается на целевая платформа, текстуры распаковываются в RGBA 32 и сохраняются в памяти вместе со сжатыми текстурами. Когда это произойдет, время теряется при распаковке текстур, а память теряется, потому что вы хранить их дважды. Кроме того, все платформы имеют разные аппаратные средства, и оптимизированы для наиболее эффективной работы с конкретными форматы сжатия; выбор несовместимых форматов может повлиять на ваш производительность игры. В таблице ниже показаны поддерживаемые платформы для каждого формат сжатия.

Давайте обсудим конкретный случай. Скажем, я сохранил файл .png на диске и упаковал свою игру с Android. Сейчас я играю в эту игру на устройстве Android, чей графический процессор требует ETC2 в качестве собственного формата текстур. Правильно ли, что при входе в игру должно произойти следующее:

  1. Чтение файла PNG с диска в ОЗУ (ОЗУ используется для хранения данных файла PNG)
  2. Распаковать PNG в RGBA32 (RAM используется как для PNG, так и для распакованных данных)
  3. Сжатие RGBA32 в ETC2 и загрузка в GPU (в оперативной памяти, если у меня есть текстура наличными, я мог бы освободить память для данных файла PNG, но мне нужно сохранить RGBA32 для повторного использования в будущем или, по крайней мере, мне нужно сохранить ETC2)

Это означает, что я делаю много преобразований между PNG-> RBGA32-> ETC2, и во время этих преобразований я не только использую ресурсы ЦП, но и значительно использую ОЗУ. Мой вопрос - правильно ли я понял, что происходит, если не использовать пакетные форматы текстур для целевой платформы?

1 Ответ

0 голосов
/ 04 мая 2018

Да, вы вроде правильно поняли, что здесь происходит. Однако вы что-то неправильно поняли: как PNG относится ко всему этому. Методы сжатия, реализуемые графическими процессорами для применения к текстурам, очень отличаются от метода PNG «фильтр + дефляция», поэтому при использовании каждого типа графического процессора у вас есть такой тип поведения.

Разработчики Unity пытаются вам сказать, что текстуры могут храниться в том же формате, с которым работает графический процессор, и что для оптимальной производительности вы должны определить, какие форматы сжатия поддерживаются на вашей целевой платформе, и связать файл ресурсов. за это.

Так что для игры для платформы X определите форматы сжатия, поддерживаемые графическими процессорами X, затем упакуйте свои ресурсы в это и отправьте версию X вместе с этим. Промойте и повторите для других платформ.

...