Обновление Rust: Чертежи и шлифовка
Ноябрьское обновление Rust приносит переработанную систему чертежей, новый пистолет-пулемёт Узи и самые масштабные улучшения оптимизации за всю историю игры. Кроме того, в нём много исправлений, обновлённых моделей, переработанных механик и полезных улучшений.
Переработка системы чертежей
Для изготовления верстаков больше не нужны фрагменты чертежей, а металлолом больше не расходуется в деревьях технологий. Теперь для продвижения по ним используются три вида чертежей: фрагменты, страницы и книги. Каждому уровню дерева технологий соответствует своя валюта.
Предметы по-прежнему можно изучать за металлолом на столе для исследований. При этом заметно возрастает роль поиска нужных вещей, торговли и союзов с другими игроками. По мнению разработчиков, со временем эта сторона Rust оказалась несколько утрачена.
Главная идея переработки — перераспределить сложность развития. Прежняя система фрагментов создавала слишком много препятствий на ранних этапах, особенно для тех, кто не может уделять игре много времени. Из-за того, где появлялись базовые фрагменты, добраться до верстака второго уровня бывало трудно. Игроки, которым не удавалось выдержать конкуренцию, фактически лишались возможности продвигаться дальше.
Теперь чертежи низшего уровня встречаются в обычных источниках добычи, в том числе в бочках и ящиках. Кроме того, их можно улучшать до следующего уровня. Комнаты с головоломками и более сложные испытания по-прежнему остаются самым быстрым путём развития.
Улучшения верстака, влиявшие на расход металлолома в дереве технологий, тоже переработаны. «Экономия» (Salvage) теперь с вероятностью 20 % позволяет не потратить чертёж при изучении; прежде она уменьшала затраты металлолома. У «Прототипа» (Prototype) теперь постоянная вероятность успеха 25 %, а удвоение стоимости убрано.
Команда пока не знает, как именно новая система покажет себя в игре, и считает, что было бы самообманом ожидать идеального результата с первой попытки. При необходимости разработчики внесут изменения и обещают не затягивать с ними так, как в прошлый раз.
Узи
В игре появился знаменитый пистолет-пулемёт Uzi 9mm. У него два режима стрельбы, которые зависят от положения приклада. Со сложенным прикладом Uzi ведёт автоматический огонь и позволяет пользоваться щитом. С разложенным — переходит на одиночные выстрелы и становится точнее.
Для переключения нужно удерживать кнопку смены режима стрельбы.
Поддержка геймпадов
В Rust появилась поддержка геймпадов через Steam Input: теперь с их помощью доступны основные игровые действия.
По умолчанию в инвентаре и меню изготовления предметов используется курсор, которым управляет аналоговый стик. В новом разделе настроек геймпада можно переключиться на управление крестовиной — разработчики советуют попробовать этот вариант. Там же находятся другие настройки, позволяющие подобрать удобное управление.
Уже первая версия обеспечивает достаточно комфортную игру, хотя отдельная поддержка геймпада пока предусмотрена не для всех возможностей и действий.
Переработка животноводства
В этом обновлении разработчики сосредоточились на том, чтобы сделать уход за сельскохозяйственными животными понятнее и снизить цену ошибок.
- Игрок становится владельцем коровы, если купит её или она поест из его кормушки. Постоянно находиться рядом и бояться, что корова его «забудет», больше не нужно. Держаться поблизости необходимо только при ведении животного за собой.
- Коровы больше не умирают от старости. От голода они тоже не погибают: вместо этого ложатся, сохраняя 1 единицу здоровья.
- В интерфейсе кормушки теперь показано, на сколько времени хватит корма группе коров, — по аналогии с расходами на содержание базы.
- Коровы теперь едят любую пищу, подходящую лошадям.
- Убрано истощение пастбища — состояние, при котором вся трава выедена. Если в загоне достаточно травы, коровы едят из кормушки вдвое реже, что позволяет экономить корм.
- Интерфейс теперь показывает все сведения: владельца, беременность, отца будущего потомства и время до следующего размножения, а также время до появления навоза, молока или шерсти.
- Коровы накапливают до 3 порций молока, поэтому доить их можно реже.
- В интерфейсе и репликах торговца, который покупает животных, появились подсказки о рецессивных генах.
- Расчёт потребности в личном пространстве упрощён: теперь игра измеряет площадь загона и проверяет, помещаются ли в нём коровы. Показатель должен меньше колебаться и быть одинаковым для всего стада.
- Коровы с владельцем на свободном выпасе перестают размножаться, когда их становится больше 6. В помещении размножение прекращается при нехватке места — если потребность в личном пространстве удовлетворена не полностью. Коровы без владельца не размножаются.
- Имена коров больше не выбираются с учётом соотношения языков игроков на сервере. У диких коров имён нет, а после появления владельца имя выбирается в соответствии с языком его игры.
- При ведении коровы увеличена допустимая дистанция до игрока. Животное подстраивается под его скорость, поэтому можно сразу переходить на бег.
- Исправлены ошибки, из-за которых коровы не ели, интерфейс показывал неверные сведения, у животных отсутствовали столкновения с объектами или их головы проходили сквозь стены.
- У животных появился новый показатель — «Потенциал». Он отражает, насколько довольным животное было в детстве, и фиксируется при взрослении. Потенциал служит множителем награды, поэтому особенно важно заботиться о молодняке. Этот показатель может быть только у животных, родившихся в неволе.
А ещё коров и овец теперь можно гладить, проявляя к ним заботу и признательность.
Ножницы для стрижки
Арсенал овцеводов пополнили ножницы для стрижки, которые помогут улучшить ферму.
С ними можно получить больше шерсти. При этом ножницы не ранят овцу, даже если случайно промахнуться мимо шерсти и задеть кожу.
Чертёж доступен по умолчанию, а для изготовления нужен верстак первого уровня.
Ремонт маяка и открытие моря
Обычный цикл открытого моря теперь запускается после ремонта маяка. Доступ открывается сразу по завершении работ, затем цикл продолжается в привычном режиме.
У всех маяков на карте общие ресурсы и прогресс ремонта: восстановление одного восстанавливает их все.
На картах без маяков цикл открытого моря активен с самого начала.
Пирог из крокодила
Мясо крокодилов, добытое в джунглях, теперь можно использовать на кулинарном верстаке для приготовления нового пирога. Пирог из крокодила пугает животных поблизости и заставляет их держаться на расстоянии.
Это касается обычных животных — волков, медведей, кабанов и других, — а также акул и пчёл. Бараны и быки убегать не будут, но и бросаться на игрока тоже перестанут, поэтому пирог пригодится при обустройстве животноводческой фермы.
Есть и улучшенный вариант пирога с вдвое более долгим эффектом.
Шерстяная вставка для брони
Овцы пригодятся и для изготовления новой вставки для брони из шерсти. Она немного повышает защиту от ударов в ближнем бою и снарядов, а сопротивление холоду увеличивает значительно. Это поможет пережить морозные ночи в Арктике.
Вставку можно изучить в дереве технологий верстака первого уровня.
Лодки учёных у основного острова
В водах основного острова и вокруг него теперь изредка появляются патрули лодок учёных. К острову могут прибыть до двух групп: они патрулируют море до одного часа, после чего уходят.
Лодки вступают в бой только с экипированными игроками — по тем же правилам, что и патрульный вертолёт. Меток на карте и уведомлений, привычных для других событий, у этих патрулей нет.
Обновлённый гвоздомёт
Спустя почти 9 лет после появления в игре гвоздомёт наконец получил заслуженное обновление внешнего вида. Одно из самых кустарных орудий Rust стало выглядеть современнее.
У него полностью новая, более детализированная модель, текстуры повышенного разрешения и новые анимации. При этом сохранился узнаваемый вид оружия, собранного из подручных материалов.
Вороны и чайки
Животный мир Rust немного расширился: в игре появились стаи птиц. Вороны и чайки летают по карте в поисках чего-нибудь интересного.
В глубине острова стаи ворон привлекают любые трупы. Птицы кружат над ними, присматриваясь к возможной добыче. Если вороны выдают местоположение игрока, их можно отпугнуть взрывами.
Чайки собираются над прибрежными объектами и объектами на воде, когда внутри находятся игроки. Через некоторое время птицы теряют интерес: некоторые разновидности «крыс» для них всё-таки великоваты.
Кроме того, на прибрежных объектах можно встретить группы чаек, которые садятся отдохнуть. При приближении чего-либо они пугаются и взлетают. Это поможет тем, кто выслеживает цель. В отличие от быстро летящих стай, таких чаек можно сбить выстрелом, если игрок хочет остаться незамеченным.
Анимации поворота на месте
Добавлен новый набор анимаций для поворотов стоящего персонажа. Раньше при осмотре по сторонам он просто скользил на месте, что выглядело устаревшим.
Разработчики долго настраивали время движений, мёртвые зоны и другие параметры, чтобы повороты отзывчиво следовали за действиями игрока. Во многих играх скорость вращения персонажа ограничена, поэтому такие движения легче контролировать. В Rust требовалось сохранить 100-процентное соответствие резким движениям и быстрым поворотам игрока.
Команда попробовала несколько подходов, в том числе инверсную кинематику (IK) для движения ступней. Даже с большим количеством случайных вариаций движения выглядели слишком механическими. Разработчики также пробовали сочетать IK с анимациями, но в итоге остановились на одних анимациях.
По мнению разработчиков, анимации ещё можно во многом улучшить, и работа продолжится в следующих обновлениях.
Зеркальные лестницы
Добавлены зеркальные варианты Г-образных (L) и П-образных (U) лестниц.
Отразить лестницу можно сочетанием Shift + R во время размещения либо с помощью киянки в течение 10 минут после установки.
Начальная комплектация модульных автомобилей
У модульных автомобилей, которые случайным образом появляются в мире, двигатели теперь наполовину укомплектованы деталями низкого качества. Разработчики сочли прежнюю подготовку машины к поездке слишком утомительной. Часть деталей всё ещё придётся найти самостоятельно, но работы станет меньше.
Изначально установленные детали нельзя снять, пока автомобиль впервые не окажется на подъёмнике. Это сделано, чтобы их не забирали просто ради переработки.
Улучшения лодок учёных
Лодки учёных получили новую систему движения, новую систему выбора целей и ряд улучшений турелей катера PT.
Движение и выбор целей. Лодки теперь лучше огибают препятствия и прокладывают путь между ними, а также увереннее преследуют противников и переключаются между целями.
Смена водителя. Если учёного за рулём убьют, его место займёт один из остальных учёных.
Турели катера PT. Их код полностью переписан, благодаря чему управление стало гораздо отзывчивее. У турелей появились собственные модели для вида от первого лица и новая система стрельбы.
Новые анимации сбрасывания и крепления взрывчатки
Для сбрасывания и прикрепления предметов типа гранат обновлены анимации. Раньше во всех этих случаях использовались те же анимации, что и при броске.
Изменения видны и от первого, и от третьего лица. Поэтому новые движения можно будет заметить и на другом игроке, когда тот прикрепляет гранату к базе.
Другие заметные изменения
- Извлечение семян. У ягод появилась команда «Извлечь», позволяющая получить семена, не съедая ягоды.
- Значок запертого ящика. Значок взламываемого запертого ящика на карте обновлён и теперь соответствует его трёхмерной модели.
- Улучшение подводного буксировщика (DPV). Он расходует меньше топлива, быстрее разгоняется и больше не теряет прочность при подборе.
- Попадания по небольшим деревьям. Теперь попасть по ним проще.
- Перемещение меток на карте. Метки можно перетаскивать, удерживая среднюю кнопку мыши.
- Усиление кустарного пистолета-пулемёта (Handmade SMG). Его урон немного увеличен.
- Цвет конопли. В специальных возможностях появилась настройка цвета соцветий конопли.
- Переименование животных. Теперь игроки могут менять имена сельскохозяйственных животных и лошадей.
Разговоры с персонажами по телефону
По телефону теперь можно вести разговоры в том же формате, что и привычные беседы с игровыми персонажами. В справочник добавлены 4 новых номера, каждый из которых запускает свой диалог. Для звонков предусмотрены отдельные разговоры, отличающиеся от доступных при личной встрече.
По телефону можно узнать:
- Обычно точный прогноз погоды.
- Текущее состояние электросети.
- Сколько времени осталось до события с бродячим торговцем.
- Количество свободных комнат в апартаментах.
Плодовые деревья
На некоторых дубах и пальмах теперь с небольшой вероятностью появляются яблоки и кокосы. Это ещё один способ раздобыть яблоки для вкусных пирогов и кокосы, которыми можно утолить жажду во время исследования островов открытого моря.
Фрукты стоит собирать до того, как срубить дерево: иначе урожай значительно сократится. Особенно это касается яблок, которые легко повредить.
Исправления пандусов
Исправлены давние неудобства, связанные с пандусами.
Устанавливаемые предметы и другие пандусы за перекрытием больше не блокируют размещение или улучшение пандуса. Размещать пандусы на фундаментах также должно стать проще.
Единые правила для строительных обликов
Исправлены непредусмотренные различия между строительными обликами.
У некоторых обликов свесы крыш мешали размещать рядом строительные блоки. Теперь свесы препятствуют только размещению устанавливаемых предметов, независимо от облика.
Боковые свесы квадратных крыш больше не мешают ставить рядом фундаменты.
Кроме того, рамы одного уровня улучшения теперь имеют одинаковые границы столкновений во всех обликах. Благодаря этому каменные рамы больше не блокируют установку треугольных крыш в зависимости от своего поворота.
Исправление урона по площади для треугольных перекрытий и рам
Годами треугольные рамы при определённом расположении могли получать урон от взрывов сквозь стены. Разработчики исправили эту ошибку.
Производительность
Разработчики признают, что производительность игры пока не на должном уровне.
Работа над оптимизацией не заканчивается, и каждое обновление приносит улучшения. Иногда команда допускает ошибки, и новый контент сводит часть этих усилий на нет.
В этом месяце оптимизация затронула множество направлений: нагрузку на процессор, память, сетевой обмен. Данные тестовой ветки показывают заметные улучшения:
- Медианная частота кадров по всем игрокам выросла примерно на 10 %.
- Общее потребление памяти снизилось примерно на 1,6 ГБ.
- Разработчики занялись наиболее сильными подтормаживаниями: при стрельбе, загрузке баз и игре на грузовом корабле.
- Сборка мусора происходит вдвое реже: примерно раз в 12 минут вместо 6.
- На сервере с 500 игроками расход сетевого трафика снизился на величину до 25 %.
Ниже подробнее описаны основные улучшения этого обновления. В следующие месяцы работа продолжится.
Права на строительство
Проверка прав на строительство всегда требовала много ресурсов. Каждый раз, когда игрок размещает строительный блок, устанавливает предмет или перемещается по базе, игра проверяет, какой шкаф с инструментами контролирует эту точку.
Раньше каждая такая проверка обращалась к физическому движку и перебирала все строительные блоки поблизости, чтобы найти ближайшую зону действия шкафа. Чем больше база, тем дольше это занимало: на крупной базе одна проверка могла длиться до 5 мс. Система кэширования уже существовала, но нагрузка оставалась высокой и на сервере, и на клиенте.
Теперь игра хранит строительные блоки в пространственной сетке, которую можно быстро проверить без нового запроса к физическому движку. На той же крупной базе время проверки сократилось с 5,7 мс до менее чем 0,02 мс — как на сервере, так и на клиенте. Результаты проверок полностью совпадают с прежними.
Эффекты выстрелов
Команда поработала над заметными просадками частоты кадров при стрельбе.
Выстрелы могли вызывать небольшие подтормаживания, особенно при первой стрельбе после подключения к серверу.
- Исправлена задержка продолжительностью примерно до 1 мс при обрыве звука — во время стрельбы такое происходит часто.
- Исправлена медленная проверка в движке, которую запускали вспышки выстрелов и которая могла занимать примерно до 7 мс.
- Пересмотрены расстояния, на которых игра перестаёт отображать эффекты.
- Все эффекты оружия теперь заранее подготавливаются в достаточном количестве: вспышки выстрелов, звуки стрельбы, попадания пуль и другие.
Общее потребление памяти при этом даже снизилось. Раньше игра держала наготове по 100 копий каждого оружия и инструмента, которые можно бросить, а теперь — по 3. С учётом дополнительно подготовленных эффектов стрельбы это экономит около 30 МБ памяти.
Загрузка баз
Когда игрок приближается к большой базе и попадает в радиус её сетевой синхронизации, игра одновременно создаёт тысячи объектов. Каждый установленный предмет запускает собственный код, перестраивается геометрия промышленных труб, работают системы уровней детализации (LOD) и объединения объектов для отрисовки. Всё это происходит одновременно.
Разработчики приложили много усилий, чтобы уменьшить заметные подтормаживания при загрузке баз.
- Различные объекты, которые включают и выключают что-либо в зависимости от своего состояния, теперь создаются в 10 раз быстрее: около 2 мс вместо 26 мс для 248 объектов.
- Построение геометрии промышленных труб перенесено за пределы основного потока.
- Самые распространённые устанавливаемые предметы теперь используют пулы повторно используемых объектов: адаптеры хранилищ, конвейеры, ветрогенераторы и другие.
- При обновлении плотно застроенного участка базы система LOD распределяет работу между несколькими кадрами. Раньше она выполняла всё сразу; теперь время обработки самых тяжёлых кадров сократилось примерно с 15 мс до 1 мс.
- Кодовые замки, адаптеры хранилищ и другие объекты теперь считаются неподвижными, пока действительно не движутся. Раньше всё, что было прикреплено к родительскому объекту, автоматически считалось постоянно движущимся и создавало лишнюю нагрузку.
- Исправлено ещё около двенадцати ошибок в системах LOD и отсечения невидимых объектов. Например, после загрузки базы некоторые источники света и частицы оставались видимыми на любом расстоянии.
- Исправлена ошибка, из-за которой строительные блоки могли так и не попасть в группы для совместной отрисовки, что увеличивало нагрузку при их отображении.
Эти изменения немного ускорят загрузку баз и перемещение по ним, а главное — сделают игру плавнее: улучшат показатель частоты кадров для самых медленных 1 % кадров и сократят резкие задержки.
Команда также активно работает над системой отсечения скрытого содержимого баз. По сути, она позволит не загружать объекты внутри базы до тех пор, пока игрок не сможет их увидеть. Перечисленные оптимизации всё равно необходимы: такая система лишь откладывает момент загрузки всех этих объектов.
Меньше выделений памяти
Разработчики и прежде старались по возможности избегать выделения новой памяти во время игры. Всё, что попадает в кучу — область динамической памяти, — позднее приходится очищать сборщику мусора, а это может вызывать резкие задержки.
В этом месяце разработчики проверили код в поисках мест, которые можно сделать эффективнее: использовать пулы повторно используемых объектов или просто написать код чуть рациональнее, пусть иногда и менее изящно.
Большинство таких мест обнаружилось в старых системах. Например, при взгляде на растения интерфейс обновлял текст каждый кадр, значки инвентаря обновлялись даже в скрытом состоянии, а метки спальных мешков на карте заново форматировали свои таймеры.
Каждое улучшение само по себе невелико, но вместе дюжина таких изменений даёт ощутимый результат: сборка мусора запускается реже, а вместе с ней реже возникают и задержки.
Звуковая система
Помимо сжатия звуков, команда снизила нагрузку от самой звуковой системы.
- Исправлена задержка примерно до 1 мс при обрыве звука, о которой уже говорилось в разделе об эффектах выстрелов.
- Приглушение звуков за стенами теперь требует более чем в 10 раз меньше вычислений, когда игрок находится снаружи базы.
- При воспроизведении звуков теперь почти не выделяется новая память, благодаря чему сборка мусора происходит реже.
Память для открытого моря
Раньше всё содержимое открытого моря загружалось при подключении к серверу и оставалось в памяти до конца игровой сессии, даже если игрок туда ни разу не отправлялся.
Теперь оно загружается только при переходе через портал и снова выгружается после возвращения. За пределами открытого моря это экономит около 260 МБ оперативной памяти.
Серверы с модификациями, которые размещают объекты из открытого моря на основном острове, продолжат работать. Игра загрузит необходимые данные, как только они понадобятся, и сохранит их в памяти до конца сессии.
Текстуры ландшафта
Изучая расход памяти в этом месяце, команда обнаружила неожиданно большое количество загруженных текстур ландшафта. В памяти одновременно находились несколько уровней качества текстур и для основного острова, и для открытого моря.
Обычно разработчики не выгружают ресурсы во время игры: их повторная загрузка в память ухудшает производительность и часто вызывает подтормаживания при перемещении по миру. Но переход в открытое море сопровождается экраном загрузки, что позволило сделать исключение.
Теперь должны загружаться только текстуры текущей местности с выбранным игроком уровнем качества. На максимальном качестве это сэкономило 138 МБ, а на более низких настройках экономия должна быть ещё больше.
Фонари и лазерные прицелы
Фонари и лазерные прицелы получили похожие оптимизации. Лазеры устроены немного сложнее, но основная проблема у обоих была общей: в Unity их скрипты обновляли каждый фонарь и каждый лазер в каждом кадре. Отдельное обновление обходилось дёшево, однако при сотне таких объектов нагрузка накапливалась.
С фонарями всё оказалось довольно просто. В конце каждого кадра для каждого фонаря выполнялись вычисления, которые можно было перенести в шейдер. Самого кода было совсем немного, и основная нагрузка возникала уже из-за необходимости его запускать.
У лазерных лучей похожая проблема встречалась раньше: тогда их перевели на систему, которая обновляла ограниченное количество лазеров за кадр. Такой же подход подошёл бы и для фонарей, но лишь отложил бы решение проблемы. Более простым решением стал перенос всех вычислений в шейдер.
С лазерами было сложнее. Уже существовавшая система обновляла часть лазеров за каждый кадр, укладываясь в бюджет 0,25 мс, но за это время успевала обработать всего около 5—10 лазеров. Применить то же решение, что и для фонарей, не позволяла их особенность: длина луча меняется в зависимости от того, в какой объект он упирается при проверке пересечений.
В новом варианте проверки пересечений для всех лазерных лучей объединены в одну группу. Затем обновляется изображение точки в месте попадания луча и заново строится геометрия каждого лазера на экране.
Команда пробовала и другие решения, например масштабирование прямоугольных плоскостей с помощью групповых операций преобразования. В итоге все они оказались медленнее, чем создание новой геометрии в каждом кадре.
Новая система обрабатывает в 5 раз больше лазеров, расходуя вдвое меньше времени, чем прежняя: 0,125 мс.
Память для анимаций
В прошлом месяце в игру добавили много анимаций для новых животных, и это побудило команду проверить настройки сжатия анимаций во всём проекте. Выяснилось, что щадящее сжатие анимаций животных позволяет заметно сократить расход памяти без видимых изменений. Теперь оно применяется ко всем анимациям животных и экономит около 100 МБ памяти.
Возможно, похожие улучшения удастся внести и в анимации игроков, но для этого потребуются дополнительные исследования: разработчики хотят сохранить точность анимаций модели игрока.
Сжатие звуков
В Rust очень много звуков. Недавно объём загруженных звуковых данных на клиенте превысил 0,5 ГБ, и разработчики решили проверить, что можно улучшить.
Во многих случаях звук использовался вообще без сжатия и занимал много места в памяти. Очень щадящее сжатие Vorbis позволило снизить общий расход памяти на звук на 84 % без слышимой потери качества. Экономия составила около 470 МБ.
Облики из Мастерской
Когда разработчики выпускают новые облики, игра загружает их из Мастерской Steam при первой встрече с ними. Каждый месяц недавно выпущенные облики включают в файлы игры, после чего отдельно скачивать их уже не требуется.
Загруженные текстуры передавались видеокарте, но их полная копия оставалась в оперативной памяти, хотя нигде не использовалась. Теперь эта копия удаляется при первой возможности. При 22 загруженных обликах из Мастерской это экономит около 300 МБ оперативной памяти.
Эффект должен быть заметнее на серверах с модификациями, где используется больше неодобренных обликов из Мастерской, чем на обычных серверах. Команда также ищет способы добавить потоковую загрузку текстур для скачиваемых обликов, чтобы сократить расход видеопамяти.
Ещё об оптимизации текстур ландшафта
В этом месяце разработчики проверили используемые текстуры ландшафта и нашли несколько каналов и текстур, которые больше не нужны или могут быть заменены. Например, Rust Render Pipeline позволяет эффективнее вырезать небольшие отверстия в ландшафте. В старой системе для этого требовалась отдельная текстура экранного пространства — теперь она удалена.
Более эффективное использование и кэширование текстур, а также улучшенная геометрия LOD на низких настройках качества должны немного снизить нагрузку на видеокарту при отрисовке ландшафта. Общая экономия памяти должна составить около 115 МБ.
Запуск сервера
Серверы теперь перезапускаются быстрее.
Первая проблема заключалась в том, что после загрузки сохранения большая часть времени уходила на восстановление связей между всеми фундаментами и стенами на сервере. Оказалось, что эти связи можно сохранять и повторно использовать при перезапуске, — это экономит 3 минуты. Такой же подход к маршруту грузового корабля сберёг ещё 20 секунд.
Вторая проблема была в том, что некоторые участки кода загрузки сохранений плохо справлялись с большим количеством объектов. Их исправление сэкономило ещё 1 минуту 30 секунд.
В результате перезапуск самых многолюдных серверов сократился с 10 до 2 минут.
Генерация карты
Процедурная генерация карт — одна из основ Rust. Однако по мере развития игры она занимала всё больше времени. В этом месяце разработчики занялись её оптимизацией, сохранив прежний результат: главной целью было ускорить тот же самый процесс.
После улучшений в расчёте эрозии и размещении утёсов и камней первая генерация карты теперь проходит почти вдвое быстрее. При этом итоговая карта остаётся той же.
Упрощение иерархии шаблонов объектов
В Unity префаб — это шаблон игрового объекта, который можно использовать многократно. В таком виде разработчики сохраняют ресурсы, а затем загружают их в игру: почти любой объект в Rust, будь то ящик с добычей, животное или устанавливаемый предмет, представляет собой префаб.
При создании эти шаблоны часто содержат дополнительные настройки, компоненты и пустые игровые объекты. Единственная задача части этих элементов — поддерживать удобную и понятную иерархию.
Во время игры такие элементы уже не нужны: для производительности данные должны быть упакованы как можно эффективнее. Поэтому при сборке игры шаблоны проходят несколько этапов обработки, во время которых из них удаляют всё лишнее.
В этом месяце команда расширила этот процесс: новый механизм упрощает иерархию шаблонов и позволяет полностью удалить ещё больше игровых объектов.
Основной выигрыш пришёлся на строительные блоки. Раньше каждый такой блок содержал дополнительные объекты, не нужные во время игры. Например, в обычном фундаменте их было 20 — теперь все они удаляются.
На населённом сервере эти лишние элементы составляли около 43 % всех объектов. Их удаление напрямую сократило потребление памяти на 1,44 ГБ.
Новая навигационная сетка
Команда сгладила задержки основного потока, которые возникали при обработке навигационных сеток кораблей-призраков и огромных баз.
Раньше навигационные сетки кораблей-призраков не строились асинхронно, поскольку сами корабли двигались. Теперь при построении их сетки игра перебирает коллайдеры в локальном пространстве, обходясь без запросов к физическому движку.
Прежде перестроение навигационной сетки уже ограничивалось по времени: участки создавались по одному, и после превышения бюджета в 1 мс работа приостанавливалась до следующего кадра. Однако на некоторых огромных базах отдельный участок требовал значительно больше 1 мс, поэтому такого разделения было недостаточно.
Теперь построение можно приостановить и посреди участка, продолжив в следующем кадре. Для этого участки делятся на 4 части, а коллайдеры перебираются по одному с проверкой затраченного времени на каждом шаге.
Сохранение навигационных сеток перенесено в фоновый поток, что заметно снизило нагрузку на основной.
Старая навигационная сетка, которую пока можно включить параметром запуска -useOldNavmesh, будет удалена в следующем обновлении.
Оптимизация сетевого обмена
В этом месяце команда снизила накладные расходы сетевого обмена. Это оставляет серверам больше свободной пропускной способности и потенциально позволяет увеличить число игроков. Меньшее количество отправок также освобождает ресурсы процессора сервера.
Общее сокращение трафика
Несколько заметных улучшений в сумме снизили средний объём передаваемых данных примерно на 270 КБ/с на сервере с приблизительно 100 игроками. С ростом числа игроков эта экономия будет увеличиваться по экспоненте.
Сетевые уровни детализации
Разработчики начинают внедрять систему, которая отправляет меньше сетевых данных об удалённых объектах: их положение не требуется обновлять так же часто, как положение объектов поблизости. Первые испытания показывают сокращение общего трафика, связанного с передачей координат, примерно на 30 %.
Сетевыми уровнями детализации можно управлять через две консольные переменные:
- `net.position_lod`: `0` — отключено для всех объектов; `1` — включено только для объектов вроде неигровых персонажей, животных и прочих; `2` — всё из режима `1`, а также объекты с глобальной сетевой синхронизацией: грузовой самолёт, грузовой корабль и «Чинук».
- `net.position_lod_players`: `0` — отключено для игроков; `1` — включено для игроков, но только со средней или полной частотой обновления; `2` — те же настройки, что и для остальных объектов.
Сначала систему включат для проверки на нескольких выбранных серверах Facepunch. Полноценное внедрение запланировано на середину месяца.
Объединение сетевых пакетов
Кратко: до 25 % экономии сетевого трафика.
Сетевая библиотека RakNet удивительно хорошо справлялась с нагрузкой, которую ей задавали разработчики. Она позволяет отправлять до 500 000 пакетов в секунду более чем 800 игрокам, прежде чем начинаются проблемы. Однако команда решила сократить это количество.
Отдельные пакеты создают дополнительную нагрузку на сетевую подсистему, и каждый из них ещё требует 22 байта служебных данных для шифрования. В некоторых случаях эти данные занимали больше места, чем само передаваемое содержимое.
В этом месяце разработчики объединили пакеты перед отправкой игрокам, заметно сократив затраты на шифрование. Анализ трафика сервера с 500 игроками показал снижение его объёма на 25 %. Дополнительно уменьшилась и нагрузка на сетевую подсистему.
Функция включена по умолчанию. На сервере её можно переключать консольной переменной `batchpackets`.
Изменения PhysX для грузового корабля
В собственной реализации PhysX разработчики используют несколько древовидных структур данных, чтобы ускорять обнаружение столкновений и физические запросы. Они разделены на две группы: для движущихся и неподвижных объектов.
Проблема грузового корабля в том, что по ряду причин он не может быть полноценно динамическим объектом с точки зрения физики. Поэтому всё время, пока корабль активен, приходится выполнять более медленные и затратные обновления структур для неподвижных объектов. Это ухудшает производительность и клиента, и сервера.
Теперь для этого есть отдельное решение: неподвижные с точки зрения физики объекты, которые слишком часто перемещаются, переводятся в третью древовидную структуру. Можно считать это повышением или понижением — смотря с какой стороны посмотреть. На практике туда попадут, например, некоторые двери, но основную часть составляют коллайдеры грузового корабля.
На клиентах разработчики также ожидают улучшений для автомобилей: сервер обрабатывает их как динамические объекты, а клиент — как движущиеся статические.
Режим Jobs 4 признан стабильным
Новейший режим консольной переменной `UsePlayerUpdateJobs`, уровень `4`, теперь считается стабильным и включён по умолчанию. Последние заметные ошибки найдены и исправлены, а на официальных серверах этот режим уже работал последние 3 недели.
Переменная `UsePlayerUpdateJobs` управляет распараллеливанием работы, связанной с обработкой игроков. Новый уровень `4` дополнительно распараллеливает серверное отсечение невидимых объектов и переносит сохранение сетевых очередей игроков в пул потоков.
Это помогает серверам с большим числом игроков гораздо лучше справляться с растущей нагрузкой. Один сервер сообщества сообщил об улучшении времени кадра на 30 % при 1 000 игроках: с 10 до 13 кадров/с, или со 100 до 70 мс на кадр.
В следующем обновлении Daniel P планирует удалить режим Jobs 3 и связанный с ним код.
Объёмные облака теперь включены всегда
Из графических настроек убрана возможность отключать объёмные облака.
Одновременно разработчики нашли и устранили связанную с ними проблему производительности. Теперь по нагрузке объёмные облака должны сравняться со старыми облаками из плоских изображений.
Команда с самого начала планировала полностью заменить старые облака объёмными. Отказ от прежнего варианта также сделает внешний вид игры более единообразным у разных игроков, в рекламных материалах и других случаях.
Строительный облик Scrap King
Новый облик Scrap King для построек из листового металла предлагает стать королём свалки.
Он собран из обломков бесчисленных сражений. Остаётся прикрутить дверь, заварить стены и занять трон. Главное — поберечься от столбняка.
Дополнение Scrap King Building Skin можно купить в самой игре или в магазине предметов Rust в Steam.
Изменения режима Softcore
В этом месяце режим Softcore получил несколько изменений:
- Убрана система, сохранявшая остатки разрушенных устанавливаемых предметов.
- Каждый игрок может установить не больше 6 шкафов с инструментами.
Система остатков разрушенных предметов защищала половину добычи при налёте на базу и помогала быстрее восстановиться. Однако после появления удвоенной добычи ресурсов и защиты от налётов в отсутствие владельцев эта дополнительная страховка стала избыточной, поэтому разработчики пока от неё отказались.
Ограничение количества шкафов должно помешать игрокам расставлять их повсюду и занимать большие территории. По мнению команды, это мешает Softcore оставаться режимом для спокойной игры. Кроме того, механика позволяла злоупотреблять периодом защиты от налётов: игроки могли наставить шкафов, которые нельзя было уничтожить до следующего дня.
Новый интерфейс просмотра и редактирования записей
С этого обновления новый интерфейс просмотра и редактирования записей игры включён по умолчанию. Старый по-прежнему можно вернуть консольной переменной `demo.oldui`.
Команда уже использует новый интерфейс для трейлеров и роликов в социальных сетях. Некоторые по-прежнему предпочитают старую версию, но большинству новых пользователей освоить обновлённый инструмент проще.
Среди недавних улучшений — возможность создавать прожекторы в режиме песочницы и освещать ими сцены. У источников света появились новые управляющие элементы, а их положение и поворот теперь можно анимировать.
Теперь записи игры также можно экспортировать в видео. Для этого нужно установить FFmpeg и добавить его в `PATH`. Когда программа будет обнаружена, станут доступны форматы из выпадающего списка. В зависимости от скорости накопителя экспорт может быть значительно быстрее самостоятельной записи через стороннюю программу; он также позволяет использовать частоту до 600 кадров/с для замедленной съёмки.
Гвоздомёт доступен создателям обликов
В этом месяце обновление мастерской совпало с переработкой оружия: новая модель гвоздомёта стала доступна сообществу создателей обликов.
И мастерам на все руки, и любителям пострелять гвоздями в медведей пригодится обновлённое снаряжение. А идеи оформления возьмёт на себя сообщество.
Чтобы создать собственный облик гвоздомёта, нужно открыть внутриигровую мастерскую и найти этот предмет в списке оружия. Оттуда можно скачать файлы модели и добавить собственные материалы.
Прекращение поддержки Mac с Intel x86
Начиная с этого обновления разработчики больше не выпускают сборки x86 для Mac на процессорах Intel. В дальнейшем поддерживаются только ARM64 / Apple Silicon.
Минимальные системные требования уже много лет соответствуют этому ограничению, поэтому неожиданным оно стать не должно. Главная причина — отсутствие поддержки графических драйверов для старых Mac, из-за которого возникает всё больше проблем.
Новости борьбы с читерами
Ещё в январе разработчики поделились статистикой блокировок, жалоб и общей картиной использования читов. Следующий полный отчёт команда по-прежнему готовит к январю, но некоторыми подробностями готова поделиться уже сейчас.
Скрипты
Скрипты давно остаются проблемой Rust и шутеров в целом. Их бывает сложно обнаружить и пресечь, а нечестное преимущество в перестрелках серьёзно нарушает игровой баланс. Благодаря недавним наработкам у команды стало больше возможностей для борьбы с ними.
С началом этого вайпа серверов разработчики начнут блокировать пользователей общедоступных и закрытых сервисов, распространяющих скрипты, — в общей сложности более 3 000 учётных записей. Команда надеется, что это напомнит о её непримиримой позиции в отношении стороннего ПО, дающего нечестное преимущество.
Сколько времени читеры проводят в игре
Разработчики недавно пересчитали ключевые показатели среднего времени, которое читер успевает провести в игре. Оно продолжает сокращаться год за годом. При этом прежние расчёты, встречавшиеся в старых публикациях на эту тему, завышали показатель.
Большие числа блокировок приятно показывать, однако время читера в игре остаётся одним из важнейших показателей для команды. В Rust нечестная игра бьёт по игрокам сильнее, чем во многих других проектах: смерть может стоить нескольких часов прогресса, а налёт на базу — дней или недель. Поэтому разработчики стремятся свести время присутствия читеров к минимуму и надеются, что за последние месяцы игроки почувствовали улучшение.
Скоро: Rust Premium
Команда готовит Rust Premium и решила заранее рассказать, что он собой представляет. Разработчики отдельно уточняют, что это не боевой пропуск: в нём не будет ограничений на продвижение, шкалы наград или требований играть определённым образом.
Rust Premium — платная ежемесячная подписка с эксклюзивными игровыми обликами и дополнительными возможностями.
- Ежемесячные награды будут включать качественные облики для устанавливаемых предметов, одежды и многого другого, а также коллекционные и прочие предметы.
- Дополнительные преимущества — полезные функции в разных частях игры, не затрагивающие игровой процесс.
Команда с нетерпением ждёт возможности представить Premium и обещает вскоре рассказать больше.
Для создателей модификаций: перезагрузка карты
Около года назад разработчики разбирались с ошибками обращения к отсутствующим объектам — NRE, которые возникали у клиентов в самых разных местах. Они появлялись от случая к случаю и не складывались в понятную картину: словно кто-то выстрелил из дробовика во внутреннее состояние работающего клиента.
Примерно в то же время один разработчик модификаций и владелец сервера рассказал об удивившем автора способе сменить карту на клиенте. Он даже позволял принудительно загрузить карту, отличающуюся от той, на которой работает сервер. На первый взгляд всё работало.
Способ действительно действовал, но оставлял клиент в сильно повреждённом состоянии. Чтобы избавиться от таких случайных ошибок, команда вносит два изменения:
- Старый способ принудительной загрузки карты признан устаревшим и будет заблокирован в декабре. Он заключался в отправке клиенту сообщения `Approved`, которое могло содержать другие сведения о мире.
- Новым официально поддерживаемым способом управления загружаемой на клиенте картой стал удалённый вызов `CL_LoadMap`. Пример использования находится в `ServerMgr.ChangeLevelFor`.
Вызов `CL_LoadMap` выполняет практически те же действия, что и прежняя последовательность с `Approved`:
- Удаляет на клиенте все игровые объекты — игроков, контейнеры, предметы, неигровых персонажей и прочие, — кроме собственного персонажа игрока.
- Сбрасывает состояние игрока, включая предметы и консольные переменные.
- Перезагружает сцену или переключается на новую.
- Загружает новую карту и выполняет её настройку.
- Отправляет серверу удалённый вызов `ClientReady`.
Этого должно хватить для разных задач создателей модификаций. Автор продолжит разбираться с оставшимися ошибками.
Серверы Facepunch
В этом месяце команда открывает новый сервер, увеличивает вместимость нескольких существующих и объединяет часть серверной инфраструктуры.
Новый сервер:
- [EU East] Facepunch Softcore 1
Увеличено максимальное число игроков:
- [EU East] Facepunch 1
- [EU] Facepunch 1
- [EU] Facepunch Premium 1
- [US East] Facepunch Premium 1
Закрываются:
- [EU] Facepunch 12
- [EU] Facepunch 13
- [EU] Facepunch 14
- [EU] Facepunch Large 2
- [EU] Facepunch Small 4
- [EU] Facepunch Small 5
- [EU] Facepunch Small 6
- [EU East] Facepunch Premium 3
- [EU East] Facepunch Premium 4
- [US East] Facepunch 5
- [US East] Facepunch 6
- [US] Facepunch Small 2
- [US] Facepunch Small 3
- [US West] Facepunch 3
- [US West] Facepunch 4
- [US West] Facepunch Premium 3
- [US West] Facepunch Premium 4
- [US West] Facepunch Premium 5
См. также:


