Пятничные факты #274 – Новая система жидкости 2

Spread the love

опубликовали Dominik, Klonan, kovarex

Новая система жидкости 2 (Dominik)

Привет Факторианцы,

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

В FFF-260 я писал о том, как все это началось, почему мы это делаем и каков план. Мы получили огромный отклик от всех вас, и я хочу поблагодарить всех за их вклад. Позвольте мне извиниться перед редакторами, так как в начале я начал отвечать на форумах, и когда я понял, что есть и Reddit, было слишком много комментариев для меня, чтобы справиться со всеми вопросами.

Пользователи форума выдвинули много идей о том, как система может работать. Около трети из них была идея телепортации жидкости, многие из которых были известны, но многие были совершенно новыми и интересными. То, что заинтриговало меня, было большим разнообразием направлений, из которых они пришли – различные виды инженеров (механика, CS, электротехника, …), математики, физики, и даже люди с практическим опытом с реальными трубами. Я не буду описывать их здесь, вы можете найти их на форумах или в Reddit. На форуме было два предложения, которые были настолько хороши, что попали в игру – от Quinor и TheYeast.

Оба эти предложения были очень похожи и похожи на логику что есть в игре. То, что их разделяет, – то, что механика все еще использует моделирование физики жидкости и объем в трубе как основу для вычисления движения. В результате не так много изменений на первый взгляд. Тем не менее, они добавляют акцент на том, что обновление текучей сети не зависит от текущего состояния (то есть обновление одной трубы зависит только от состояния с последнего тика) и, следовательно, не зависит от порядка оценки, что было одной из самых больших проблем старой модели, которая привела к иногда смешному поведению соединения. Разница между этими двумя вариантами была довольно небольшой – версия Quinor обеспечивала идеальную пропускную способность с 3 проходами через fluidbox (fluidbox управляет жидкостями для объектов, поэтому я говорю. о них), в то время как у TheYeast было 2 прохода с ¼ пропускной способностью. Что было замечательно, так это то, что физик TheYeast поддержал модель с хорошим теоретическим опытом и, более того, он создал потрясающий симулятор JS для тестирования и сравнения различных модификаций модели. Поскольку этот дополнительный проход в версии Quinor был слишком дорогим для идеальной пропускной способности, я выбрал два прохода TheYeast.

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

Новый алгоритм

Новый алгоритм следует реалистичным волновым уравнениям. Работает с двумя переменными.

  1. Объем жидкости в fluidbox(FB) и соответствующая высота колонки.
  2. Скорость потока в соединении между fluidbox.

Точное поведение зависит от двух констант:

  • C^2 – соответствует массе жидкости. Влияет на то, как быстро распространяются изменения (волны).
  • Трение – влияет на то, насколько быстро пропускная способность падает с длиной трубы.

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

Двухпроходный алгоритм для одного обновления (без учета множества деталей) выглядит следующим образом:

  1. Обновить скорость потока на всех соединениях
    A. d = разность столба жидкости (на входе всегда 0, а на выходе макс.)
    B. d *= c^2
    C. (механизм гашения волн)
    D. Скорость потока+= d
    E. Фиксирует поток, чтобы получить максимум ¼ содержимого (в противном случае мы могли бы получить значение ниже 0 – помните, что мы используем только информацию последнего тика); жидкость может временно превысить максимум.
  2. Переместить жидкости вдоль всех соединений
    A. Просто переместить «скорость» количества жидкости от одного FB к другому

Этот алгоритм настолько прост и работает так же хорошо, а также требует лишь очень небольших изменений, чтобы он был явным победителем. Основным недостатком является то, что он может перемещать только ¼ содержимого FB за один тик, поэтому FB увеличиваются для компенсации. Другая причина заключается в том, что в пустой трубе может показаться, что жидкости движутся довольно медленно, но на самом деле это вполне реалистично и выглядит красиво. Третьей проблемой могут быть некоторые волны и колебания, которые являются результатом реалистичной модели и очень малы по сравнению с текущей моделью демпфирования. Это может быть еще более ограничено путем введения непрерывного производства / потребления жидкости, но в данный момент это не кажется необходимым.

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

Как небольшое, но удобное улучшение, теперь вы можете видеть информацию о расходе в информации о сущности каждой трубы.

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

Производительность

Изменения и оптимизация в FFF-271 сократили время обновления примерно на 50% и до 10 раз на некоторых высокопроизводительных процессорах.

Введение нового алгоритма сделало его сразу на 30% медленнее. Короче говоря, с помощью различных исправлений, в том числе небольшого изменения, сделавшего алгоритм 1 повторным, это увеличение было сокращено до 15%. Таким образом, общий результат заключается в том, что обновление данных по-прежнему происходит намного быстрее, чем было раньше. Я все еще обсуждаю слияние сегментов, так как это не так просто, и это будет стоить имитации некоторых деталей. На данный момент это низкий приоритет по сравнению с другими частями времени обновления.

Смешивание жидкости

Вот так. Больше не нужно смешивать жидкость.
Как только пустая система подачи жидкости (соединенная сеть fluidbox – трубы, крафт-машины и т. Д.) касается жидкости или фильтра жидкости, система блокируется на эту жидкость. Тогда невозможно подключить его к другой системе с другой жидкостью. Существует довольно много действий, которые могут привести к объединению систем, поэтому каждое из них необходимо проверить:

  • Создание объекта с fluidbox (например, трубы, насосы, резервуары для хранения)
  • Настройка рецепта с вводом / выводом жидкости
  • Поворот сущности

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

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

Нужен разработчик macOS  (Klonan)

В начале этой недели наш давний сопровождающий macOS и веб-администратор HanziQ сообщил нам, что он покидает команду и переходит к другим проектам. Он был частью команды Factorio в течение почти 4 лет, и за это время внес большой вклад в игру и сообщество. Мы все желаем ему всего наилучшего в его будущих начинаниях.

Уход из HanziQ вместе с уходом нашего другого разработчика для MacOS Jiří означает, что в настоящее время в нашей команде нет никого, кто мог бы работать и поддерживать версию игры для MacOS. Это довольно серьезная проблема, так как мы переписали движок GFX, который в основном не тестировался, и должен быть выпущен с 0.17. Если вы знаете кого-нибудь, кто может помочь нам занять эту должность, направьте их в наш список вакансий разработчика MacOS.

Steam ключи прямо от нас (Klonan)

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

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

Steam awards 2018 (Klonan)

Голосование Steam awards 2018 началось, и Factorio номинирован на «КЛАДЕЗЬ МАШИННОГО ВЕСЕЛЬЯ». Есть также две другие чешские игры, номинированные на ту же категорию, поэтому страна довольно хорошо представлена.

Животное названо в честь игры (kovarex)

Новый вид скорпиона Neobuthus Factorio был только что идентифицирован и классифицирован. У моего отца есть хобби ходить (не только) в опасные места и выявлять необнаруженные виды скорпионов и пауков. Он предложил назвать одну из своих классификаций в честь игры для смеха. Вы можете найти полную публикацию здесь.

Как всегда, дайте нам знать, что вы думаете на нашем форуме.


Комментарии: