на каком движке создан раст
Разработка игр на Rust. Обзор экосистемы
Здравствуйте! Я занимаюсь разработкой игры на Rust и хочу рассказать об этом.
Моя первая статья будет полезна тем, кто хочет начать делать игру на Rust, но не уверен, какие из пакетов (крейтов) стоит использовать и что вообще происходит в экосистеме Rust для игрового разработчика.
Небольшое отступление — зачем всё это? Есть же готовый X?
Под впечатлением вот этого выступления, я начал писать свой игровой движок на Haskell. Далеко дело не зашло, но я написал рендер моделек, простое освещение, немного сети.
Haskell дал возможность вынести контракты из проверок в рантайме на уровень системы типов. Ну и остальные вещи, о которых рассказывает Кармак — быть уверенным, что функция делает именно то, о чём декларирует в своём типе. Быть чуть ближе к настоящей формальной верификации нашего игрового кода — то есть, в теории, иметь гарантию корректной работы вообще без тестов.
Но, с Haskell было несколько проблем — для вывода 3д в реальном времени он достаточно медлителен. Не было сообщества занимающегося на нём играми. Не хватало нужных для игр библиотек.
С Rust же всё пошло куда веселее.
На мой взгляд, Rust сочетает все свойства, нужные игровым разработчикам, в очень правильном соотношении:
мощная, но при этом простая система типов;
абстракции бесплатны по перфомансу — не надо платить за те абстракции, которые не используешь в явном виде;
И при этом на нём очень просто писать код, язык маленький и простой.
Вернусь к экосистеме:
Работа с окнами:
Glutin — раст-альтернатива GLFW, используется в Servo, активно развивается. Создаёт окна на win/osx/linux/android. На ios еще не работает, кто-то хотел сделать, но с 2015 об этом желающем не слышно.
И есть биндинги к не-растовым библиотекам: glfw-rs rust-sdl2 rust-sfml (сайт). Все три живы и поддерживаются.
Графические API:
Есть возможность использовать напрямую OpenGL/DirectX/Vulkan, к тому же уже созданы растоспецифичные графические библиотеки.
Glium — безопасная обёртка над OpenGL, по факту — в основном над OpenGL 3, хорошо поддерживаются OpenGL
Учились у лучших
Сочетание зомби, создания предметов и выживания популярно далеко не первый год. У Rust, «тезки» одной из популярных сетевых карт для Call of Duty: Modern Warfare 2, есть сразу несколько источников вдохновения — помимо очевидной DayZ, это чуть менее явные Minecraft и S.T.A.L.K.E.R. Rust позаимствовала по несколько кусочков у каждой из трех культовых игр.
Из DayZ сюда пришли паранойя, буйные мертвецы и охота на животных, из Minecraft — строительство и создание предметов, необходимых для выживания в глуши, а также возможность отстраивать персональную крепость с колючими заборами. У серии STALKER, в свою очередь, позаимствованы радиация, вечная осень, романтика спальных мешков и встреч у костра. Только водки для постядерного антуража не хватает, но зато здесь можно отведать консервированных бобов, тунца из банки или куриной грудки, которую придется лично добыть с трупа забитой свиньи. Разработчики так нежно любят шутку про то, как в Rust из свинины получается курятина, что даже посвятили ей одну из коллекционных «стимовских» карточек игры.
Без риска умереть от укуса зомби
При всех заимствованиях Rust — самодостаточная игра со своим узнаваемым обликом. Симулятор выживания скрещен с классическим deathmatch. Ареной для драк служит большой остров, созданный разработчиками. Каждый игрок, впервые попавший на новый для себя сервер, начинает голым аборигеном. В руках — только крупный булыжник, которым можно добывать древесину, стуча по деревьям, и другие ценные материалы, дробя камни.
В особой цене здесь металлические детали, из которых собираются самые дорогие предметы: от амбарных замков и железных дверей до винтовки М4. По качеству предметы можно условно разделить на деревянные, каменные и железные. Материалы добываются просто: древесину можно собрать со специальных поленниц или рубя деревья, камни отламываются от больших валунов, а металл придется плавить в печи, расходуя низкокачественное, сваренное на коленке топливо.
► Взгляд на обманчиво безлюдный ландшафт с холма. и с вершины горы. |
Унизь ближнего
Основная задача игрока — выжить любой ценой, поддерживая на приемлемом уровне три ключевых параметра: здоровье, сытость и дозу полученной радиации. Здоровье соответствует «живучести» героя и теряется от выстрелов, укусов, ударов и падений даже с небольшой высоты. С сытостью чуть интереснее. Показатель неумолимо падает со временем, но в комфортных условиях (например, у разведенного костра) снижается медленно, а холодной ночью или во время активного бега от врагов — значительно быстрее. В игре встречаются радиационные зоны, в которых опасно задерживаться надолго. От радиации взгляд мутнеет, изображение расплывается на пиксели, а счетчик Гейгера шуршит, указывая на смертельную опасность и рост лучевой дозы в организме.
Но самую большую опасность представляют другие игроки. Эти негодяи обожают издеваться над новичками — просто потому, что способов полно. В Rust можно запереть игрока в его же жилище, заставить его раздеться и бегать голышом, сверкая причинным местом, или же посадить на специальную диету из сырого мяса. Апогей веселья показан в ролике, посвященном созданию братства Penis Brotherhood. И именно это привлекает множество игроков — море возможностей для глумления над остальными и так называемого «грифинга». В этом смысле Rust даст фору и DayZ, и Dota 2, и другим «неприветливым» играм.
► Стоило подкормить мясом двух этих «бомжей», как они решили отобрать все мои продовольственные запасы! Не стоило помогать злодеям, но понимание этого пришло слишком поздно. | ► В горах легко переломать себе ноги, пытаясь прыгать с кручи на кручу. Но куда опаснее бродить вдоль дороги, где поджидают опытные игроки с пистолетами и дешевыми винтовками рычажного действия. |
На самых популярных серверах играет по 150—170 игроков, и зачастую там творится натуральный беспредел — ни дать ни взять, «смертельный матч» ветеранов с автоматическими дробовиками и MP5 против тех, кто только-только собрал каменный топор и надеялся достроить стены в шалаше. С поведением игроков сложились реальные проблемы, поэтому играть в удовольствие проблематично. Выживать приходится в условиях вечных издевок, насмешек и постоянного риска потерять за секунду все, что копил сутками.
Урок №1: не оставляйте героя без присмотра!
Урок №2: в случае опасности не стойте на месте!
Урок №3: не лезьте туда, откуда не сможете выбраться!
Урок №4: далеко не все сторонятся радиоактивных зон!
Урок №5: если хотите выразить свою позицию, поищите лучше чертеж дробовика.
Урок №6: даже если помочь кому-то выжить, нет гарантий, что он станет с вами дружить.
Выглядит Rust до изумления неказисто, потому что создается на движке Unity и в основном использует стандартные библиотечные модели и текстуры. Но, несмотря на это, Rust для Гарри Ньюмена — золотая жила. Игра пользуется огромным спросом в Steam и в своей нише уступает по популярности только DayZ. Широкие возможности по мастерению всего и вся позволяют создать массу интересных штук: от кирки и отмычки до фонарика, гранат F1 и противорадиационных таблеток. И охотиться за другими обладателями мощной экипировки, нажитой тяжким трудом, — особое удовольствие.
Пять лет Rust
В этом бардаке, который сейчас происходит в мире, легко забыть, что прошло уже пять лет с выпуска 1.0 в 2015 году! Rust за эти пять лет сильно изменился, так что мы хотели бы вспомнить о работе всех участников сообщества, начиная с момента стабилизации языка.
Напомним, если кто забыл: Rust — это язык программирования общего назначения, который обладает средствами, позволяющими строить надёжное и эффективное программное обеспечение. Rust может быть использован в любой области: от ядра вашей операционной системы до вашего следующего web-приложения. Этот язык полностью построен участниками открытого многоликого сообщества, в основном волонтёрами, кто щедро делился своим временем и знаниями для того, чтобы помочь сделать Rust таким, какой он есть сейчас.
Основные изменения с версии 1.0
1.2 — Параллельная кодогенерация: уменьшение времени компиляции всегда являлось главной темой в каждом выпуске Rust, и сейчас трудно представить, что когда-то был короткий период времени, когда Rust вообще не имел параллельной кодогенерации.
1.3 — The Rustonomicon: наш первый выпуск фантастической книги «The Rustonomicon», книги, которая исследует тёмную сторону языка Rust, Unsafe Rust и смежные темы. Она стала прекрасным источником сведений для любого, кто хочет изучить и понять самые трудные аспекты языка.
1.4 — Поддержка Windows MSVC уровня 1: продвижение платформы на уровень поддержки 1 принесло нативную поддержку 64-битной Windows с инструментарием Microsoft Visual C++ (MSVC). До 1.4 вам нужно было устанавливать MinGW (порт окружения GNU под Windows) чтобы использовать и компилировать ваши программы на Rust. Поддержка Windows стала одним из самых больших улучшений Rust за эти пять лет. Лишь недавно Microsoft анонсировала публичный пре-релиз официальной поддержки Rust для WinRT API! И наконец, сейчас стало значительно легче строить высококачественные и кроссплатформенные приложения, нежели это было когда-либо ранее.
1.5 — Cargo Install: добавлена поддержка возможности сборки исполняемых файлов с помощью компилятора Rust вместе с поддержкой предустановленных дополнений cargo породило целую экосистему приложений, утилит и инструментов для разработчиков, которые сообщество обожает и от которых зависит. Cargo теперь поддерживает довольно много команд, которые сначала были просто плагинами, сделанными участниками сообщества и выложенными на crates.io!
1.6 — Libcore: libcore — это подмножество стандартной библиотеки, содержащее только API, которое не требует функций выделения памяти или функций уровня операционной системы. Стабилизация libcore позволила компилировать Rust без выделения памяти или зависимости от операционной системы, что стало одним из первых основных шагов к поддержке Rust для разработки встраиваемых систем.
1.10 — Динамические библиотеки с C ABI: крейт типа cdylib компилируется в динамическую библиотеку с C-интерфейсом, что позволяет встраивать проекты Rust в любую систему, которая поддерживает ABI языка C. Некоторые из самых больших историй успеха Rust среди пользователей — это возможность написать небольшую критическую часть системы на Rust и легко интегрировать в большую кодовую базу. И теперь это стало проще, чем когда-либо.
1.12 — Cargo Workspaces: позволяют организовать несколько проектов Rust и совместно использовать один и тот же lock-файл. Рабочие пространства были неоценимы при создании крупных многоуровневых проектов.
1.14 — Rustup 1.0: Rustup — это менеджер инструментальных средств. Он позволяет беспрепятственно использовать любую версию Rust или любой его инструментарий. То, что начиналось как скромный скрипт, стало тем, что персонал по эксплуатации нежно называет «химера». Возможность обеспечить первоклассное управление версиями компилятора в Linux, macOS, Windows и десятке целевых платформ была мифом ещё пять лет назад.
1.17 — Rustbuild: одним из самых больших улучшений для наших контрибьюторов в разработке языка стал переход от начальной системы сборки на основе make на использование Cargo. Благодаря этому участникам и новичкам rust-lang/rust стало намного проще создавать и вносить свой вклад в проект.
1.20 — Ассоциированные константы: ранее константы могли быть связаны только с модулем. В 1.20 мы стабилизировали ассоциативные константы для структур, перечислений и, что важно, для типажей. Это упростило добавление богатых наборов предустановленных значений в типы вашего API, таких как общие IP-адреса или использующиеся числовые константы.
1.24 — Инкрементальная компиляция: до версии 1.24, когда вы вносили изменения в библиотеку, компилятору приходилось перекомпилировать весь код. Теперь он стал намного умнее в плане кэширования, насколько это было возможно, и ему нужно только заново перегенерировать изменения.
1.26 — impl Trait : добавление impl Trait дало вам выразительные динамические API с преимуществами и производительностью
статической диспетчеризации.
1.31 — 2018 редакция: выпуск 2018 редакции стал нашим самым большим выпуском языка после версии 1.0, добавив изменения синтаксиса и улучшения в код на Rust, написанного полностью обратно совместимым образом. Это позволяет библиотекам, созданным с разными редакциями, беспрепятственно работать вместе.
1.34 — Альтернативный реестр крейтов: поскольку Rust всё больше и больше используется в производстве, возникает большая потребность в возможности размещении и использовании проектов в приватных пространствах. Вместе с этим в Cargo всегда разрешены зависимости из git-репозиториев. С помощью альтернативных реестров ваша организация может легко создать и делиться своим собственным реестром крейтов, которые можно использовать в ваших проектах, как если бы они были на crates.io.
1.39 — Async/Await: стабилизация ключевых слов async / await для обработки Future была одной из главных вех в превращении асинхронного программирования в «объект первого класса» Rust. Уже через шесть месяцев после его выпуска, асинхронное программирование превратилось в разнообразную и производительную экосистему.
Диагностики и ошибки
Одна вещь, которую мы не упомянули, это то насколько улучшены сообщения об ошибках и диагностика в Rust с 1.0. Глядя на старые сообщения об ошибках кажется, что это теперь другой язык.
Мы выделили несколько примеров, которые лучше всего демонстрируют насколько мы улучшили сообщения об ошибках. Теперь они показывают пользователям, где они допустили ошибки, и помогают понять почему код не работает, а также подсказывают, как можно их исправить.
Куча людей посмотрели это видео уже давно, подключайся и смотри первым!
Ранний доступ. Как много самых разных эмоций вызывает это словосочетание. У одних оно ассоциируется с уникальным геймплеем, который невозможно встретить в играх высокого калибра, другие считают данный раздел в Steam воровством и попрошайничеством. Но невозможно отрицать факт – ранний доступ плотно въелся в игровую индустрию и дал многим разработчикам шанс реализовать себя.
Доброго времени суток, в этот час мы рады представить новую рубрику под названием «Как изменялись игры», в пилотом выпуске мы рассмотрим игру Rust.
Находясь уже почти два года на рынке в раннем доступе, игра привлекла к себе огромное число игроков, а если быть точнее, то около 3 миллионов. Вкратце напомню, что за игра перед нами. В Rust необходимо выживать на неблагоприятной территории, вас может погубить огромное число причин, среди них: кровожадные животные, не менее опасные игроки, голод, обморожение и другие.
Наверняка, многие не знают, что было раньше, года полтора назад. За всё время существования на рынке игра один раз кардинально изменилась, пересев на новые «рельсы». Были интегрированы некоторые функции сервиса Steam и ещё очень много разностей было добавлено.
Но давайте не будем торопиться и двинемся на несколько лет назад, в 2013 год.
Примерно в марте появилась система голода и радиации. В июне мы уже можем заметить значительные изменения в интерфейсе, которые остались с нами до «перерождения» игры.
В итоге за тот промежуток времени игра неплохо преобразилась и 11 декабря 2013 года игра вышла в сервисе Steam. В той версии уже присутствовал основной костяк особенностей, которые и остаются с нами и по сей день: строительство домов разных форм и размеров, охота на зверей и людей. К выходу был подготовлен достаточно весёлый трейлер.
Произошло значительное изменение, из игры полностью вырезали зомби, поэтому они сместили акцент с выживания в зомби-апокалипсисе на выживание в суровом, неблагоприятном мире, где тебя окружают волки, медведи и кабаны. Добавили кровать, револьвер, оптимизировали небо, которое любило «отъедать» ваши кадры в секунду.
В это время разработчики начали разрабатывать новую версию Rust на более современной версии Unity (потому что предшественник не мог воплотить многие аспекты в жизнь), создавая заново интерфейс, графику и остальное.
В первую очередь старались улучшить инвентарь и интерфейс, появились более удобные всплывающие окошки при выборе действия, чтобы, например, зажечь костёр. Дальше появилась нормальная модель человека. Вообще изначально вместо людей на сервере «бегали» прямоугольники.
Персонажи научились «спать», добавлена возможность переключится на третье лицо. Игра научилась генерировать карты с различным ландшафтом, естественно на очень примитивном уровне, но со временем получалась менее «картонная», но зато более насыщенная местность.
На самом деле за май было сделано гораздо больше, чем описано выше. Давайте просто вкратце перечислю многие функции, которые добавляли за то время: добавлены и улучшены новые анимации, переделан голосовой чат, появилась смена настроек графики без нужды выхода в главное меню.
В основном, в первую половину месяца работали над новой системой постройки зданий. Было несколько вариантов, как реализовать эту возможность, но остановились на том, что с помощью молотка можно устанавливать разные части строения. До конца доделали интерфейс, который оставался с нами до поры до времени, пытались интегрировать пещеры в мир игры, много графических улучшений, таких как: новая трава, звезды, анимации у волков, улучшенный биом «лес».
Создана очень важная функция, именуемая «метаболизм». Она совмещает в себе разные эффекты, в неё входят: сердцебиение, голод и жажда, кровотечение, запас кислорода и влажность.
Был добавлен лук, факел (странно, что его не было в самом начале), новый «снежный» биом, теперь вещи могут показывать различные показатели защиты от холода, радиации, пуль и подобного.
Улучшены модели персонажей в том плане, что они теперь лучше реагируют на источники освещения, появилось больше различных теней и оттенков. Изменена система глобального освещения мира, так как можно было обнаружить «мерцания» поверхности. К животным был «прикручен» мех, который, кстати, можно очень просто применять и на других моделях, как, например, на этом товарище.
Уже в который раз улучшили систему генерации мира, в этот раз добавили «монументы» – огромные постройки и статуи, которые служат в качестве неких ориентиров.
Но главным изменением стал переход на 5-ую версию Unity. Как объяснили разработчики, это дало значительный прирост эффективности, так как многие ограничения прошлых версий были сняты, да и многие действия были упрощены. Но это событие повлекло проблемы, к примеру, сломался голосовой чат, интерфейс попросту глючил.
Разработчики представили концепт зданий, состоящих не только из одних квадратов. Такие здания выглядят элегантнее, достаточно просто взглянуть на данный макет:
Большая часть времени была посвящена устранению багов и борьбой с Unity 5, так как программа всё ещё находилась в бета-тесте. Но и за это время появились и обдумывались новые интересные вещи. Самое банальное из всего списка – 3 инструмента и копьё. Ещё появился кодовый замок в качестве отдельного предмета, так как многих система с ключами бесила.
Из интересного: появлялись мысли на подобии «А что если мы…». Темой размышлений стала торговля чертежами. Разработчик хотел внедрить такую систему, которая позволяет «зарабатывать» чертежи во время игры (почти как шапки из TF2). А после, если есть нужда, продавать их либо обмениваться с вашими друзьями. Но до реализации (к счастью) руки не дошли.
Темой ноября может полноценно стать «Изменение системы строительства». Появилось много функций, сильно повлиявших на геймплей в целом:
Вернулся Radtown из оригинала. Суть его не изменилась: много лута + радиация. В первых версиях много экспериментировали, как и где должны стоять нужные строения. Ещё появились бочки, которые можно совершенно случайно обнаружить, например, в поле, и в них тоже лежит лут разной степени редкости.
Уже не помню, в который раз это пишу, но снова обновили генерацию местности, теперь появились реки, что дало больше разнообразия. Добавили таблички, на которых можно писать разные фразы. Теперь игроки получают «уникальную» внешность, но, разумеется, не самую разнообразную – есть только 2 формы лица и 2 текстуры кожи. Понятное дело, выбор не велик, но эту проблему достаточно быстро поправили.
Месяц добавления всего и вся. Самые разные вещи были введены: баррикады, гитара, лошадь, новые типы лестниц, ракетница, рисованные иконки для вещей. Теперь на табличках можно рисовать (да здравствуют половые органы и маты!). Сделали целую карту вручную, которая похожа на Legacy-версию. Убрали такую особенность, когда вещи выбрасываются в мешочках, теперь они имеют собственные модельки.
Этот месяц стал одним из самых насыщенных в истории. Добавили 5 экземпляров двуручного оружия, вдобавок ещё арбалет и мины. Ещё вы можете поверх своей одежды надевать подобие бронежилетов, например, из дорожных знаков.
Можно качать нефть с помощью наносной станции, принцип тот же, как и у сборщика руды. Чтобы не ставить очень много маленьких печей, была введена большая печь – переплавляет вещи быстрее, да и слотов стало больше.
Была полностью переработана система чертежей. Дело в том, что раньше нужно было надеяться на свою удачу, вам может выпасть нужный чертёж в первые минуты игры или не выпасть даже через несколько часов. Теперь падают фрагменты чертежей, отличающиеся по степени редкости. Собрав n-ое число, можно получить случайный рецепт.
Для разнообразия Radtown’ов разработали, но пока ещё не добавили, так называемые «подземелья». Первым на очереди стала водоочистная станция, она поделена на несколько уровней и содержит в себе достаточно ценный лут.
Разработчики чутка «сломали» игру одним патчем, поэтому много времени уделили на хотфиксы и оптимизацию игры в целом. Для начинающих игроков был добавлен тайник, который можно «закапывать» от других игроков. Защитники получили себе в арсенал турели – они очень редкие, так как основные ресурсы добываются только с вертолёта.
Привнесли 13 новых табличек и разных баннеров. Ещё ваш персонаж научился метать разные предметы: камни, топоры и подобное.
Пока я ковырялся с видео версией, практически полностью закончился ноябрь, но и его тоже возьмём в расчет.
Появились оконные ставни и металлические амбразуры. Теперь с вертолётов можно снимать М249. Также полностью вырезали нефтедобывающие станции. Причина проста – разработчики ввели их слишком рано.
Примерно такой путь прошел Rust за пару лет существования. От обычной «браузерки» до одной из самых популярных выживалок на рынке. Конечно, здесь расписаны только основные нововведения, в обход технической части.
Но это не главное. Цель новой рубрики – показать, что происходит с игрой в разделе «Ранний доступ». Rust является очень хорошим примером, потому что разницу между версией декабря 2013 года и нынешней видно невооруженным глазом.
Ну, а напоследок, вопросы. Понравилась ли вам эта рубрика, что изменить в ней и какую игру вы хотите увидеть в следующих частях? Ведь было затрачено много человеко-часов, поэтому с достоинством подойдите к оценке.