Эффективный алгоритм сжатия массива float'ов и int'ов? Попробовал LZS:
для случайного массива байтов получил сжатие почти в полтора раза. Например, 6000 байтов сжало в 4200
для массива точек в трехмерном пространстве в float32 при случайных позиций сжало в 1.7 раза, тем более при равномерном расположении точек (в виде регулярной сетки) показало сжатие более, чем в 6 раз.
Вопрос в следующем: есть более подходящие алгоритмы сжатия для float массива, и есть ли еще какие-то хаки для уменьшения размеров массива без существенных потерь данных?
Пока в мыслях такой вариант: float можно перевести в half, а так как чем больше число, тем меньше точность, и много точек находится рядом друг с другом, поэтому компенсировать это можно таким образом:
позиция каждой точки, начиная со второй, будет вычисляться как сумма наших half-float данных позиции с позицией предыдущей точки, которая уже преобразована в float
Также стоит добавить, что эти данные описывают 3D модель (вершинные и индексные буферы), пока посмотрю какие для 3D моделей есть решения, но не совсем уверен в том, что это подойдет, так как нужны такие массивы:
вершинный буфер - массив из 3*n float элементов, где n - количество вершин
индексный буфер - массив из 3*m int элементов (все значения меньше чем n), где m - количество треугольников
текстурный буфер - массив из 6*n float элементов
Еще главное то, что буферы небольшие (например, на вершинный приходится не более 30к float элементов, а чаще всего 10к, это примерно 40 кб)

21 Авг 2019 в 06:29
174 +1
1
Ответы
1

Для сжатия массива float'ов и int'ов можно также рассмотреть следующие подходы:

Использование более эффективных алгоритмов сжатия, таких как Brotli, Zstandard или LZ4. Эти алгоритмы могут обеспечить более сильное сжатие в случае float и int массивов.

Использование сжатия с потерями, такого как преобразование float в fixed-point формат (например, использование целочисленных типов данных для хранения координат), что позволит существенно уменьшить размер массива, при этом допускается некоторая потеря точности.

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

Использование специализированных форматов хранения данных для 3D моделей, таких как glTF или Draco, которые обеспечивают эффективное сжатие данных в 3D формате.

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

20 Апр в 13:17
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 795 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир