Дельта-сжатие - это сжатие дельта-кодированных значений. Дельта-кодирование - это преобразование, которое производит различное статистическое распределение чисел. Если распределение благоприятно для выбранного алгоритма сжатия, оно уменьшает количество данных. Он очень хорошо работает в такой системе, как игра, в которой сущности перемещаются лишь незначительно между двумя обновлениями.
Допустим, у вас есть 100 объектов в 2D. На большой сетке 512 x 512. Для примера рассмотрим только целые числа. Это два целых числа на одну сущность или 200 чисел.
Между двумя обновлениями все наши позиции меняются на 0, 1, -1, 2 или -2. Было 100 экземпляров 0, 33 экземпляра 1 и -1 и только 17 экземпляров 2 и -2. Это довольно часто. Мы выбираем кодирование Хаффмана для сжатия.
Дерево Хаффмана для этого будет:
0 0
-1 100
1 101
2 110
-2 1110
Все ваши 0 будут закодированы как один бит. Это всего лишь 100 бит. 66 значений будут закодированы как 3 бита, и только 34 значения - как 4 бита. Это 434 бита или 55 байтов. Плюс небольшие накладные расходы, чтобы спасти наше дерево картирования, так как дерево крошечное. Обратите внимание, что для кодирования 5 чисел необходимо 3 бита. Мы обменяли здесь возможность использовать 1 бит для «0» для необходимости использовать 4 бита для «-2».
Теперь сравните это с отправкой 200 произвольных чисел. Если ваши сущности не могут быть на одной плитке, вам почти гарантировано, что вы получите плохое статистическое распределение. В лучшем случае было бы 100 уникальных чисел (все на одном X с разными Y). Это как минимум 7 бит на число (175 байт) и очень сложно для любого алгоритма сжатия.
Дельта-сжатие работает в особом случае, когда ваши сущности меняются незначительно. Если у вас много уникальных изменений, дельта-кодирование не поможет.
Обратите внимание, что дельта-кодирование и сжатие используются и в других ситуациях с другими преобразованиями.
MPEG разбивает изображение на маленькие квадраты, и если часть изображения перемещается, сохраняются только движение и изменение яркости. В фильме с частотой 25 кадров в секунду очень мало изменений между кадрами. Опять дельта кодирование + сжатие. Лучше всего подходит для статических сцен.