2017-01-09 10 views
2

Я попробовал texturetool в Xcode, чтобы сжать кучу текстур .png для использования в сцене SceneKit. Пробовал несколько вариантов по Apple docs.Как сжать текстуры для использования в SceneKit

texturetool -e PVRTC --channel-weighting-linear --bits-per-pixel-4 -o ImageL4.pvrtc Image.png 

Полученное изображение было в 3 - 4 раза больше размера оригинального png. Я ожидал, что это будет значительно меньше. Это квадратные текстуры, мощность 2 и т. Д. Завершено, уменьшив его и выполнив прохождение оптимизации с потерями.

Каков правильный подход к сжатию текстур (для iOS10)?

Обновлено с результатами испытаний на сжатие. С этим изображением это было ок. 2x размер. Неудивительно, что результаты были одинаковыми с textureTool. PVRTexTool (из Imagination Technologies) предлагает более широкий выбор форматов на выбор.

PVRTests

+0

лично, я предлагаю фотошоп и его неплохое сжатие .png для большинства геометрических и векторных вещей. И .jpg для изображений/изображений с визуальной сложностью. А затем найти способы оптимизации декомпрессии и использования в приложении, чтобы наилучшим образом воспользоваться конечным пользователем. Думаю, PVRTC - это немного поток. – Confused

ответ

1

Есть три основных способа (с верхней части моей головы), чтобы думать о «праве» с точки зрения сжатия текстур.

  1. Хранение текстура занимает, и компромиссы вы готовы принять с точки зрения потери деталей в погоне за еще меньшие размеры файлов текстур. Это может включать в себя фактическое физическое сжатие текстуры и расширение ее позже, но, как правило, борьба с различными форматами потерь с учетом ...

  2. Степень, в которой сжатие влияет на время загрузки, поскольку все сжатые изображения в вашем пакет должен быть распакован для использования графическим процессором и процессором и вашим приложением, чтобы отображать изображения на экране в виде текстур и т. д. Некоторые форматы изображений и типы сжатия МНОГО ДОЛЖНЫ дольше распаковываться, чем другие. Некоторые из них молниеносно, но больше.

  3. Последней проблемой является формат, который вы собираетесь использовать в памяти графического процессора. Это, как правило, детали бит, но на некоторых аппаратных средствах есть еще несколько опций. Это, 2, 4, 5, 8 бит на цвет? Сколько бит для альфы? и т. д.

Не все видеоускорители и системы поддерживают множество форматов текстуры, но Apple, как вы, вероятно, обнаружили. Каждый из них представляет собой сочетание компромиссов по размеру и деталям. Меньше бит для цветов = меньшее определение градиентов и т. Д. Аппаратное обеспечение Apple также очень хорошо подходит для декомпрессии некоторых форматов и ужасного в других. И конечный размер вашего пакета, очевидно, отличается от разных типов устройств.

Вы ограничены 200 МБ на Apple TV, прежде чем использовать какое-то управление хранилищем.

100 MB предел для приложений над данными ячейки, и т.д.

+0

Я ошибаюсь в ожидании меньшего размера файла после сжатия pvrtc? Документы Apple и другие статьи подразумевают меньший размер файла. Я что-то упустил, используя текстуру? Использование инструментов сжатия с потерями, таких как ImageOptim для текстур, представляет другие проблемы - в некоторых случаях (но не все), в редакторе SceneKit, сцена отображается только одним цветом, красным. – sambro

+0

PVRTC предоставит вам меньший размер файла, чем сжатый, растровый формат NON, будь то .png, TIFF или любой другой не сжатый формат. Что не широко известно, так это то, что большинство .png экспортеров (Photoshop и т. Д.) Фактически используют (по умолчанию) несжатое сжатие. Таким образом, простой образ графического/векторного стиля, экспортируемый из Photoshop, будет намного меньше общей суммы его битов и байтов пикселей, а их цвета будут в несжатом состоянии. PVRTC - очень мягкий, очень простой формат сжатия, разработанный для очень быстрой декомпрессии на графических процессорах PowerVR. Отсюда и название. Это не отличная компрессия. – Confused

+0

И .jpg, когда используется мудро и со сложными изображениями (думаю, фотографии), вы получите гораздо более эффективное сжатие, чем сжатые .png или PVRTC могли бы надеяться достичь. Стоимость сжатия .jpg заключается в том, что декомпрессия для точных данных бит, требуемых для графических процессоров, и представление на экране занимает намного больше времени, чем декомпрессия файла PVRTC. Файлы PVRTC могут быть быстро распакованы так, что вы можете хранить полноразмерные кадры видео в формате и декомпрессировать их достаточно быстро, чтобы показать их как видео. Невозможно .jpg Декомпрессия может приближаться к этой скорости декомпрессии даже на ПК. – Confused

1

Это немного по касательной к вашему вопросу, но есть обсуждение сжатия текстур, включая PVRTC here.

(TLDNR: PNG и JPEG может быть хорошо для хранения/передачи данных текстуры, но они должны быть полностью распакованы в памяти до GPU обращается к их)

Однако, если вы сделать имеют текстуру который хорошо сжимается с PNG, существует вероятность, что при небольшом переупорядочивании данных сжатые изображения PVRTC/ETC/S3TC могут также выиграть от сжатия без потерь (например, zlib и т. д.), что может затем решить ваши проблемы с хранением.

+1

Цените пояснения и ссылки. Обновленный вопрос с некоторыми тестовыми данными. – sambro

+0

Обновления: «Разница в размерах файлов ... в самом лучшем качестве» Я предполагаю, что вы имеете в виду PVRTexTool + PVRTC. Этот параметр изменяет только количество усилий * (т. Е. Циклов процессора), которое инструмент сжатия помещает при поиске сжатого представления, то есть пытается уменьшить визуальные различия. Сжатые данные всегда будут либо 4bpp, либо 2bpp. Если у меня есть время, я могу попытаться создать образ 2k * 2k (я предполагаю, что это RGB * A *?), Который создает ~ 1MB PNG, и посмотреть, могу ли я применить gzip/zlib к нему (у меня была команда член, работающий над этим, но он ушел, прежде чем он был завершен, и был отложен) –