суббота, 18 апреля 2015 г.

Пятничные факты #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%

Обсуждение этого всего на официальном форуме: http://www.factorioforums.com/forum/viewtopic.php?t=9928

Спасибо за внимание!
Если Вам понравилась статья, поделитесь ей с друзьями! Чтобы следить на новыми статьями, подписывайтесь на наш блог или вступайте в сообщества: ВКонтактеgoogle+, twitter.

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

Отправить комментарий