Satisfactory с кем поиграть

Обновлено: 28.06.2024

В Satisfactory игрок занимается тем, что строит огромный инопланетный завод — с десятками зданий и километрами транспортных лент, по которым текут тысячи предметов. Сооружением фабрики можно заниматься вместе с друзьями в кооперативе.

Это означает, что серверу нужно в реальном времени обрабатывать данные обо всех объектах на заводе. То, с чем пришлось разбираться в Coffee Stain — это уникальная ситуация, с которой вряд ли сталкивались разработчики типового многопользовательского шутера.

В своём блоге на Gamasutra сетевой программист Coffee Stain Гафхар Даваллиус рассказал о том, как в студии оптимизировали сетевой код игры. Мы выбрали главное из материала.

По словам разработчика, есть два пути, по которым можно было бы пойти при создании сетевой инфраструктуры Satisfactory.

Первый — это полная синхронизация карты между всеми игровыми клиентами. В таком случае на компьютерах игроков бы воспроизводилась локальная симуляция. Так поведение всех объектов было бы на 100% предсказуемым — а вся информация бы обновлялась только тогда, когда происходят непредвиденные явления (например, действия игрока).

Второй — это обработка всей информации на сервере, после чего она бы отправлялась на клиенты игроков и там воспроизводилась. Это решение используют в шутерах, и именно его взяли за основу при создании Satisfactory.

Если бы разработчики пошли первым путём, то тогда им нужно было добиваться того, чтобы игра работала предсказуемо во всех отношениях. По словам Даваллиуса, это даже не цель, которую нужно достичь, а необходимое требование для работы системы. Малейшая неточность породит цепную реакцию, из-за которой вся игра рассинхронизируется.

Если фабрики ещё могут оставаться предсказуемыми, то симуляцию сложной физики вроде движения транспорта очень трудно реализовать так, чтобы все клиенты точно её предсказывали. Понадобилось бы переписывать движок.

Более того, из-за этого игроки бы чувствовали сильную задержку. Изменения не будут видны, пока все игровые клиенты не подтвердят, что получили информацию от всех пользователей. Проблему можно было бы решить, если бы компьютеры игроков хранили копию состояния сервера пару секунд назад — однако это бы сильно перегрузило оперативную память и процессор.

Поэтому, после выбора модели неткода, перед разработчиками встали следующие задачи.

  • Минимализировать количество отправляемой информации. Это можно сделать, выяснив, какие данные наиболее важны в определённый промежуток времени. К примеру, не нужно отправлять то, что игроки не видят.
  • Уменьшить частоту отправления информации. Если какой-то объект не меняется часто или его поведение достаточно предсказуемо, данные о нём можно посылать реже.
  • Сжать и уменьшить количество сведений, необходимых для точного отображения состояния игры.

Также создателям нужно было разработать систему, которая бы вычленяла важную информацию отдельно для каждого игрока. Если бы эти задачи не были решены корректно, то клиенты бы недополучали пакеты с данными, а также испытывали задержку — гораздо большую, чем пинг.

Первое, что начали оптимизировать разработчики — это количество отправляемой информации. Чем больше становилась фабрика в игре, тем больше данных нужно было отправлять — в итоге со временем возникало «распухание буфера», когда огромное количество информации «вставало в очередь» на обработку. Всё это вело к потери пакетов с данными.

На двух примерах Даваллиус объяснил, что сделали в Coffee Stain. В первую очередь разработчики переработали систему инвентаря. В Satisfactory помимо игрока предметы могут хранить контейнеры и некоторые объекты фабрики: информация о них обновляется в реальном времени, так как все ресурсы поступают напрямую в хранилища.

Чтобы снизить нагрузку на клиенты, авторы сделали так, чтобы у игрока не обновлялись данные инвентарей, которые он не видит в текущий момент времени. Благодаря этому перестал перегружаться процессор — ему больше не нужно было обрабатывать вообще все изменения.

Впрочем, у такого подхода есть свои минусы: иногда игра не может предсказать, когда игрок соберётся открыть тот или иной инвентарь, и потому обновляет данные слишком поздно. Однако в большинстве случаев это незаметно — особенно если играть с невысоким пингом.

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

Здесь разработчикам помогло то, что лишь небольшое количество информации сложно предсказать заранее. Чтобы обновлять данные о предметах на транспортной ленте, создатели применили метод дельта-кодирования. Простыми словами, на сервер отправляется не вся информация целиком, а лишь разница между нынешним и прошлым состоянием клиента.

Например — вместо того, чтобы отсылать данные про все 25 предметов на конвейере, мы отправляем лишь сведения о двух новых предметах, которые на нём появились, и об одном, который с него сошёл. То есть, мы используем только 12% всей информации.

Кроме того, игра не воссоздаёт движение всех ресурсов на транспортной ленте, а лишь симулирует его в каждом из клиентов — благодаря знанию позиции каждого из них.

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

Мы хотим минимализировать количество данных — однако в таком случае падает точность. Поэтому главная загвоздка заключается в том, чтобы найти линию в коде, которую можно было бы просто пропустить — с наименьшей потерей точности. К тому же, если мы где-то можем предсказать какое-то явление или паттерны, отправку данных можно пропустить вовсе.

Сейчас в сравнении с релизной версией в сетевом коде Satisfactory многое изменилось. К примеру, на том же конвейере обновления стали посылаться не двадцать раз в секунду, а всего лишь три. Пакеты с информацией отправляются реже, а данных в них теперь больше. Несмотря на то, что у транспортных лент появилась задержка (и то заметная лишь на аппаратном уровне), потеря сведений свелась к минимуму.

Также появилась неточность в расположении предметов на конвейере — однако это удалось устранить благодаря системе, которая предсказывает их позицию согласно уже известным паттернам.

В итоге конвейеры не только используют меньше данных, чем раньше, но и точнее работают — намного ближе к состоянию сервера. Поскольку вся задержка компенсируется вашим клиентом, она никак не влияет на игровой опыт — а скорее наоборот делает его лучше, так как сама игра ощущается более отзывчиво.

Как настроить дозагрузку
контента для тяжёлой игры

Комментарий удален по просьбе пользователя

Да, лучше почитать дневники разрабов Factorio

Комментарий удален по просьбе пользователя

попить с этими чешскими чуваками баварского пива в Варшаве

Комментарий удален по просьбе пользователя

Адресок подскажи, а то в сл. месяце как раз там буду.

Комментарий удален по просьбе пользователя

А еще у них самая вкусная рулька.

Благодарю. Обязательно зайду.

Вельвет наливают в каждом втором приличном пабе европы.

Комментарий удален по просьбе пользователя

Просто пиво на азоте?

И не говори. "Чтобы уменьшить нагрузку на сеть, мы уменьшили объем отправляемых данных" - вот и вся статья.

Комментарий удален по просьбе пользователя ред.

Описание алгоритмов дано, дальше уже реализация, которая никому и не нужна.

Дельта-кодирование (англ. Delta encoding) — способ представления данных в виде разницы (дельты…

Первый — это полная синхронизация карты между всеми игровыми клиентами. В таком случае на компьютерах игроков бы воспроизводилась локальная симуляция. Так поведение всех объектов было бы на 100% предсказуемым — а вся информация бы обновлялась только тогда, когда происходят непредвиденные явления (например, действия игрока).

Тут мне кажется не хватает небольшого пояснения:
Синхронизация всех клиентов с сервером происходит на старте игры/при подключении клиента к серверу. Сервер пересылает клиенту актуальное состояние мира, после чего клиент может симулировать мир локально, без необходимости синхронизации с сервером несколько раз в секунду кроме случаев, когда игроки производят какие-то действия (но и даже так, можно было бы передавать только действия игроков, без необходимости передавать полный стейт игрового мира).
Но такой подход будет работать только при 100% детерминированной модели игрового мира, т.е. когда при одинаковых входных условиях мы всегда будем наблюдать абсолютно одинаковое развитие событий. К сожалению 100% детерминированности для сложной игры не добиться (по разным причинам, вплоть до разницы в вычислениях с плавающей запятой на разных архитектурах процессоров), о чём, собственно и идёт речь далее в статье.

А ещё первый вариант больше подвержен читерству (подмене данных клиента).

Спасибо за замечание, поправил :)

Я бы почитал как эту проблему решают в промышленных модах для Майнкрафта, который изначально на такое небыл рассчитан в принципе. Хотя там кроме мата читать наверное было бы нечего.

Так там нет такой нагрузки, как в сф. Большинство машин "черные ящики", трубы не тянутся километрами с тысячами объектов внутри, предметы передвигаются стаками. Хотя лагомашина из труб билдкрафта вполне себе работала, когда в нее кучу предметов закидывают и заставляют по кругу циркулировать, с выбором в мир и загрузкой снова в трубы. ред.

трубы не тянутся километрами с тысячами объектов внутри

Это потому что они лагают. И загрузка чанков дорого стоит, особенно на серверах в мультиплеере.

предметы передвигаются стаками

От мода зависит.

Хотя лагомашина из труб билдкрафта вполне себе работала

Пару майнеров с макс. апргейдами нормальненько нагружают. Конечно да, оптимально использовать машины(так и транспорт) в виде черного ящика который по-факту ничего не переносит, но красивости с трубами, конвеерами и мульти-блоковыми машинами сейчас в тренде. А если еще жидкости с газами.

Выделенные серверы [ ]

Поддержка выделенных серверов планируется, работа ведётся, дата релиза этой функциональности не известна.

  • Время не будет останавливаться, если на сервере совсем нет игроков, поэтому фабрики будут продолжать работать.
  • Сервер (независимо от активности игроков) нужно будет перезапускать каждые 24 или 48 часов, что может проиcходить автоматически.
  • Поддержка Linux для серверов рассматривается, но еще не подтверждена. Windows - это начальная платформа, над которой идёт работа.
  • Поддержка выделенных серверов не привязана к какому-то номеру обновления, планируется выход патчем, как только эта функциональность будет готова.
  • Разработчики планируют распространять выделенный сервер без дополнительной оплаты, но держатели таких серверов скорее всего будут взимать плату за свои услуги.

Satisfactory с кем поиграть

Эта публикация удалена, так как она нарушает рекомендации по поведению и контенту в Steam. Её можете видеть только вы. Если вы уверены, что публикацию удалили по ошибке, свяжитесь со службой поддержки Steam.

Этот предмет несовместим с Satisfactory. Пожалуйста, прочитайте справочную статью, почему этот предмет может не работать в Satisfactory.

Этот предмет виден только вам, администраторам и тем, кто будет отмечен как создатель.

В результатах поиска этот предмет сможете видеть только вы, ваши друзья и администраторы.

Настройки сети [ ]

NAT хоста.jpg

Возможно, потребуется регулирование ограничений для сетевых соединений, особенно если используется NAT.

Игра сама пытается определять строгость настроек, и показывает в меню текущий уровень.

Если NAT хоста Умеренный или Открытый, обычно, проблем с подключениями не возникает.

Игра использует порты: [ ]
  • 5222 TCP & UDP
  • 6666 TCP & UDP
  • 7777-7827 UDP

Кроме того, убедитесь в брандмауэре Windows, что запрос игры на сетевое подключение не был ранее отклонён.

Присоединиться к игре [ ]

Присоединиться к игре другого игрока можно из главного меню. Доступны подключения как к друзьям, так и по ID игры.

Подключение по ID [ ]

Каждая игра в режиме Friends Only имеет свой уникальный идентификатор сеанса. Любой, у кого есть доступ к этому идентификатору, может присоединиться к сеансу.

Несмотря на название режима, ни один пользователь на самом деле не должен быть в списке друзей друг друга ни в Epic, ни в Steam.

Этот идентификатор уникален для каждой сессии и сбрасывается после выхода из игры.

Идентификатор сеанса доступен в меню Управление игрой. Здесь ID игры можно посмотреть, изменить или скопировать в буфер обмена. Затем хост может поделиться этим идентификатором, чтобы игроки Epic и Steam могли присоединиться.

Дополнительные настройки [ ]

Улучшение производительности [ ]

  • В меню Настройки - Игровой процесс установите качество сети Ультра
  • В меню Настройки - Игровой процесс отключите Отправлять данные об игре

Увеличение скорости обмена данными [ ]

По умолчанию игра настроена на максимальную скорость обмена в 64 Кбит/сек. Если скорость сети позволяет, можно увеличить этот лимит, позволив игре использовать большую часть пропускной способности сетевого соединения.

Для этого нужно отредактировать несколько файлов, которые будут перечислены ниже. Чтобы новые значения настроек начали использоваться, игру нужно перезапустить. Правки должны быть внесены и у хоста, и у всех клиентов.

В примерах используется константа 104857600 - это 100 МБит/сек. Если скорость вашего подключения ниже - используйте соответствующую константу. 1048576 - это 1 МБит/сек.

Engine.ini [ ]
Game.ini [ ]
Scalability.ini [ ]

Увеличение TickRate [ ]

Эти изменения могут сделать совместную игру более плавной, уменьшив лаги, но создают дополнительную нагрузку на процессор.

Satisfactory

Обновление 5 для Satisfactory выйдет в экспериментальной ветке 26 октября

Игра с видом от первого лица и открытым миром, в которой вам предстоит заниматься строительством заводов и исследованием незнакомой планеты. В вашем распоряжении для облегчения исследований есть транспорт, реактивные ранцы, прыжковые трамплины и многие другие полезные вещи.

Играть можно как в одиночку, так и с друзьями в кооперативном режиме.

Операционная система : 64-разрядная Windows 7
Процессор : Intel Core i5-3570k с тактовой частотой 3.4 ГГц
Видеокарта : NVIDIA GeForce GTX 660 с 2 ГБ видеопамяти
Оперативная память : 8 ГБ
Место на диске : 20 ГБ

Copyright © 2001-2021Все права защищены законодательством РФ. Использование материалов сайта возможно только с прямой ссылкой на источник.

Содержание

На данные момент выделенные сервера отсутствуют. Хостом должен выступать один из игроков. Он начинает игру и приглашает других игроков. Если хост покинет игру, остальные игроки не смогут продолжить.

Мультиплеер

Satisfactory поддерживает мультиплеерную игру. Официально - до четырёх игроков. Хотя.

Это кооперативная игра, в ней нет элементов PvP, но пионеры могут нанести урон друг другу.

Игроки из Epic Games Store и Steam могут свободно объединяться и играть вместе.

Ограничение четырёх игроков [ ]

Ограничение введено разработчиками и может быть снято, если возможности вашей сети позволяют комфортно играть с большим количеством участников.

C:\Users\<Ваш логин в Windows>\AppData\Local\FactoryGame\Saved\Config\WindowsNoEditor\Game.ini

нужно добавить (или скорректировать) настройку:

Изменения в геймплее [ ]

Некоторые постройки, которые должны существовать только в единственном экземпляре, становятся общими для всех пионеров. Космический лифт, ХАБ используются всеми.

Доступные технологии общие.

Расписанием электровозов может управлять только хост.

Прирученные пёсоящеры помнят своего пионера и доступ к их ячейке открывается только хозяину.

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

Приватность [ ]

Режим игры указывается в настройках мультиплеера. Satisfactory поддерживает два режима:

  • Private - подключение возможно только по внутриигровым приглашениям.
  • Friends only - к игре могут подключиться люди из списка друзей хоста или знающие ID игры. Подключение по ID - это способ собираться игрокам из разных магазинов.

Ни каких более публичных режимов не планируется из опасений, что недостаточно продуманные вопросы безопасности откроют возможности для злоупотреблений и создадут проблемы для игроков.

Читайте также: