Rust — Трейлер Naval Update
Лодки, созданные игроками
Лодки, созданные игроками, здесь открывают новый способ исследовать моря, включая глубокое море!
Разместите новую станцию строительства лодок в воде и начните строить вместе с товарищами по кораблю! Используйте новый План строительства лодок, чтобы построить лодку своей мечты, используя новый набор строительных блоков, специфичных для лодок.
Добавьте руль, якорь, паруса, двигатели, доски, пандусы и пушки, чтобы завершить своё судно и отправиться в глубокое море!
Тщательное продумывание и расположение двигателей и парусов важно, если вы хотите быть морепригодным судном, так как они влияют на его управляемость и скорость. Паруса и двигатели можно переворачивать в радиальное меню для удобной парковки задним ходом.
Обязательно установите код замка на руле, чтобы предотвратить нежелательный доступ или кражу вашей блестящей новой лодки.
Обычные разворачиваемые лодки можно размещать на ваших лодках. Если они будут работать на буксире, они будут работать и здесь.
Нужно что-то менять после того, как вы поняли, что ваша лодка ходит только по кругу? Используйте режим Deploy & Edit (который недоступен в глубоком море), чтобы быстро и легко развернуть станцию для строительства лодок вокруг вашей лодки.
Весело проводите время, строя и исследуя моря!
Новые лодки для развертывания
Чтобы сделать ваше судно годным для плавания, у нас теперь есть новые разворачиваемые модели — специально для вашей лодки!
Станция строительства лодок
Станция для строительства лодок находится в глубокой воде, она используется для строительства и монтажа вашей лодки.
План здания
План строительства лодок похож на того, что вы знаете и любите планировщика, но для лодок.
Паруса
Лист закалённой ткани, устроенный такелажем, чтобы ловить ветер и помогать двигать лодку вперёд.
Штурвал
Обязательно для любой мореходной лодки. Используется для управления и контроля направления, с встроенным замком, который держит судно в безопасности, когда вы не за штурвалом.
Двигатель
Мощный мотор, который работает на низкокачественном топливе и быстро его расходует. Громкий, жаждущий и неэффективный, но бесценен, когда нужно убежать от опасности, догнать других игроков или пытаться выбраться из плохой ситуации. Иногда скорость стоит своих затрат.
Якорь
Тяжёлый якорь, который не давал лодке дрейфовать. Опустите его, чтобы удержать позицию, и держите судно именно там, где нужно. Без него ваша лодка может дрейфовать к берегу.
Пушка
Мощное морское оружие, используемое для потопления лодок других игроков. Заряжайте его пушечными ядрами.
Малый пандус
Преодолевайте разрывы и создавайте быстрые точки доступа. Идеально подходит для посадки на другие корабли или выхода на сушу с воды.
Планк
Привык преодолевать разрывы, садиться на другие лодки и решать мелкие разногласия, выталкивая друзей в открытую воду.
Глубокое море
Глубокое море — это новый оффшорный регион, куда можно добраться на лодках. Это высокий риск, высокая награда и намеренно беспощадно.
Вы можете попасть туда, подплыв к краю карты на мощной лодке, такой как лодок, созданные игроками, RHIB или новые PT-лодки.
Это не место для жизни: строить нельзя, и ничего не возрождается. Кто первым пришёл — того и обслужили. Глубокое море будет открываться и закрываться периодически, словно мировое событие.
Внутри вы можете ознакомиться с новым контентом, описанным ниже в этом блоге:
• Тропические острова
• Плавающие города
• Призрачные корабли
• Лодки, управляемые учёными
У нас много планов по расширению глубоководного пространства и использованию его как мост между мирами.
Призрачные корабли
Подобно памятникам, Призрачные корабли — это неподвижные корабли, разбросанные по глубокому морю, наполненные добычей, которую люди могут собирать во время плавания на своих лодках.
Каждый Призрачный корабль охраняется учёными как на корабле, так и на ближайших патрулях, которые будут пытаться не допустить вас к кораблю. Некоторые Призрачные Корабли также содержат запертые ящики, которые вам придётся взламывать, находясь под давлением других игроков и учёных кораблей.
Мы надеемся, что Ghost Ships, а также другие места добычи, такие как тропические острова, дадут достаточно стимулов для частого посещения глубоких вод.
Глубоководные плавающие города
Исследуя глубокие моря, вы можете встретить Плавающие Города. Построенные из заброшенных барж и каркаса незавершённой нефтяной платформы, эти ветхие памятники служат безопасным убежищем для всех игроков.
В настоящее время существует четыре варианта Плавающих Городов, которые могут появляться на сервере, каждый из которых предлагает одинаковые удобства. Среди них — причалы, где можно обезопасить лодку, а также различные NPC-продавцы, продающие оружие, снаряжение, еду и медицинские принадлежности.
Ближайшая сельскохозяйственная баржа доступна за небольшую плату, что даёт возможность собрать свежий урожай. По всему памятнику на платформах разбросаны знакомые безопасные зоны, включая перерабатывающие машины, верстаки, исследовательские столы и нефтеперерабатывающие заводы.
В центре каждого плавающего города находится казино Deep Deck — гостеприимное пространство, предлагающее развлечения и место для отдыха для всех уставших моряков. Здесь вы можете встретить других выживших, расслабиться в бассейне, насладиться музыкой и играть в азартные игры сколько угодно.
Просто не забывайте вести себя вежливо, пока вы там — устраивайте проблемы, и охранные турели напомнят вам, почему это была плохая идея.
Острова глубоководного бассейна
Годами океан был просто голубой пустотой между вами и нефтяными вышками. С этим обновлением мы представляем совершенно новый биом в Глубоком море — Тропических островах.
Эти микроострова полностью отличаются от материка. Ожидайте белого песка, густых пальм и даже нового вкусного природного лакомства. Здесь вы не увидите сосен.
Их полупроцедурный характер даст разные впечатления. Некоторые из них могли иметь старые руины, другие — материнскую жилу руды — или и то, и другое.
Но будьте осторожны. Ты не единственный, кто ищет состояние.
НАУЧНЫЕ ЛОДКИ
Мы добавили новую лодку — PT Boat. Встречается только в Deepsea — он медленнее RHIB и потребляет больше топлива, но прочнее и мощен.
Будьте обачны, глубокое море заполнено новыми лодками Scientist. Эти суда (включая RHIB и новый PT Boat) обслуживают учёные, которые скоординированно путешествуют по глубоководным морям в поисках игроков для взаимодействия. Вы можете найти их охраняющими Взломанный ящик на борту Призрачного корабля. Каждая лодка может быть очищена от учёных и украдена игроком. Интересно, что вы найдёте на борту?
Каждая торпедная лодка оснащена двумя башнями. Один оснащён двумя пулемётами калибра 50, а другой — одним более точным пулемётом калибра 50. Каждый из них может быть перезаряжен стандартными патронами калибра 5,56 для винтовки.
RHIB Refresh
RHIB нуждался в небольшом уходе и уходе, и нет лучшего времени для этого, чем Военно-морское обновление. Модель и текстуры были обновлены, а также появилась новая модель storage box.
Теперь RHIB оснащён рабочим компасом и экранами с отображением карт — что помогает вам ориентироваться в океане.
Новый учёный ИИ на нефтяных вышках И В МОРЕ
Если ты сражался с множеством учёных, то попытка прокрасться или обойти их с фланга — идеальный способ погибнуть.
Они всегда знают, где вы, и мгновенно повернутся на 180 градусов, чтобы телепортировать вас, если вы попытаетесь сыграть умно и перехитрить их.
Из-за этого очень заманчиво либо снайперить их издалека, либо разбить лагерь за узким местом и ждать, пока они неизбежно ворвутся один за другим.
Это делает захват памятника, охраняемого учёными, испытанием ресурсов с низким потолком мастерства.
Всё сводится к следующему:
d
О, вы знаете этот сыр, и достаточно ли у вас патронов и бинтов, чтобы их промолоть?
Новый научный ИИ постепенно появляется, но только для , и пока что.
Нефтяные вышки
Призрачные корабли
Острова глубоководного бассейна
Их можно отличить по морскому камуфляжу и квадратному козырьку.
В отличие от своих двоюродных братьев, они не видят сквозь стены и им приходится полагаться на шумы и недавние встречи, чтобы найти вас.
Это значит, что вы можете заманить их, подглядывая или издавая звук, а затем обходите и стреляете в спину.
Это дополнительно облегчается их меньшей реакцией.
Если вы появляетесь под неожиданным углом, они будут удивлены, и тогда вы сможете сбить их до того, как они успеют среагировать.
Кроме того, они не будут бросаться в узкие места и быть уничтоженными кемпингом, вместо этого будут пытаться обойти атаку, бросать дымовые гранаты и бросаться вместе или просто ждать в засаде на другой стороне.
Они также будут гораздо осторожнее против снайперов: если их ранят или они услышат выстрел, все ныряют в укрытие и будут ждать.
Мы будем внимательно следить за вашими отзывами и продолжать их дорабатывать.
Если они в достаточно хорошем состоянии, мы рассмотрим возможность перевода других учёных на главном острове на новый ИИ.
МОДЕЛЬ VIEW-ПЛАНИРОВЩИКА ЗДАНИЙ
Планировщик при создании или развертывании объекта всегда имел модель от третьего лица, которую видят все остальные, но никогда не было модели от первого лица.
Мы считаем, что было бы здорово, если бы то, что видят все остальные, совпадало с тем, что видите вы, поэтому добавили Viewmodel в планировщик.
Новые миссии
В обновлении этого месяца у нас есть 5 новых миссий на морскую тематику. Их можно получить у смеси новых и существующих NPC-провайдеров миссий. Некоторые из них требуют отправки в глубокое море, некоторые удерживают вас на материке.
Это обновление добавляет много работы по улучшению внутреннего создания и модификации миссий. Мы всё ещё хотим сделать с миссиями, но сейчас мы в лучшем положении, чем раньше. Эта работа также внесёт несколько исправлений и улучшений в существующие миссии и диалоги с NPC, а также сопутствующую оптимизацию фона.
Крупные нефтяные платформы
Учёные лодки теперь будут спавниться на Большой нефтяной платформе вместе с ящиком — что даёт игрокам дополнительный вызов при добывании нефти из моря.
RHIB будут патрулировать вокруг Большой нефтяной платформы, не давая игрокам приблизиться. Они возрождаются каждый раз, когда нефтеплатформа сбрасывается.
Вы можете убить учёных и украсть добычу на борту. Украденные лодки останутся после сброса нефтяной платформы.
DLC Artist Pack
У Rust одна из самых разнообразных игроков среди всех популярных игр — от хардкорных PVP-игроков до дружелюбных и не очень дружелюбных ролевых игроков. Чтобы отразить это, мы достали лучшие цифровые кисти и создали DLC Artist DLC; Коллекция классных и остроумных предметов, созданных для того, чтобы помочь вам выразить себя, независимо от того, хотите ли вы нарисовать очаровательный портрет или отметить базу соседа.
Пейнтбольное ружьё и комбинезон
Превратите тактическую атаку в искусство с помощью пейнтбольного пистолета и комбинезона. С уникальным типом боеприпасов загрузите бункер пейнтболами, выберите цвет команды и устроите сцену. Выпускается в 5 цветах для нескольких команд.
Пейнтболы наносят разный урон в зависимости от того, есть ли у травмированного и инициатора комбинезоны. Существуют отдельные конвации серверов для масштабирования, если админы этого хотят: 'paintballstandarddamage' и 'paintballoverallsdamage'.
Конечно, вы также можете использовать пейнтбольное оружие, чтобы метить что угодно, а не только других игроков! Кроме того, у пейнтбольных комбинезонов есть уникальная особенность: капюшон динамически поднимается или опускается в зависимости от выбора головного убора.
Красимый реактивный мишень
Подсвечите свои цели с помощью этого развёртываемого скина для реактивной цели. Можно рисовать и на мишене, и на шлеме с ведром. В качестве дополнительной функции ведро действует как голова игрока, позволяя оттачивать навыки попадания в голову.
Изысканные рамы
Добавьте в свою базу немного элегантности с этими орнаментальными рамками. Нарисуйте их или добавьте фото, а когда будете довольны своим шедевром, дайте рамке уникальное описание. Выпускается в 5 вариантах — от маленьких до очень больших.
Светящиеся рамки
Разместите свои работы в свете с этой коллекцией из 5 светящихся рамок. Поддерживая IO, вы можете выставлять эти индикаторы выключенными или включенными, чтобы ваши работы были видны для всех.
Рамы затворов
Разворачивайте свои дизайны с помощью оправ затворов. Выпускаясь в 5 вариантах размера, вы можете поднимать и опускать затворы вручную и с помощью ввода-вывода, открывая бесконечные возможности — от конкурса RP Gameshow до лучшего раскрытия базы ловушек.
Полотна без рамки
Если сверхбольшой кадр недостаточно большой для ваших целей, не ищите дальше этого набора из пяти безрамных полотен. Их можно использовать для создания фресок по-настоящему эпических масштабов.
Портативный мольберт
Перенесите свой талант на природу с этим новым, уникальным развёртыванием. Вы можете установить любую раму до большого размера и покрасить сколько угодно, наслаждаясь свежим ветром Рыбацкой деревни. В режиме краски вы можете переключать фон и даже сам холст, что помогает вам в творческом видении. Мольберт поддерживает любой цвет, даже чёрный...
Окно для покраски
Хотите ли вы сделать витражи, аквариум, витрину магазина или приманку в стиле «Один дома» — это окно для покрашивания будет очень полезно! Этот развёртываемый элемент является оболочкой для Усиленного стеклянного окна.
Спреи Rosette Award
И, наконец, с набором DLC Artist получают 4 кастомных спрея, которые можно использовать с помощью инструмента Spraypaint. В комплект входят спреи для 1-го, 2-го, третьего места и... Последнее место. Используйте их, как считаете нужным.
Новая мастерская, которую можно скинировать: SKS
В этом месяце мы представляем следующий мастер-класс, который можно оформить: SKS
SKS пользуется популярным запросом среди сообщества скиннинга, и мы рады выполнить его! Будучи одним из наших новейших видов оружия, мы с нетерпением ждём, чтобы увидеть, как будет работать сообщество с обновлённой графикой.
Чтобы создать свой собственный скин SKS, зайдите в внутриигровую мастерскую и найдите предмет оружия SKS. Оттуда можно скачать файл модели и добавить свои материалы.
Производительность сервера
Если вы следили за разработкой этого обновления, то, вероятно, знаете, что нам пришлось это делать из-за некоторых проблем с производительностью серверов. С тех пор мы очень сосредоточились на том, чтобы производительность серверов была максимально близка к уровням до обновления ВМС. Хотя многие проблемы были связаны с новым контентом, на этом мы не остановились и внесли много улучшений в старые узкие места производительности.
Отложил его в прошлом году
Многие из этих объяснений могут быть техническими, но нам показалось интересным увидеть процесс, через который мы проходим, работая над этими вопросами.
Готовка/производительность духовки
Мы заметили большие кадры, связанные с процессом печи — это любой костёр, печь, барбекю и т.д. При более внимательном рассмотрении у этого было несколько проблем. Процесс приготовления происходит каждые 0,5 секунды без рандомизации, так что если одновременно работает много духовок, они, скорее всего, собираются и вызывают большие скачки всплесков. В искусственном тесте из 500 духовок, работающих синхронно, мы видели 18 мс на работу всех духовок.
Печи теперь используют максимальный бюджет 0,25 мс на кадр, чтобы сгладить затраты при масштабной работе. Это просто замедляет работу системы, поэтому мы также сделали некоторые оптимизации, чтобы каждая духовка работала быстрее. При создании выходного элемента мы создавали новый элемент (например, 1x металлический фрагмент) и пытались добавить его в выход (обычно это добавляло +1 к существующему стеку и затем удаляло новый элемент). Гораздо быстрее проверить, есть ли уже элемент в выходе, и просто увеличить его количество, обходя процесс создания нового элемента (мы уже давно используем этот приём в промышленной системе). Каждая духовка также перерабатывала все свои предметы, чтобы найти топливо за каждый тик, которое теперь кэшируется. Наконец, духовка отмечала инвентарь как «грязный» каждый раз, когда обновляла процесс приготовления (чтобы обновить анимированный прогресс на значке предмета), который теперь загрязняется только при преодолении порога (5%, 10% и т.д.), что значительно снижает расходы на отправку обновлённых инвентарей.
Эти изменения снижают искусственный тест 500 печей, выплавляющих металлическую руду, до максимума 0,25 мс, часто меньше и без видимых изменений для игроков.
Промышленные показатели
Промышленная система всегда была проблемой с точки зрения производительности серверов. Конструкции оснований и труб с годами становятся всё более сложными и сложными, что открывает новые узкие места в логике. В этом месяце мне удалось получить копию крайне плохо работающей базы с одного из наших живых серверов, которая стала полезным бенчмарком. В некоторых случаях эта база тратила 20 мс на кадр на полную оценку всей промышленной системы, что, очевидно, является проблемой на любом сервере.
Основные преимущества здесь заключались в сокращении количества повторений контейнеров и других массивов. На этом масштабе просто получить элемент из контейнера может быть медленным, так как порядок элементов в памяти может не совпадать с порядком в контейнере, поэтому нам потенциально придётся пройти весь контейнер, чтобы определить, какой элемент находится в данном слоте. Умножьте это на каждый слот на каждом входе, оценивая каждый слот на каждом выходе, и стоимость быстро накапливается. Быстрый поиск, который мы можем использовать в промышленном процессе, оказался огромным успехом, в некоторых случаях он обойдёт более 20 000 перечислений.
Проверка пропускаемых элементов фильтрами тоже отнимала нам время, а прогнание всего входного контейнера через фильтр один раз в начале процесса позволяло нам обойти ещё больше перечислений. Это также позволило удалить пару слоёв вложенных фор-петлей. В итоге вышеуказанное основание теперь будет достигать пика 3 мс за кадр. Всё ещё прошло довольно много времени, но это заметное улучшение по сравнению с оригинальным корпусом.
Система отношений
Система RelationshipManager управляет системой контактов — делает снимки встреченных игроков и отслеживает ваши отношения. Функциональность довольно ограничена, но на переполненных серверах это занимало довольно много времени.
Это было прохождение каждого игрока на сервере, поиск игроков в зоне досягаемости, проверка видимости (с помощью проверки физики) и создание новых отношений, если нужно. Он также проанализирует все существующие отношения игрока, рассчитывает, сколько игроков отметили игрока как отрицательный, и по умолчанию отмечает его как враждебного (то есть его бейджик будет красным). Это происходило каждые 1 секунды без защиты у многих игроков, вызывающих это в одном кадре, поэтому иногда это могло приводить к очень длинным временам — до 0,75 мс на загруженных серверах.
Я обновил этот процесс, чтобы использовать бюджетированную очередь, так что максимум 0,15 мс обработки в кадре. Если новым игрокам потребуется обновление, оно подождёт до следующего кадра. Поскольку эта логика не обязательно должна быть полностью актуальной, небольшая задержка допустима и, скорее всего, не будет заметна. Я также обновил расчёт противника, чтобы он запускался только если игрок изменил контакт (помечен как дружественный/враждебный/нейтральный), так как в большинстве случаев результат был одинаковым. Наконец, я обновил проверку линии видимости при создании новых контактов, чтобы использовать систему окклюзии сервера в качестве первого прохода, что означает, что мы часто можем пропускать физические расчёты.
Размеры колайдеров игроков
Мы поддерживаем изменение размера коллайдера игрока в определённых ситуациях — при падении, во время сна, установки на транспортные средства и т.д. Это реализовывалось путём прохождения каждого игрока на сервере, каждого кадра и обновления по мере необходимости. На сервере с умеренно населённым заполнением это занимало 0,25 мс, хотя в большинстве случаев не требовалось обновлять размер коллайдера.
Я улучшил это, добавив бюджетную очередь, так что она обновляет только 0,05 мс игроков за кадр. Поскольку размер коллайдера игрока очень важен, я добавил ручную регулировку размера при смене состояния (например, когда игрок переходит в спящий режим), так что размер должен обновляться сразу и не задерживаться на несколько кадров.
Тома о воспитании
В Rust у нас есть система под названием «родительские томы» — как следует из названия, эти тома определяют, находится ли игрок или другая сущность поблизости и должны быть привязаны к другому объекту. Поскольку есть много крайних случаев, мы также проводим дополнительные проверки (например, физические запросы), чтобы избежать проблем.
Будущие лодки, созданные игроками, зависят от этого и используют его гораздо чаще, чем что-либо другое в мире. В ходе разработки мы обнаружили, что это увеличивает высокую стоимость серверной обработки. Вот пример 100 лодок, состоящих из 3 блоков и трёх спящих игроков:
А вот сколько это стоит — , что много для того, что не используется активно:
3,5 мс
Я потратил время, чтобы переписать эту логику, которая работает, если установлена (что по умолчанию). Сейчас:
TriggerParent.TickMode
1
• Использует собственную очередь обработки вместо вызовов, снижая задержки при изменении физического мира между отдельными вызовами
• Использовали пакетную обработку и burst-задачи для перекрытия работы между потоками, где это было возможно
• Пропускать работу, если том и его содержимое не были изменены или не изменены
В результате приведённый выше сценарий теперь следует:
• 1,4 мс (-61%) при движении каждой лодки
• 0,25 мс (-93%), если все лодки статични
Процедурные шипы появления
Просматривая нашу телеметрию производительности, я заметил, что каждую минуту случаются странные, частые мощные скачки задержек:
Оказалось, что наша система популяции сущностей испытывала трудности с возрождением всех пропавших сущностей (особенно свалочных куч). Это работает, отслеживая плотность населения на сервере, запуская множество случайных выборок мира, фильтруя недействительные, а затем используя эти позиции для появления сущностей.
Я написал инструмент, который имитирует пополнение популяции( ), визуализирует, как работает выборка и почему образцы отклоняются. Различные причины отказа отмечены цветом, при этом успех считается только «Зелёный». Вот визуализация до исправлений — (максимальный лимит) попытки создать 800 хламовых куч:
spawn.dump_map <popname> [count=100]
25000
Оказалось, что у нас есть пара багов, которые мешают появлению новых сущностей и сохраняют образцы, даже если у нас нет сущностей для появления. Исправив это и запустив инструмент снова, мы получаем попытки создать 800 хламовых куч (нужно увеличить, чтобы увидеть пиксели):
3019
Это также положительно повлияло на нашу телеметрию по максимальному времени кадра — лагспайки сейчас встречаются гораздо реже:
Производительность AutoTurret
Автотурели постоянно сильно расходуют серверы. Это связано с тем, что они часто обновляют углы каждые несколько секунд, это происходит для каждой турели на сервере. Каждое из этих обновлений постоянно синхронизировалось через сеть со всеми ближайшими клиентами. Это завалило клиентов ненужными сетевыми нагрузками.
График ниже показывает разницу во времени выполнения метода, который использовался для передачи этих значений по сети. Патч появился в 22:00 на наших серверах staging (резкое падение видно после внедрения). Это изменение также затрагивает Ballista и новую пушку, снижая их сетевые расходы.
SendAimDir()
Эти обновления углов также выполнялись для каждой башни на главной резьбе без значительной балансировки нагрузки или троттлинга.
Чтобы бороться с этим, я ввёл два новых бюджетных цикла, которые предотвратят чрезмерное потребление серверных ресурсов от множества автотурелей. Это будет заметнее на больших серверах. Каждый из серверных бюджетов для турелей можно настроить с помощью Convar ниже:
Максимальные миллисекунды за кадр можно тратить на обновления угла турели и общие обновления
NEW - tick_update_ms (по умолчанию 1) -
Максимальные миллисекунды за кадр можно тратить на проверку боеприпасов в турель
НОВОЕ - ammo_update_ms
(по умолчанию 0.1) -
Сколько миллисекунд можно потратить за кадр на сбор углов башни
scan_budget_ms
(по умолчанию 0.5) -
Плавучесть
В подготовке к Военно-морскому обновлению нам нужен был способ, чтобы наши водные системы могли поддерживать большое количество плавающих объектов в глубоком море. Это касается не только новых лодок игроков, но и уже существующих плавучих объектов, таких как трупы или добыча.
Сам код плавучести уже был довольно оптимизирован и использовал некоторые из наших новых API для определения уровня воды или проверки столкновений. Однако каждый плавучий объект запускал симуляции для себя, то есть они выполняли все отдельные шаги плавучества по одному.
Вместо того чтобы выполнять проверки по одной, мы можем объединять эти проверки на плавучесть, чтобы они проходили по всем объектам с использованием нескольких рабочих потоков. Ранее, в упрощённой логике, мы проверяли высоту воды для нескольких точек на каждом объекте, а затем добавляли силы для движения объекта к поверхности воды. Теперь мы получаем все высоты для всех плавующих объектов одновременно на нескольких нитях, рассчитываем их силы и, наконец, применяем их силы обратно к основной нити.
В итоге это в 4 раза быстрее в сценарии с 200 лодоками (у каждой лодки несколько точек плавучости), и масштабируется лучше, чем раньше, когда вы добавляете больше объектов.
Пользовательская единица / physx
Физика долгое время была узким местом для производительности серверов Rust. Кроме сокращения числа коллайдеров в мире, у нас не было способа существенно снизить эти затраты. Однако в прошлом году мы получили возможность вносить пользовательские изменения в нашу версию Unity Engine и внедрять обновления игры с его помощью.
Вы можете разбирать физику по-разному. Самое большое узкое место для Rust называется . Это та часть физики, где вы быстро находите пары коллайдеров, которые потенциально могут столкнуться, а затем выполняете более дорогие расчёты для получения точной контактной информации на следующем этапе. Просто из-за размера карты в Rust и плотности коллайдеров больших баз это оказывается дорогостоящей операцией.
Широкая фаза
Мы внесли целенаправленные изменения в физический движок (PhysX), что значительно ускоряет эту часть физики. Параллелизация широкой фазы стала самым значительным изменением, которое мы могли внести: каждый регион разделён на отдельную задачу, которая планируется для всех доступных потоков заданий, прежде чем результаты снова объединяются в основном потоке.
График выше показывает среднее время, проведённое на физическом тике за длительный период на одном из наших самых активных серверов. Середина графика — когда мы перешли на новую версию Unity с нашими кастомными библиотеками PhysX. Улучшение производительности довольно резкое.
Чтобы убедиться, что эти изменения безопасны, мы запустили обновление сервера перед обновлением флота, просто переключившись на новую версию Unity/PhysX. Естественно, все эти приросты производительности превратились в увеличение лимитов игроков, и цикл начался заново.
У меня есть дальнейшие улучшения PhysX/Unity в будущем, так что дальше всё будет лучше.
Выступление конных игроков — лодки
Когда игрок был оседлён, мы постоянно устанавливали его позицию на посадку каждый кадр, а не просто воспитывали игрока. Воспитание автоматически перемещало игрока в позицию верхового сиденья относительно дешево и бесплатно, тогда как наш способ настройки довольно дорогой. Есть несколько причин, по которым нужно задавать каждый кадр (связанные с томами parenting), но мне удалось преодолеть достаточно их случаев, чтобы мы могли внедрить монтируемое родительство на несколько монтируемых устройств. Пока что это будут только лодки, но я уверен, что в будущем мы сможем поставить его на ещё больше монтажных лодок. Эта стоимость также увеличивалась из-за ИИ, установленного на транспортных средствах, что значительно увеличилось в этом патче. К счастью, эти улучшения также исправляют рост стоимости ИИ.
Раньше показывали тестовый сервер (примерно 0,6 мс тратится на кадр на перемещение игроков) с небольшим количеством игроков (около 20~):
С сотнями ИИ мы сейчас достигаем 0,02 мс на родительском методе, и сам по себе даже не называется:
MountedPlayerSync
MountedPlayerSync
Производительность кабуза
В прошлом месяце я заметил необычное падение производительности при беге по Outpost, оказалось, что статический вагон использовал слишком много холстов, теперь это исправлено.
Это также затронуло игроков в районе вагонов-кабузов в дикой природе.
Производительность ловушки с дробовиком/турель с пламенем
Мы заметили необычные шипы, вызванные огненными турелями и ловушками для дробовиков. Это происходило каждые несколько секунд на больших базах без какого-либо TC. Довольно редко, но всё же исправлено.
Я также сократил сетевые расходы на огненные турели. Они отправляли ротацию каждому игроку в сетевой зоне каждые 0,1 секунды, что было лишним.
Профайлер серверов — режим Immediate
За пару дней до внутреннего локдауна я внедрил экспериментальное улучшение — возможность захватывать определённые области кода. Это должно быть полезно при погоне за задержками или при измерении редко используемого кода. Вот несколько примеров использования:
ServerProfiler
запишите Run() и все внутренние компоненты, затем экспортируют снимок с помощью (ServerProfiler.RecordScope("IndustrialQueue", RecordIndustrialQueueServerVar)) { industrialQueue.Run(); } // ИЛИ // сохраняйте запись и экспорт только при расходе более 5 мс на (ServerProfiler.RecordScopeIfSlow("IndustrialQueue", TimeSpan.FromMilliseconds(5), RecordIndustrialQueueServerVar)) { industrialQueue.Run(); }
В обоих случаях он создаёт файл, который можно найти локально в server/<ident>/profiler/. Чтобы не перегрузить снимки и не было слишком больших накладных расходов (запись всё равно замедляет производительность, экспорт асинхронен):
IndustrialQueue.json.gz
• Настоятельно рекомендуется иметь флаг, указывающий, активны ли области области (например, RecordIndustrialQueueServerVar)
• ServerProfiler имеет внутренний 30-минутный период ожидания после экспорта, когда области неактивны. Настроено через профиль. ExportIntervalS — интервал можно сбросить с помощью профиля. ResetExportInterval — если не хочешь ждать.
• Вся функция может быть отключена через профиль. ImmediateModeEnabled (по умолчанию включён)
• Он рассчитан на код, который работает за 0,05 мс и более, так что не используйте его для профилирования чего-то дешёвого (настройка профайлера и установка профайлерных хуков — затраты)
Twitch Drops — Домашние 4
Twitch Drops вернулись!
5–15 февраля!
Подключайтесь, чтобы посмотреть потрясающие стримы от некоторых из наших любимых восходящих создателей сообщества Rust! Обязательно получите свои Drops после просмотра этих замечательных авторов на Twitch.
синхронизация
Сэкономьте 50% скидки на Rust
Ахой! В честь долгожданного выхода Naval Update Rust теперь стоит по половине цены на ограниченное время! И подарить её другу, чтобы получить новых товарищей по экипажу!
Скачайте её из Steam