Эффективный алгоритм сжатия массива 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 кб)
Для сжатия массива float'ов и int'ов можно также рассмотреть следующие подходы:
Использование более эффективных алгоритмов сжатия, таких как Brotli, Zstandard или LZ4. Эти алгоритмы могут обеспечить более сильное сжатие в случае float и int массивов.
Использование сжатия с потерями, такого как преобразование float в fixed-point формат (например, использование целочисленных типов данных для хранения координат), что позволит существенно уменьшить размер массива, при этом допускается некоторая потеря точности.
Реорганизация данных в массивах для улучшения сжатия, например, сортировка вершин по расстоянию от центра или использование предложенного вами метода, который позволяет уменьшить размер данных, сохраняя их структуру и относительное положение.
Использование специализированных форматов хранения данных для 3D моделей, таких как glTF или Draco, которые обеспечивают эффективное сжатие данных в 3D формате.
При выборе метода сжатия необходимо учитывать требования к точности данных, степень сжатия, вычислительные ресурсы для декодирования и другие факторы, которые оказывают влияние на конечное качество и эффективность сжатия данных.
Для сжатия массива float'ов и int'ов можно также рассмотреть следующие подходы:
Использование более эффективных алгоритмов сжатия, таких как Brotli, Zstandard или LZ4. Эти алгоритмы могут обеспечить более сильное сжатие в случае float и int массивов.
Использование сжатия с потерями, такого как преобразование float в fixed-point формат (например, использование целочисленных типов данных для хранения координат), что позволит существенно уменьшить размер массива, при этом допускается некоторая потеря точности.
Реорганизация данных в массивах для улучшения сжатия, например, сортировка вершин по расстоянию от центра или использование предложенного вами метода, который позволяет уменьшить размер данных, сохраняя их структуру и относительное положение.
Использование специализированных форматов хранения данных для 3D моделей, таких как glTF или Draco, которые обеспечивают эффективное сжатие данных в 3D формате.
При выборе метода сжатия необходимо учитывать требования к точности данных, степень сжатия, вычислительные ресурсы для декодирования и другие факторы, которые оказывают влияние на конечное качество и эффективность сжатия данных.