Сегодня мы поговорим об интересном проекте FUE5. Это Factorio, но в 3D! Иногда мечты становятся явью. Это не совсем игра, а, скорее, потрясающее переосмысление её визуальной составляющей. В этой написанной Hurricane статье будет много технических подробностей, так что давайте приступим.
Что такое FUE5?
FUE5 (сокращение от Factorio in Unreal Engine 5) — это экспериментальный проект с простой целью: визуализация 2D-мира Factorio в 3D-пространстве. Он был создан 3D-художником Hurricane и моддером Factorio по имени Nuke за пять месяцев с 10 января 2023 года. Многие творческие люди в сообществе моддеров Factorio создают потрясающие крупномасштабные моды наподобие Space Exploration, модов Bob и Angel, но мы решили пойти немного иным путём. Этот проект — среда 3D-визуализации, способная импортировать базы из игры Factorio и визуально воссоздавать их поведение. Он не содержит геймплея, но пользователь может полетать и рассмотреть свою базу в 3D.
Как это реализовано?
Чтобы хотя бы начать думать о реализации подобного проекта, необходимо было с нуля смоделировать и анимировать на основании спрайтов игры каждый объект Factorio, будь то сборочный автомат или манипулятор. Для 3D-моделирования мы использовали Cinema4D, а для создания текстур — Adobe Photoshop. После завершения моделирования и текстур вся структура экспортировалась из Cinema4D в формат FBX, который затем импортировался в Unreal Engine 5, где применялись соответствующие шейдеры. Такие шейдеры — это обычно материалы наподобие стекла, металла или даже дыма.
Также необходимо было воссоздать множество важных систем, например, конвейеров, поездов и систему логистики. Мы создали их при помощи нативной системы нодов блюпринтов UE5. Мы решили создавать всю логику для этих систем, когда процесс 3D-моделирования был практически закончен, так как для правильного размещения подвижных элементов нам нужны были 3D-модели подходящего размера в 3D-пространстве. Важный этап, способствовавший развитию проекта, заключался в гениальной идее экспортировать базы Factorio непосредственно из игры, а затем импортировать их в среду Unreal Engine. Это решение помогло сэкономить кучу времени на построении баз, которое было бы монотонной задачей; к тому же, если бы мы делали всё только в Unreal Engine, то базы выглядели бы неправильно.
1. Система строений
Первый главный компонент FUE5 — это возможность генерации строений аналогично тому, какими они выглядят в Factorio. Считывая внутриигровые данные, мы можем получать типы строений, их расположение и соединения кабелей. Эта информация экспортируется в файл JSON при помощи мода экспорта FUE5 напрямую из самой игры. Затем этот файл считывает проект FUE5, и этого достаточно для воссоздания поведения всех зданий и транспорта на настоящей базе.
2. Система конвейеров
Кроме создания 3D-моделей для отдельных конвейеров нам нужно было разобраться в механике перемещения предметов. Мы достигли этого, представив конвейеры в виде сплайнов. При экспорте базы Factorio при помощи мода экспорта FUE5 каждый непрерывный сегмент конвейера (сегмент конвейера, который подключён и заканчивается тоннелем, само по себе или зациклен) считается отдельной системой. При считывании данных FUE5 создаёт сплайн для каждой из этих отдельных систем. Затем эти сплайны направляют предметы по тому же пути, что и в самой игре.
3. Система поездов
Система поездов сильно отличается от системы конвейеров, потому что воссоздание расписаний поездов, сигналов и поиска путей локомотивов было бы очень сложной задачей. Вместо этого мы решили использовать нативную систему поиска маршрутов поездов из Factorio. Чтобы поезд мог появиться и перемещаться в FUE5, необходимо задать конечную точку его назначения и дать ему зелёный свет, а уже потом экспортировать базу. На этом этапе мы можем считывать вычисленный маршрут поезда и использовать его для создания сплайна, определяющего движение поезда в FUE5.
4. Логистическая система
Мы сразу же отказались от создания строительных дронов, потому что на данном этапе создаём здания при помощи нативной системы UE5 Construction Script, и какое-то время не собираемся ничего в этом менять. Вместо этого мы сосредоточились на обеспечении правильности работы логистических ботов, потому что они — основа существования любой минимально сложной базы Factorio, и к тому же добавляют визуальной интересности всей картинке. У каждой дронстанции есть вероятность случайного создания кластера логистических дронов; каждый дрон имеет простой мозг для поиска поблизости логистических сундуков и перемещения между ними для визуальной имитации транспортирования ресурсов. После завершения задачи транспортировки ресурсов дрон определяет местоположение ближайшей дронстанции и направляется к ней, чтобы уничтожиться.
Проблемы и оптимизация
Первые серьёзные проблемы стали очевидными, когда на ранних этапах проекта мы начали импортировать в FUE5 крупные базы. FPS существенно упал, а события блюпринтов начали создавать ненадёжные результаты; именно поэтому чтобы проект работал хотя бы на 30-60 FPS, необходимо было провести работы по оптимизации.
Основными целями оптимизации были количество полигонов, разрешение текстур, частицы и количество обновлений, происходящих за один такт. Их необходимо было существенно снизить при помощи оптимизации системы конвейеров, которая на ранних этапах проекта приводила к сильным торможениям. Также мы сильно повысили FPS, настроив и оптимизировав уровень детализации (LOD) анимированных частей зданий, например, вращающихся цилиндров центрифуг, шестерней и поршней на крышах сборочных автоматов.
Также нам нужно было получить разрешение разработчика Factorio Wube Software. Мы спросили о степени законности нашего проекта и разработчики отнеслись к нам с большим пониманием, разрешив выпустить проект при условии, что он не будет использоваться коммерчески.
Самое интересное
Разобравшись за первые два месяца работы с общей идеей и основной частью прототипов, мы достаточно легко смогли воссоздать объекты и системы Factorio. Настало время заняться красотой и созданием главного трейлера релиза, в котором демонстрируются крупномасштабные базы, созданные при помощи экспортера FUE5, а также множество других вещей, которые можно реализовать в среде FUE5.
Для показанных в трейлере крупномасштабных фабрик необходимо было создать множество уникальных объектов. Простая возможность экспорта внутриигровых баз Factorio не позволила бы добиться особо чистых и кинематографических результатов, поэтому мы вручную внесли множество изменений, чтобы в камере всё выглядело красиво! Кроме того, оказалось, что спагетти-базы визуально гораздо более интересны, чем длинные ряды одинаковых зданий, оптимизированных для получения высокого производства науки в минуту (science per minute, SPM).
Как пользоваться FUE5
Этот проект — не игра, в нём нет интерфейса пользователя, а для его использования требуются базовые знания UE5. Однако вы можете найти полное описание процесса на нашей странице GitHub. После установки UE5 и запуска скачанного проекта вам достаточно будет выбрать фрагмент базы, который вы хотите экспортировать, а затем экспортировать его в FUE5, как это описано в подробном руководстве. Один раз поняв процесс, вы сможете очень легко его повторять.
Будущее
Мы хотели поделиться этим проектом, выложив его в опенсорс на GitHub, потому что сообщество Factorio — это крайне увлечённая группа очень творческих людей, и доступ к подобному проекту может позволить её участникам ощутить любимый ими мир в новом измерении. Кроме того, это даст наиболее творческим фанатам возможность создавать то, что раньше было невозможно.
Сейчас мы с Nuke работаем над совершенствованием готовых систем, чтобы их было проще использовать, и чтобы производительность оставалась высокой даже при больших размерах баз. Также мы начали экспериментировать с возможностью добавления в будущем контента из модов.
Фабрика должна расти!