Urho3D
GameDev.ru / Сообщества / Urho3D / Форум / Обсчёт физики на клиентах

Обсчёт физики на клиентах

Поделиться

Страницы: 1 2 Следующая

leonardo98Постоялецwww30 окт. 201716:19#0
Передаю данные карты с сервера на клиент. В момент получения данных персонаж не двигается. Это хорошо видно тут https://youtu.be/fAaZpcKSrJY
Анимация персонажа играется, а физика не обсчитывается.
В чем причина такого поведения?
Как можно настроить чтобы персонаж так не замирал?

Тут важный момент - куски карты по 24кБ, если передавать меньше, то это почти не заметно, но я ещё тестирую на одной машине. А если на разных, да ещё с плохой связью - там будет просто огромный лаг.

upodate:
проблема в том в Урхо используется один канал для передачи данных об объектах и его недостаточно, если какие-то объекты слишком "тяжелые", даже если они меняются редко

текущее решение:
в момент подключение клиента на нем реплицируются все объекты карты, которые есть на сервере, потом репликация отключается и с сервера идут небольшие сообщения, в которых информация только об изменениях, т.е. некий diff, это минимизировало передачу данных с сервера на клиент и перестало нагружать канал

Правка: 8 ноя. 2017 10:31

leonardo98Постоялецwww30 окт. 201716:29#1
Забыл указать, на сервере таких проблем нет, персонаж двигается на сервере указанием скорости движения. С клиента идёт информация о нажатых клавишах.

Правка: 30 окт. 2017 16:36

-Eugene-Постоялецwww30 окт. 201717:17#2
leonardo98
> В чем причина такого поведения?
> Как можно настроить чтобы персонаж так не замирал?
Полагаю, в том, что канал для физики персонажа и для подгрузки мира один.
Дробить на куски, сопоставимые с размером снапшотов мира, я думаю, единственный надежный выход.
leonardo98Постоялецwww30 окт. 201717:25#3
-Eugene-
Не совсем понимаю, что значит дробить?
Все данные передаются механизмом репликации сцены, на видео создаются и удаляются ноды и компоненты, каждая их пара рисует кусок карты 16х16. Вся карта - это 90000 таких пар.
-Eugene-Постоялецwww30 окт. 201717:32#4
leonardo98
Сколько нод создается в момент лага?
leonardo98Постоялецwww30 окт. 201717:40#5
-Eugene-
Максимум 5. Но на видео видно, что они создаются не всегда одновременно.
-Eugene-Постоялецwww30 окт. 201718:06#6
leonardo98
Странно. Я вижу, что лаг длится ровно столько, сколько прогружаются ноды. Это, по крайней мере, объяснимо.
Но вот почему это занимает столько времени?..
Пробовал отлаживать сеть? Какие сообщения шлются и какого размера?
leonardo98Постоялецwww30 окт. 201720:16#7
-Eugene-
> Пробовал отлаживать сеть? Какие сообщения шлются и какого размера?
пока нет

лаг возникает при неком пороговом значении и далее чем больше пересылаю данных - тем заметнее лаг, все просто - кусок карты - это 1000 вершин, шлю 100 - лага нет, 500 - уже заметно подрагивание, 1000 - может "зависнуть" на десятые доли секунды, каких-то дополнительных действий с вершинами нет, только умножение на матрицу

-Eugene-Постоялецwww30 окт. 201720:58#8
leonardo98
Тю. Так ты с каждым куском не только ноды шлешь, но и данные?
Если да, то как?
leonardo98Постоялецwww30 окт. 201721:29#9
-Eugene-
> Тю. Так ты с каждым куском не только ноды шлешь, но и данные?
> Если да, то как?
leonardo98
> Все данные передаются механизмом репликации сцены
-Eugene-Постоялецwww30 окт. 201721:57#10
leonardo98
Ты сказал, что
> Максимум 5
нод передается.
Где там 1000 вершин?
leonardo98Постоялецwww31 окт. 20178:35#11
-Eugene-
Так нод же не умеет рисовать. Куски карты рисует отдельный компонент. Он создаётся на сервере и реплицируется на клиенте. Вы в курсе как работает репликация в урхо?
-Eugene-Постоялецwww31 окт. 201710:06#12
leonardo98
То есть ты внутри компонент реплицируешь блобы данных?
Плохая идея.
leonardo98Постоялецwww31 окт. 201710:18#13
-Eugene-
Я реплицирую данные, которые нужны компоненту для выполнения его функции, этот компонент рисует кусок карты. Данные эти меняются редко. Какую альтернативу вы можете предложить?
-Eugene-Постоялецwww31 окт. 201710:22#14
leonardo98
Я предлагаю попробовать кидать эти блобы неупорядоченными сообщениями отдельно от основной репликации. Возможно, тогда они не будут затыкать канал.
Но это уже детали работы kNet-а.

Правка: 31 окт. 2017 10:22

Страницы: 1 2 Следующая

/ Форум / Urho3D - игровой движок / ЗАДАВАЙТЕ ВОПРОСЫ

Тема закрыта.

2001—2017 © GameDev.ru — Разработка игр