Эффективный алгоритм сжатия массива 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
220 +1
1
Ответы
1

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

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

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

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

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

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

20 Апр 2024 в 13:17
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир