Satisfactory пластик как сделать

Обновлено: 04.07.2024

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Satisfactory пластик как сделать

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

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

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

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


крафт огромного количества резины и пластика без побочек вроде полимерной смолы
+1 альтернативный с побочками


1


1


2,074 уникальных посетителей
40 добавили в избранное




Альтернативный способ, с побочками и вложением резины и пластика


Гайд предназначен в основном для более опытных пользователей поскольку содержит 3 вида альтернативных рецептов, возможно вы новичок и вместо строительства сначала изучили карту- тогда это же для вас
Итак, все кто находил альтернативные рецепты по переработке резины в пластик и наоборот знают что в этом рецепте нужно топливо, и при том много топливо которое приходиться делать из той же самой нефти, что-же я предлагаю вам на суд решение данной проблемы
Как это выглядит готовое
много заводов, бочек- нихрена не понятно
давайте разберём
советую брать количество нефти делящееся на 9, такое как 270. 900. 1800. 2250 и тд, ибо нам 2жды придётся делить на 3
исходным продуктом является нефть из которой делаем резину, спросите почему резину ? потому что с неё идёт 2 мазута, который нам очень понадобиться
итак у нас есть условно 1800 нефти, с которой получается 1200 резины и 1200 мазута
казалось бы переработай мазут в топливо и дело с концом аннет, топлива выйдет с гулькин нос по обычному рецепту, и тут мы находим рецепт "разбавленного топлива" который позволяет из 60 мазута крафтить не 40 топлива а аш целых 120. Что дальше с этим делать ? естественно разбавляем, делаем рядом с заводами упаковщики, подводим к ним воду вставляем склад с пустыми канистрами и вот у нас есть вода в бутылях, подводим эти бутыли к заводам в который втекает мазут и получаем канистры с топливом, напротив каждого завода ставим упаковщик и получаем топливо в количестве х2 от полученной резины, тобишь на 1200 резины получаем 2400 топлива, пустые канистры выводим в склад с пустыми канистрами у упаковщиков воды. Что-же нам теперь делать с таким количеством топлива? естественно перерабатываем 1200 резины и 1200 топлива в 2400 пластика, и теперь мы имеем 2400 пластика и 1200 оставшегося топлива.
Поскольку мне, да и думаю вам тоже, особо пластик не нужен - мы берём половину этого пластика и оставшееся топливо и делаем 2400 резины, и теперь у нас есть выход чистого пластика в размере 1200 и 2400 резины соответственно
давайте немного схем, поскольку из фотошопа у меня только пэинт то будем довольствоваться им - итак что у нас по трубам
вроде всё просто и понятно
далее мы берём собственно конвееры
и вот мы имеем много резины и много пластика, большинству из вас его хватит для всего, но у меня и у некоторых ещё людей большие планы, самые глазастые наверное увидели что у меня выходит с нижних заводов пластик вместо резины - тут уж сами эскперементируйте и подводите
PS:поскольку все месторождения нефти находятся рядом с водой то проблем с её подводом быть так же не должно
PS2: Видишь побочки ? и я не вижу, а их и нет

Альтернативный способ, с побочками и вложением резины и пластика

После некоторого игрового времени был проэкспериментирован новый, чуть более выгодный способ: более энергозатратный, требующий больше места и в данном случае мы ещё и производим смолу как побочку
выглядит всё почти так же как в 1 варианте
для данного способа потребуется дополнительно ещё 1 альт. рецепт "мазут" который мы берём за первоначальное производство продукта из нефти
полученный мазут мы вливаем в "разбавленное топливо", после 4 обновления появились смесители и альтернативный рецепт на них который позволяет смешивать сразу мазут с водой, минуя канистры. Вы можете так же делать всё через канистры(как в способе выше) если у вас нет смесителей / альт. рецепта на данное топливо
в моём случае будет представлен вариант со смесителями
по трубам всё снова просто (у вас их может быть больше, как и конвейеров соответственно, я делаю упрощённый вариант лишь чтобы показать)
мои насосы находятся под платформой и подают воду сразу к смесителям снизу, на скрине их соответственно не видно
что по конвейерам то картина такая
правая часть производит ресурсы для переработки обратно, с левой части мы выводим чистый пластик/резину. Между двумя нижними рядами мы ставим склады с резиной и пластиком соответственно, чтобы заполнить первоначально заводы, ибо в отличии от первого способа у нас здесь нет резины производящейся из нефти
так же вместе с мазутом мы производим смолу, в моём случае она сжигается поскольку сам по себе способ даёт довольно много резины с пластиком, но вы можете переработать его в более нужные детали, либо же пустить на крафт "полиэстера" (альтернативный рецепт ткани из смолы)
и тут мы добираемся до второго интересного момента - в данном способе вы можете забирать только резину/пластик
схема второго варианта будет такая
в моём случае я произвожу из 1080 нефти 1440 пластика и 1440 резины (2 конвейера по 720), если же мы берём как в 1 способе 1800 нефти то получаем 2400 мазута = 4800 топлива, выход будет по 2400 резины и пластика, либо же в варианте когда вам нужно что-то одно то 4800 резины либо пластика +1200 смолы.
Для второго варианта мы берём лишь треть топлива то бишь 1600 и 1600 резины/пластика из нижнего ряда, выходит 3200 резины/пластика +3200 топлива что осталось, которые заводим в нижний ряд и делаем 6400 резины/пластика из которых которых вычитаем 1600 как уже написано выше для обратной переработки и получаем 4800 продукта

Satisfactory пластик как сделать

( Очистительный завод) (60 / min) 6x Полиэфирная смола

Вода

(20m³ / min) 2m³ Вода (20 / min) 2x Пластмасса
Пластмасса
( Очистительный завод)

Сырая нефть

(30m³ / min) 3m³ Сырая нефть (20 / min) 2x Пластмасса (10m³ / min) 1m³ Мазут
Альт.: Переработанная пластмасса
( Очистительный завод) (30 / min) 6x Резина (30m³ / min) 6m³ Топливо (60 / min) 12x Пластмасса 100 200 200 1 000 25 100 200 3 000 50 100 100 50 200 100 50 1 000 400 400 50 500 50
Печатная плата
2x Медный лист 4x Пластмасса 1x Печатная плата

Сборщик

Сборщик
Промышленная цистерна
30x Пластмасса 3x Тяжелый модульный каркас

Промышленная цистерна

1x Промышленная цистерна
Упаковщик
20x Стальная балка 10x Резина 10x Пластмасса 1x Упаковщик
Пустая канистра
2x Пластмасса 4x Пустая канистра

Конструктор

Конструктор
Альт.: Покрытая железная пластина
10x Железный слиток 2x Пластмасса 15x Железная пластина

Сборщик

Сборщик
Изготовитель
5x Мотор 10x Тяжелый модульный каркас 50x Кабель 50x Пластмасса

Изготовитель

1x Изготовитель
Компьютер
10x Печатная плата 9x Кабель 18x Пластмасса 52x Винты 1x Компьютер

Изготовитель

Изготовитель
Альт.: Пластиковая умная обшивка
1x Укрепленная железная плита 1x Ротор 3x Пластмасса 2x Умная обшивка

Изготовитель

Изготовитель
Альт.: Переработанная резина
6x Пластмасса 6m³ Топливо 12x Резина Очистительный завод
Альт.: Облицованная стальная пластина
3x Стальной слиток 2x Пластмасса 18x Железная пластина

Сборщик

Сборщик
Alternate: Classic Battery

Сера

6x Сера 7x Дюралюминиевый лист 8x Пластмасса 12x Проволока 4x Аккумулятор

Изготовитель

Изготовитель
Суперкомпьютер
2x Компьютер 2x Ограничитель ИИ 3x Скоростной коннектор 28x Пластмасса 1x Суперкомпьютер

Изготовитель

Изготовитель
Экстрактор для скважины
10x Стальная балка 10x Пластмасса 1x Экстрактор для скважины
Альт.: Катерийная плата
10x Пластмасса 30x Сверхпроволока 7x Печатная плата

Сборщик

Сборщик
Реактивный ранец
50x Пластмасса 50x Резина 15x Печатная плата 5x Мотор

Реактивный ранец

1x Реактивный ранец
Gas Mask
100x Резина 100x Пластмасса 100x Ткань

Gas Mask

1x Gas Mask
Трубопровод ур. 2
2x Медный лист 1x Пластмасса 1x Трубопровод ур. 2
Трубопроводный насос ур. 2
2x Мотор 4x Железобетонная балка 8x Пластмасса 1x Трубопроводный насос ур. 2
Защитный костюм
50x Резина 50x Пластмасса 50x Дюралюминиевый лист 50x Ткань 1x Защитный костюм An AnthorNet platform © 2019-2021 | Gaming Tool/Wiki/Database to empower the players.
The assets comes from Satisfactory or from websites created and owned by Coffee Stain Studios, who hold the copyright of Satisfactory. All trademarks and registered trademarks present in the image are proprietary to Coffee Stain Studios.
Support me on Patreon!

Did you knew that you can support me on Patreon?
As a freelancer, you can weight into my work more than you can think,
every single donation is time for me to do more awesome work for the community!

Satisfactory пластик как сделать

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

Топливо
( Очистительный завод)

Сырая нефть

(60m³ / min) 6m³ Сырая нефть (40m³ / min) 4m³ Топливо (30 / min) 3x Полиэфирная смола
Альт.: Мазут
( Очистительный завод)

Сырая нефть

(30m³ / min) 3m³ Сырая нефть (40m³ / min) 4m³ Мазут (20 / min) 2x Полиэфирная смола
Альт.: Полиэфирная смола
( Очистительный завод)

Сырая нефть

(60m³ / min) 6m³ Сырая нефть (130 / min) 13x Полиэфирная смола (20m³ / min) 2m³ Мазут
Остаточный пластик
6x Полиэфирная смола

Вода

2m³ Вода 2x Пластмасса Очистительный завод
Остаточная резина
4x Полиэфирная смола

Вода

4m³ Вода 2x Резина Очистительный завод
Альт.: Полиэстер
16x Полиэфирная смола

Вода

10m³ Вода 1x Ткань Очистительный завод An AnthorNet platform © 2019-2021 | Gaming Tool/Wiki/Database to empower the players.
The assets comes from Satisfactory or from websites created and owned by Coffee Stain Studios, who hold the copyright of Satisfactory. All trademarks and registered trademarks present in the image are proprietary to Coffee Stain Studios.
Support me on Patreon!

Did you knew that you can support me on Patreon?
As a freelancer, you can weight into my work more than you can think,
every single donation is time for me to do more awesome work for the community!

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