На этой неделе мы наблюдали поистине впечатляющие показатели прироста производительности, мы надеемся, что теперь вы их тоже увидите. В любом случае, дайте нам знать о ваших впечатлениях. Также, в этом блоге вы сможете оценить так называемые "военные тоннели", обновлённую модель маяка, несколько интересных скриншотов с улучшенной графикой (в том числе тот, что находится выше) и многое другое.
Производительность процессора (CPU) - скрытые игроки
Ну, тут было приложено немало усилий. Всё время я продолжал спрашивать себя: "Почему мой FPS высок, когда я подключаюсь к пустым серверам и низок, когда я подключаюсь к густонаселённым?" Изначально мои предположения строились вокруг догадки "много людей = много построек = много объектов для рендера = низкий FPS". В общем, оказалось что я был неправ. Вот доказательства:
Чёрные пятна - игроки, причём как спящие, так и активные. Просто существуя, они волей-неволей порождают на моём компьютере кучу ненужного "мусора", а именно такие процессы как "рендеринг", "скиннинг" и пр. При всём этом, я даже не могу их видеть и уж тем более с ними взаимодействовать.
В данный момент, игроки - самый тяжёлый "груз" для наших процессоров. Даже если вы просто посмотрите на 10 игроков, ваш FPS резко снизится. Позже ко мне пришла идея: "А что если мы будем "отключать" модели тех игроков, которых мы не в состоянии увидеть". То, что когда-то начиналось как обычный тест, в конечном счёте привело к впечатляющим результатам улучшения производительности.
Теперь имеется специальный луч, который определяет, видите вы игрока или нет, и если нет, то его модель "отключается". Средняя прибавка FPS от этого нововведения - 20-30%.
Ниже идёт сравнение с включенной и выключенной функцией (обратите внимание на показатели FPS/MS):
До:
После:
Для исключения возникновения проблем во время противостояний и перестрелок, мне пришлось ввести некоторые поправки в систему, вот как сейчас всё работает:
- Если игрок "спит" и находится дальше расстояния указанного командой playercull.maxSleeperDist, то он отключается.
- Если игрок активен и находится дальше расстояния указанного командой playercull.maxPlayerDist, то он отключается.
- Если игрок находится на расстоянии ближе, чем указано в команде playercull.minCulldist, то он включается принудительно.
- Если мы целимся в игрока в общем направлении, то он также включается принудительно.
- Если другие игроки целятся в нашем направлении, то они также включаются принудительно.
- Если игрок находится позади нас, то он отключается.
Если ни одна из вышеуказанных проверок не верна:
- Проводятся линии от разных частей тела игрока к нашей модели, если мы способны видеть любую из этих частей тела, то игрок автоматически включается как минимум на 2 секунды.
В общем, этот список команд поможет вам настроить параметры "отключения" игроков, однако на мой взгляд с настройками по умолчанию должно быть всё в порядке. Если вам нужна справка по параметрам - вы всегда можете написать в консоли "find playercull". Также там будет присутствовать справочный текст.
Если по какой-то непонятной причине с включением этой опции ваш FPS упал, вы можете отключить её введя в консоль: "playercull.enabled false".
Я действительно надеюсь на то, что каждый увидит прирост производительности, в частности в густонаселённых районах и на пляжах после вайпов.
Производительность процессора (CPU) - стрельба
Я нашёл главный источник лагов во время перестрелок, именно он вызывал то, что люди привыкли называть "микролагами". В общем, каждый раз, когда одежда игрока меняется, данные об этом отправляются всем другим игрокам вокруг, дабы те могли увидеть эти изменения, а клиенты перестроить модель игрока. Проблема в том, что эта "перестройка" происходила вне зависимости от того, как изменилась одежда. Помните, как мы добавили к одежде показатель прочности? Ну так вот, каждый раз, когда одежда "впитывала" урон, её показатель прочности изменялся и вслед за ним, все клиенты начинали "перестраивать" модель, от этого, по сути, и возникали те самые "микролаги".
Сейчас я изменил параметры перестройки моделей и теперь эта проблема должна быть устранена. Кстати говоря, эти микро лаги также иногда возникали во время нанесения урона трупам игроков (в т.ч. во время их разделки), этот недуг также был ликвидирован.
Производительность процессора (CPU) - видимые игроки
Как вам всем уже известно, наша процессорная производительность была дерьмом, причём в течение очень длительного времени. На этой неделе я вместе с Хелкусом сфокусировался на самом проблемном месте: модели игрока. На густонаселенных серверах - LODинг, анимации, стойки, скининнг - жрёт свыше 10 (!) миллисекунд от общего процессорного времени. По сути, мы были связаны на уровне процессора, т.к. даже при очень мощной видеокарте некоторые люди просто не смогли бы почувствовать разницу.
Пока Хелкус занимался функцией отключения невидимых игроков, я продолжал заниматься оптимизацией тех игроков, которых мы всё-таки будем видеть. Сейчас я нашёл и устранил главные источники нагрузки, разумеется, не без помощи некоторых хитростей.
Благодаря нашим трудам, мы отошли от процессорной зависимости к видеокарте и это, само собой, хорошо, ведь у игроков есть возможность настроить графику таким образом, чтобы и качество и производительность были на должном уровне.
Баф двустволки
Поиграв с ней некоторое время, я пришёл к выводу, что её урон слишком низкий, поэтому я увеличил множитель урона с 0.75 до 1.0. Это значит, что теперь каждый выстрел двустволки наносит тот же урон, что и 1 выстрел из пайп-шотгана. Также, я ускорил частоту выстрелов с 0.5 до 1.0, таким образом, теперь 2 выстрела подряд можно будет сделать быстрее чем раньше, однако, в качестве компенсации, я немного сократил эффективную дистанцию поражения, то есть увеличил разброс картечи.
Изменения в сигнальной шашке
Люди привыкли к тому, что бросив шашку в конкретное место, груз со 100% вероятностью приземлится точно на дым. Люди пользовались этим, строя специальные 1х1 башни для того, чтобы у других игроков не было никаких шансов как-то за него повоевать. Теперь я изменил механику сброса, сейчас груз будет падать в случайную точку в 20-метровом радиусе вокруг шашки. Также я сократил шанс дропа сигнальных шашек в ящиках на лут-поинтах.
Таблицы лута аирдропа
Продолжая тему прошлой недели "чистки мусора в таблицах лута", я также принялся за эирдроп. Больше никаких факелов, яблок и прочего. Теперь патроны - худшее, что вы сможете там найти.
Прочие лаги
Одна из проблем, которую вы не раз уже замечали - кратковременное падение FPS-а при загрузке внутри баз игроков. Сейчас мы работаем над решением этой беды и когда оно будет найдено, общая производительность игры заметно улучшится.
Переработка маяка
Всем привет! Я был нанят на должность художника окружающей среды. То есть я, на ряду с Винсентом, буду отвечать за обновление моделей монументов и улучшение мира в целом. В данный момент я закончил с грейбоксами обновлённого маяка. Внутренние и внешние части уже закончены, таким образом меш готов к детализации. Новая модель будет гораздо больше старой, и помимо самого маяка, будет включать в себя небольшое бункерное помещение. Эта пристройка позволит сделать данный лут-поинт более интересным, к тому же, сам маяк по-прежнему останется неплохим снайперским гнездом.
Не так давно, я обсуждал с Винсом идею добавления альтернативного варианта, который будет состоять только из башни (т.е. маяка), в итоге мы оба сошлись на том, что это позволит добавить в игру больше разнообразия.
Военные тоннели
Прогресс по моделированию идёт очень даже хорошо. Сейчас я нахожусь на стадии обновления, т.к. старые варианты были слишком неинтересными. Благодаря добавлению новых частей тоннеля (склонов ведущих на уровень выше или ниже), я смогу расширить планировку.
Также ко мне в голову пришла одна мысль, несмотря на то, что тоннели очень круты, их не должно быть более 1-2 штук на сервере, т.к. они слишком большие. Сейчас я размышляю над идеей добавления более скромных тоннелей, из деревянных конструкций, которые смогли бы стать некой альтернативой громадных бетонных конструкций. К тому же, их размер позволил бы свободно подключаться к естественным пещерам и канализациям, в то время как большим военным тоннелям потребуются действительно большие пещеры, а также причины для соединения с ними. Так или иначе, продолжу думать над этим дальше.
Серверная верификация оружия
Тут пришлось немало повозиться. Как известно, в Rust любое действие с оружием сопровождается верификацией. Однако, некоторые из этих верификаций абсолютно никак не фиксировались, в следствие чего, были случаи некорректно "отвергнутых" нанесений урона и пр. Сейчас я сделал так, чтобы любое отклонение фиксировалось в логах, это позволило мне устранить ряд ложных срабатываний системы.
Так или иначе, некоторые из этих проблем крайне трудно воспроизвести в тестовой среде и вероятно, некоторые недочёты все ещё актуальны, т.к. мы их тупо пока не заметили, но сейчас, благодаря логам, мы сможем увидеть, где и что пошло не так.
Взаимодействие с кодовым замком
Ещё один древний и раздражающий баг - взаимодействие с кодовым замком было доступно лишь с одной стороны внешних ворот. Решение оказалось очень простым и к тому же, после фикса я обрёл некое душевное спокойствие.
Обновление анимаций "бобовой" гранаты
Большая часть материала, который я просматривал на этой неделе, так или иначе не может быть обновлена до тех пор, пока им не займутся программисты. Однако, я смог обновить анимации модели "бобовой" гранаты. Анимация развёртывания начиналась с неправильной позы, что приводило к визуальному глюку. Также, тут отсутствовали анимации для цикличности. В целом, я "подогнал" анимации ближе к анимациям гранаты F1.
Костяная броня
Было сложно, но я таки добил лоуполи этой брони. Надо сказать, я очень доволен тем, что получилось. Сейчас я работаю над шлемом из человеческого черепа, а позже для разнообразия планирую заняться шлемом из оленьего черепа.
You can take a spin around it here, to get a feel for what it looks like from all angles:
Штурмовая винтовка LR300
Я закончил с хайполи-версией. Мне показалось, что красить этот агрегат полностью в чёрное будет достаточно скучно, поэтому в этот раз я решил добавить разнообразия.
Звуки для двустволки
На этой неделе я сделал новые звуки для двустволки. Я обратил внимание, какая реакция была у игроков на звуки-заполнители, которые с их слов были "глубокими" и "пушечными", поэтому я решил добавить нечто такое же и в новые звуки.
Мне очень понравилось то, что получилось, однако мне кажется, что звуки перезарядки немного слабоваты, поэтому сейчас я в поисках крупных кусков металла для записи более "мясистых" звуков перезарядки.
Музыка
Теперь, когда у нас имеется система динамического саундтрека, я приступил к работе над заполнением пробелов. В данный момент больше всего не хватает музыки для сбора ресурсов в солнечных полях, поэтому на этой неделе я сосредоточился именно на этом.
Машина для торговли с игроками
Вот один из первых вариантов концепта спец. машины, которую игроки смогут размещать на 1 этажах своих баз для легитимной торговли с другими игроками. Мы пока что остановились на варианте модифицированного автомата для продажи газировки, на котором будет клавиатура, небольшой экран (на котором вы будете выбирать подходящую сделку) и спец. отсек снизу (в который вы будете класть то, что предлагаете, после чего оттуда же будете забирать то, что вам необходимо). Будет интересно узнать, как люди отнесутся к такого рода экономическим приспособлениям.
Кап. ремонт графики
Я всё также продолжаю работать, вот некоторый прогресс:
Прогресс по исследованию предметов
Просто напоминаю, что я продолжаю работать над возвращением в игру исследования предметов, а точнее над его обновленной формой. Это занимает немного больше времени, чем я ожидал, поэтому на этой неделе я взялся за улучшение производительности. Сейчас я планирую поделиться результатами уже на следующей неделе.
Список изменений:
- Обновили анимации модели "бобовой" гранаты в виде от 1-го лица.
- Картечь имеет небольшую рандомизацию в скорости полёта (на урон не влияет, чисто визуальный эффект).
- Добавлен более детализированный логгинг атак на стороне сервера, а также верификация снарядов.
- Улучшена верификация прямой видимости у атак ближнего боя и снарядов на серверной стороне.
- Улучшена верификация расстояния до объекта и его позиции во время атаки на серверной стороне.
- Улучшена верификация перезарядки на серверной стороне.
- Исправлен лаг, который был включён в расчёт десихнронизации игрока на серверной стороне.
- Исправлены ситуации, в которых возникает ошибка “invalid projectile: Missing ID”.
- Исправлены баги снарядов, иногда полностью уничтожались во время пробивания объекта.
- Исправлен баг код. замков, ранее были доступны только с одной стороны внешних ворот.
- Устранён эксплойт, с помощью которого люди через вращение стен накладывали строй.блоки потолков друг на друга.
- Устранена возможность взаимодействовать с объектами во время ранения.
- Добавлены новые звуки для двустволки.
- Улучшили производительность для видимых животных и игроков.
- Добавлена функция, благодаря которой клиент не будет рендерить игроков вне поля зрения. На популярных серверах производительность растёт на 20-30%
- Эирдроп теперь прилетает в рандомную точку в радиусе 20 метров вокруг сигнальной шашки.
- Убран различного рода мусор из таблиц лута эирдропа.
- Снизили шанс дропа в луте сигнальной шашке.
- Снизили шанс дропа в луте огнемёта.
- Множитель урона двустволки был увеличен с 0.75 до 1.0.
- Увеличили разброс картечи при выстреле двустволки (снизили эффективную дальность поражения).
- Скорость повторного выстрела была увеличена с 1.0 до 0.5 (теперь 2 выстрела можно будет сделать быстрее).
Комментарии