Блог розробників (FFF#274)- Нова система рідин 2

Поделиться

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

Нова система рідин 2 (Dominik)

Привіт Factorians

Вот и я, Доминик, з новою інформацією про рідини. На цей раз все майже завершено, тому я можу розповісти вам факти, а не тільки припущення. Ви знайдете тут, як буде працювати новий алгоритм, і деякі нові зручні функції використання.

В 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 був тільки що ідентифікований і класифікований. У мого батька є хобі ходити (не тільки) в небезпечні місця і виявляти невиявлені види скорпіонів і павуків. Він запропонував назвати одну зі своїх класифікацій в честь гри, для сміху. Ви можете знайти повну публікацію тут.

Як завжди, дайте нам знати, що ви думаєте на нашому форумі.


Поделиться

Comments: