Расскажите о оптимизации мультиплеера на ПК?
1. Чем статичнее предметы, тем меньше информации необходимо передавать между сервером и клиентом, тем меньше нагрузка на сервер и его пропускную способность, тем меньше "лагов" и "багов";
2. Клиент не испытывает никаких проблем. Сервер испытывает проблемы только если к нему подключено много клиентов и у каждого нужно просчитать множество информации. Из-за этого клиент дольше ждет пакет с данными от сервера и в игре, в зависимости от алгоритма просчета интерактивности, предметы игры могут телепортироваться или долго лежать на месте;
3. Графики на сервере нет. Там сплошные векторы и математика;
4. Есть различные алгоритмы. Например, если на клиенте всегда ждут ответа от сервера, то движение происхожит рывками (по мере поступления пакетов-ответов от сервера). Если же на клиенте стоит экстраполяция, то клиент вычисляет несколько шагов вперед и отрисовывает их, проверяя уже отрисованное по пакетам от сервера. Однако, если есть какое-то несоответствие, то со стороны клиента начинаются "телепортики";
5. Железо на серверах уже очень хороши и с расчетом огромных объемов данных проблем нет. Все дело в медленных каналах связи и их пропускной способности;
6. Много чего) Есть интересные статьи на том же хабре про то, как борются с медленными каналами связи в скоростных шутерах, как просчитывают полет пули и попадания по цели. Например, в том же overwatch headshot'ом считается приличная такая сфера вокруг головы.
Я не спец в игрострое, но попробую объяснить, как сам понимаю процесс. Пусть поправят гуру.
Информация о положении объекта, его свойствах, координатах и т.д. Храниться в клиенте и на сервере, соответственно, сервер и клиент обмениваются информацией в двухстороннем режиме (с задержкой связанной с интернетом и предусмотренной разработчиком). Соответственно, если 10 пользователей взаимодействуют с 1 предметом, допустим кружкой, одновременно, все тянут ее в разные стороны. Тогда должен быть алгоритм, который решает данный конфликт. В каждом игровом движке свои методы. Они по разному оптимизированы и баги связаны именно с оптимизацией. Допустим Ваш клиент прорисовывает Ваши действия на кружку, не связавшись с сервером, так как это чаще не нужно, посылает на сервер данные о изменении положения кружки. Но на сервере уже приняты изменения от другого игрока. И в ответ Вы получаете координаты, которые совершенно противоположны Вашим, Ваш клиент перерисовывает кружку согласно эталонным (пришедшим с сервера) координатам. И Вы видите, как у Вас в руках кружка пропала и появилась в другом месте. Что бы решить подобные конфликты, должен быть принципиально иной метод, отличный от сервер+много клиентов. Мир должен быть в 1 месте, а игрок должен быть объектом этого мира. Когда мощности компьютеров возрастут, наверное так и будет. 1 сервер, который продумывает все и рендерить кадры для каждого игрока в отдельности, а не возлагая эту функцию на клиент. Рассчитывая все силы и их векторы, которые действуют на объект.
По сути наш мир устроен именно так как Вы хотите, но для вычисления используется колоссальная мощность. Поэтому мы упрощаем некоторые вещи.