Блог разработчиков RoadCraft: создаем движок!
Привет всем и добро пожаловать в этот блог разработчиков RoadCraft!
Сегодня мы погрузимся в истоки движка Swarm (World War Z, Space Marine 2), созданного специально для RoadCraft.
Но что такое Swarm Engine? Это инструмент, который заставляет толпы и транспорт вести себя более естественно и реагировать так же, как в реальной жизни.
Вы узнаете, как она появилась на свет, какие функции вошли в игру, а какие нет (и почему), и даже получите представление о некоторых перспективных технологиях, которые могут повлиять на будущие игры. 😉
☀️ Рождение RoadCraft
Идея RoadCraft начала обретать форму примерно через год после запуска SnowRunner. Сначала это был просто простой питч:
Что если бы мы создали демо-версию движка Swarm, которая могла бы деформировать ландшафт, как в SnowRunner?
В то время главным вопросом с технической точки зрения было то, как внедрить функции SnowRunner в последнюю версию движка Swarm, в основном потому, что поддерживать работу двух движков одновременно было просто нереально.
И да, попытки перенести что-то с одного движка на другой были сопряжены с большими проблемами.🤯
Как только мы поняли, что не можем просто продолжать поддерживать старый движок и одновременно разрабатывать новые функции, настоящей проблемой стало выяснение:
- Какие функции мы внедряем в первую очередь?
- В каком порядке?
- И как они будут выглядеть на самом деле в новой технологии Swarm?
💪 Засучиваем рукава
Чтобы построить RoadCraft, нам пришлось по-настоящему испачкать руки. 😅
Нам пришлось переосмыслить все, от технологии ландшафта до освещения. Хотя мы перенесли некоторые технологии из наших предыдущих проектов, адаптация их к новой среде оказалась гораздо более трудоемкой, чем ожидалось.
Одной из самых сложных задач было позволить нескольким членам команды работать на одной и той же территории, не наступая друг другу на ноги.
В прошлых проектах Swarm мы в основном использовали геометрию вместо полноценных технологий ландшафта, так что это было для нас новым направлением.
Затем появились игровые возможности RoadCraft: засыпка песка, укладка асфальта, снос деревьев... Сначала они были базовыми, просто доказательством концепции. Но по мере развития они начали влиять на деформацию ландшафта неожиданными (и часто хаотичными) способами. Мы потратили месяцы, просто чтобы убедиться, что ландшафт не будет взрываться каждый раз, когда игрок возится с песком или деревьями.
В какой-то момент мы даже думали вообще отказаться от укладки асфальта, чтобы сохранить реалистичность проекта. Но в итоге мы протолкнулись и рады, что сделали это.😊
Кстати, на данный момент мы не можем включить в RoadCraft возможность повреждения транспортных средств, но вернемся к этой теме в будущем блоге разработчиков!
Вот как выглядела местность во время создания первых прототипов проекта.
Ландшафт нашего самого первого уровня-прототипа, представляющий раннюю версию фабрики. Здесь мы впервые протестировали технологию, которая позволяла нескольким людям работать над разными частями одного уровня одновременно. Тогда эти разделы, называемые «блоками ландшафта» в движке, были намного меньше, чем сейчас.
🚧 Песок, лес и асфальт: история любви и ненависти
Добавление механики песка стало для нас большим шагом вперед. Наша система ландшафта изначально не была рассчитана на такие интенсивные изменения, но мы заставили ее работать.
Что действительно застало нас врасплох, так это деревья. Да, деревья. 🌳
• Когда деревья дают отпор
Оказывается, когда вы позволяете игрокам копать территорию, они также могут копать землю под деревьями. И если вы это сделаете, эти деревья должны логически упасть. Легко в теории, но сложно на практике.
И весь этот лес только в какой-то степени материализован. Мы не можем просто сделать все деревья вокруг вас «по-настоящему» физическими
Поэтому нам пришлось поступить умнее: деревья становятся физическими только тогда, когда это имеет значение, когда вы находитесь рядом, когда с ними взаимодействует ИИ или когда происходит реальное столкновение.
Это привело к множеству ошибок (некоторые из которых мы все еще исправляем), но также стало причиной нескольких замечательных моментов.
Большинство деревьев можно снести, срубить, снести бульдозером или сравнять с землей с помощью достаточно тяжелого транспортного средства. Некоторые деревья неразрушимы по своей сути, благодаря команде дизайнеров уровней.
Должен же остаться какой-то вызов, верно?
Одна из наших первых попыток создать «густой» лес на игровом уровне, как только у нас появилось достаточно природных ресурсов, чтобы это осуществить. И да, это Snowrunner Tayga с бульдозерным отвалом. Нет, его нет в игре, но кто знает, может быть, он появится в будущем. (Хотя если и появится, нам придется переделывать его с нуля, так как эта версия была всего лишь для прототипирования).
• Песчаный вызов
Песок имел свои собственные проблемы. В ранних тестах игроки могли складывать огромные кучи песка, что быстро вызывало проблемы с памятью. Поэтому мы добавили ограничения на то, сколько песка можно сложить в одном месте и насколько глубоко можно копать.
Есть причина, по которой в игре нет экскаваторов: поддержка глубокого, полностью физического рельефа обойдется слишком дорого. Поэтому система фокусируется только на области непосредственно вокруг игрока, где в любом случае происходят все крутые взаимодействия.
• Расплавление асфальта
Самой большой технической проблемой был асфальт.
Нашему движку не нравилось иметь больше двух материалов рельефа в одной области. Три вызывали проблемы. Четыре выглядели уродливо и, более того, вызывали хаос рендеринга.
Мы застряли между вырезанием функций или переписыванием основных систем. И поскольку строительство дорог является центральным в RoadCraft, асфальт должен был остаться. Это означало прощание со слоем гравия, хотя это сделало бы все более реалистичным. Возможно, мы найдем способ вернуть его в будущем обновлении или даже в сиквеле.
Когда местность тебя действительно ненавидит всю дорогу 😅. Ранние прототипы взаимодействия местности и техники были жестокими
Где-то по пути проблемы с материалом местности были повседневной болью во всех местах. А что это в левом нижнем углу...
«Физический мир» выглядит иначе… (взгляд на то, как выглядит отладчик Havok)
👀 Помимо ядра!
Одной из самых больших проблем вне игрового процесса был размер файла сохранения. Каждый раз, когда вы рубите дерево, насыпаете песок, кладете асфальт или просто ездите и деформируете местность, файл сохранения становится больше. И в какой-то момент мы серьезно задумались, сможем ли мы вообще втиснуть его в память консоли.
Оптимизация этого зверя была процессом полугода и полтора года нашей коллективной нервной системы в окно. Это все еще тяжелый файл, но теперь он управляем.
Тем не менее, если вы планируете создать асфальтированную парковку из всех карт в игре, ваш жесткий диск будет вам благодарен. 😂
Как и все в жизни, разработка совершенно нового продукта на основе новой технологии — это масштабное начинание, требующее тщательного планирования, трудного выбора и постоянных усилий, чтобы не допустить выгорания команды или выхода проекта за рамки бюджета.
Нам еще многое хотелось бы рассказать, и мы подробнее рассмотрим другие аспекты RoadCraft в следующих блогах разработчиков.
Спасибо за прочтение и будьте готовы к 20 мая! 😉
Не забудьте следить за обновлениями, подписавшись на нас в VKontakte, Telegram