Дельта-компрессия

Общие вопросы о Unity3D

Дельта-компрессия

Сообщение Jarico 14 мар 2019, 17:08

Всем прив.

За основу брал RakNet и начиркал своё сетевое решение для Unity с блэкджеком и ш... ясно...

Но дело в том что как мне кажется в проекте на 1 сетевой объект уходит много трафика
Синтаксис:
Используется csharp
public struct ent_Data
{
     Vector3 pos;// 12 байт
     Quaternion rot;// 8 байт (если не сжимать то выходит 16 байт)
     int netId;// 4 байта (для идентификации сетевого объекта на сцене)
     Vector3 velocity;// 12 байт
}
 


Итог: 36 байт на 1 объект + идентификатор пакета (1 байт) + размер пакета (4 байта)

Делал тесты, создавал 250 сетевых объектов на сцене и трафика уходило 9000 (+-200) байт (8.8 кб/с), отправляю данные каждые 66 ms (проверял в статистике RakNet'а и через сниффер)


Вопрос: Не многовато ли трафика уходит? Это без учёта того что в игре будут происходить и другие события (чат и синхронизация времени суток к примеру) Можно ли еще сжать данные?
Последний раз редактировалось Jarico 14 мар 2019, 17:17, всего редактировалось 1 раз.
Jarico
UNIт
 
Сообщения: 139
Зарегистрирован: 06 янв 2019, 17:37
Откуда: C#, Unity, C++, Blender
Skype: none
  • Сайт

Re: Дельта-компрессия

Сообщение 1max1 14 мар 2019, 17:11

Что поделать... :(
Аватара пользователя
1max1
Адепт
 
Сообщения: 1913
Зарегистрирован: 28 июн 2017, 10:51

Re: Дельта-компрессия

Сообщение Jarico 14 мар 2019, 17:17

1max1 писал(а):Что поделать... :(


Подскажи :)
Jarico
UNIт
 
Сообщения: 139
Зарегистрирован: 06 янв 2019, 17:37
Откуда: C#, Unity, C++, Blender
Skype: none
  • Сайт

Re: Дельта-компрессия

Сообщение 1max1 14 мар 2019, 17:27

8 кб / сек это не так много) У меня домашний интернет 6000 кб / сек.
int netId; можно заменить на short netId; -2 байта xDD
Аватара пользователя
1max1
Адепт
 
Сообщения: 1913
Зарегистрирован: 28 июн 2017, 10:51

Re: Дельта-компрессия

Сообщение Jarico 14 мар 2019, 17:38

1max1 писал(а):int netId; можно заменить на short netId; -2 байта xDD


Точно! Спс :D

1max1 писал(а):8 кб / сек это не так много) У меня домашний интернет 6000 кб / сек.


Чем меньше объём данных тем меньше время обработки....
Jarico
UNIт
 
Сообщения: 139
Зарегистрирован: 06 янв 2019, 17:37
Откуда: C#, Unity, C++, Blender
Skype: none
  • Сайт

Re: Дельта-компрессия

Сообщение Jarico 14 мар 2019, 18:11

Кому нужно будет нашёл статейку
http://www.kinematicsoup.com/news/2016/ ... acking-101

Пример сжатия с битовой упаковкой (из статьи)
https://github.com/ks-examples/BitPacking101

Сжатие Quaternion
https://gist.github.com/StagPoint/bb7ed ... ression-cs
Jarico
UNIт
 
Сообщения: 139
Зарегистрирован: 06 янв 2019, 17:37
Откуда: C#, Unity, C++, Blender
Skype: none
  • Сайт

Re: Дельта-компрессия

Сообщение lawson 14 мар 2019, 19:25

Jarico писал(а):
1max1 писал(а):Что поделать... :(


Подскажи :)

не обрабатывать такое кол–во объектов.
lawson
UNIверсал
 
Сообщения: 441
Зарегистрирован: 14 сен 2012, 21:20

Re: Дельта-компрессия

Сообщение seaman 14 мар 2019, 20:31

Все 250 двигаются одновременно?
Отправлять только когда двигаются и раз в секунду на всякий случай для уточнения позиции.
seaman
Адепт
 
Сообщения: 7668
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Дельта-компрессия

Сообщение Jarico 14 мар 2019, 21:16

seaman писал(а):Все 250 двигаются одновременно?


Да, я отправляю данные объектов которые в движении ( bool isMove = rigidbody.velocity.sqrMagnitude > 0.15f )


seaman писал(а):Отправлять только когда двигаются и раз в секунду на всякий случай для уточнения позиции.


Сделал автоматическую подстройку частоты отправки, с увеличением количества объектов увеличивается промежуток времени отправки и разрешённая пропускная способность
Jarico
UNIт
 
Сообщения: 139
Зарегистрирован: 06 янв 2019, 17:37
Откуда: C#, Unity, C++, Blender
Skype: none
  • Сайт

Re: Дельта-компрессия

Сообщение seaman 14 мар 2019, 21:24

Я имею в виду игру. В игре 250 движущихся объектов в камере - многовато. Если это нечто типа TotalWar - имхо там не нужно знать точные позиции каждого юнита.
seaman
Адепт
 
Сообщения: 7668
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Дельта-компрессия

Сообщение Jarico 14 мар 2019, 22:25

seaman писал(а):Я имею в виду игру. В игре 250 движущихся объектов в камере - многовато.


Объекты имеют меши простых фигур (куб, сфера), и компоненты Transform и Rigidbody. Кодом добавляются компоненты (на клиенте нет коллайдеров и Rigidbody но есть меши, на сервере есть коллайдеры и Rigidbody но нет мешей)


seaman писал(а):Если это нечто типа TotalWar - имхо там не нужно знать точные позиции каждого юнита.

Не собираюсь такую игру делать, просто нужно было проверить сколько пропускной способности требуется чтобы синхронизировать столько объектов...
Jarico
UNIт
 
Сообщения: 139
Зарегистрирован: 06 янв 2019, 17:37
Откуда: C#, Unity, C++, Blender
Skype: none
  • Сайт

Re: Дельта-компрессия

Сообщение Dewa1s 15 мар 2019, 04:29

Jarico писал(а):
1max1 писал(а):int netId; можно заменить на short netId; -2 байта xDD


Точно! Спс :D

1max1 писал(а):8 кб / сек это не так много) У меня домашний интернет 6000 кб / сек.


Чем меньше объём данных тем меньше время обработки....

чоэта? Данных-то столько же приходит, только добавляется время на распаковку этих самых данных
Аватара пользователя
Dewa1s
UNIверсал
 
Сообщения: 450
Зарегистрирован: 26 дек 2011, 02:12

Re: Дельта-компрессия

Сообщение Jarico 15 мар 2019, 11:44

Dewa1s писал(а):чоэта? Данных-то столько же приходит, только добавляется время на распаковку этих самых данных


Распаковка занимает меньше времени чем пересылка большого объёма данных по сети...
Jarico
UNIт
 
Сообщения: 139
Зарегистрирован: 06 янв 2019, 17:37
Откуда: C#, Unity, C++, Blender
Skype: none
  • Сайт


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8