Пятничные факты #82 от команды factorio. Оптимизация.

Поделиться

Это перевод статьи с официального сайта. Вот тут Вы можете прочитать оригинал.
Приветствую, любители factorio!
Надеюсь Вам нравятся списки и цифры, потому что сегодня я собираюсь попотчевать Вас ими 🙂

Объявляем версию 0.11 стабильной.

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

Расширение команды.

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

  • kovarex: основатель, программист, руководитель разработки и генератор идей для игры.
  • slpwnd (Tomas): соучредитель, руководитель и программист, занимается юридическими вопросами, а также отбраковывает слишком безумные идеи от kovarex.
  • Albert: ответственный за графику, он с нами с самого начала.
  • cube: программист и технический эксперт.
  • Pavel: усиление графического отдела.
  • Daniel: живет в Англии и сочиняет для factorio музыку и звуки.
  • Rseding91: программист из США, работает по удаленке.
  • Twinsen (Robert): программист из Румынии, переехал в Прагу.
  • Leon: художник из Нидерландов, занимается созданием концепт-артов.
  • Martin: программист, присоединился к нам недавно.
  • Michal: программист, собирается вступить в наши ряды в течении двух недель.
Это будет уже 11 человек! Я могу реально ощутить ускорение в работе! А поскольку в ближайшее время нас ждут несколько больших изменений в игре, посмотрим насколько хорошо у нас получится координировать такую команду.

Прогресс в todo-листе версии 0.12.

Подведем итоги, что же мы наобещали сделать в версии 0.12:
  • Улучшенный мультиплеер (устранение лагов, поддержка пвп). Tomas работает над этим и добился впечатляющих результатов. Более подробно об этом мы расскажем в следующих пятничных фактах.
  • Первая часть контента для поздней стадии игры (постройка ракеты и отправка ее в космос). Robert закончил разработку космодрома и ракеты, осталось придумать рецепты для деталей ракеты и способ установки ракеты на космодроме.
  • Цепочки светофоров для поездов (подробнее). Martin все еще работает над ними, много деталей не доделано. Всесторонним тестированием займемся на следующей неделе.
  • Комбинатор (?) и больше логических схем (планы). У нас было несколько обсуждений комбинаторов, есть идеи, которые стоит обсудить. Вскоре Robert примется за их разработку.
  • Персональный робо-порт. Прогресс: 0%.
  • Оптимизация скорости игры (в основном оптимизация конвейеров). Я (kovarex) работаю над этим, подробности читайте ниже.
  • Новая графика для боевых роботов (посмотрите пример тут). Практически готова для добавления в основную версию.
  • Интеграция в стиме. Технически это не часть 0.12. Мы решили подумать об этом, когда версия 0.12 будет стабильна, ведь дальше откладывать уже некуда.
Список не такой уж страшный, так что моя оптимистичная оценка для выхода версии 0.12 – 1.5 месяца с сегодняшнего дня. Tomas считает, что это займет минимум 2.5 месяца. Я знаю, что он прав, но предпочитаю оставаться оптимистом и преодолевать дедлайны!

Оптимизация.

Для меня начало новой версии всегда привязано к оптимизации. Оптимизации в игре никогда не будет слишком много, ведь любое производство может быть расширено. Это особенно важно сейчас, когда есть мультиплеер. Много игроков строят больше всяких штук, это же очевидно.
Наибольшее время на просчет своей логики при обновлении игры требуют конвейеры. Логика их работы вроде бы проста, но очень не эффективна. Каждая вещь на конвейере – это отдельный объект в игре со своим расчетом столкновений и положением. Когда объект на конвейере должен передвинутся, все близлежащие объекты (в квадрате 2х2) должны быть проверены на столкновение. А рядом может быть большое количество объектов, особенно если тут находится другой конвейер. Таким образом количество проверок может быть просто огромным.
Вот здесь 18 объектов, которые будут просчитывать столкновения на данном участке конвейера для каждого индивидуального движения:
Для версии 0.12 я полностью переписал логику работы конвейеров и связанных с ними элементов (сплиттеров, подземных конвейеров). Вещи на конвейере теперь не будет отдельными объектами. Они будут просто внутренними структурами, движущимися по “особым невидимым рельсам”. Таким образом, когда объект двигается по конвейеру, только один объект впереди него проверяется на столкновения.
Движение теперь требует только проверить место перед объектом, вместо того, чтобы проверять все объекты вокруг.
Преимуществом этого подхода также является то, что можно контролировать загруженность конвейера и не допускать таких вот ошибок (пробок на конвейере). Эффект от этой оптимизации – сокращение времени обсчета на 20% на тестовых производствах.
В сочетании с другими оптимизациями, время обновления игры в версии 0.12 будет на 28% меньше, чем в 0.11. Моя мечта – получить 50% оптимизацию, чтобы можно было строить в два раза больше объектов! Но, очевидно, что дальнейшая оптимизация будет все сложнее и сложнее. С другой стороны это будет и интереснее.
Меня спрашивали, каково распределение времени обновления для разных объектов. Вот Вам распределение для 20 различных стандартных построек:

Постройка Время обновления Планы
Манипулятор 18.01% Сокращение избыточных расчетов при поворотах
Конвейер 12.44% Улучшение кэширования положения и логики активации/деактивации
Дым 9.66% Сокращение времени жизни дыма и логики его движения
Сборочный цех / завод / печь 6.97% Реализация режима сна / пробуждения
Солнечная батарея 4.11% Объединение солнечных батарей в группы, когда они находятся в одной сети
Трубы 3.68%
Шахта 3.40%
Юнит 3.33%
Подземный конвейер 2.80%
Логистический робот 2.60%
Сплиттер 2.31%
Аккумулятор 1.58%
Лампа 1.47%
Робопорт 1.21%
Бойлер 0.47%
Частица 0.40%
Автомобиль 0.31%
Генератор 0.28%
Обсуждение этого всего на официальном форуме: //www.factorioforums.com/forum/viewtopic.php?t=9928

Поделиться

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

Добавить комментарий

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