Rust news
SOCIAL:
В категориях: DevBlog

Devblog 143 на русском

143cro

Более симпатичные свалки, продолжение работ по оптимизации, исправления таблицы «лута» и многое другое.


Изменения стоимости

После того, как мы добавили в список элементов веревку, для изготовления деревянной брони перестала требоваться ткань. Теперь это исправлено, что должно облегчить её изготовление. Мы также резко сократили стоимость вёдер для воды, так как они вам понадобятся для следующего пункта…


Земледелие 1.5

Мы переработали значительную часть механики земледелия. Это может показаться не совсем приоритетной задачей, но я пытаюсь сделать интересными и полезными старые забытые функции.

Вы не обязаны что-либо делать по-новому: при желании вы можете засеять ряды конопли или тыквы снаружи вашего дома, и они будут расти так же, как раньше. Однако если у вас есть склонность к земледелию, вы можете позаботиться о ваших растениях, поместив их в «плантер» (удваивает скорость роста) и обеспечить круглосуточное освещение с помощью потолочной лампы (также удваивает скорость роста), а если вы нальёте в «плантер» свежей воды, то заметите, что почва становится темнее (этот эффект является временным).

Чтобы нормально расти, растения должны потреблять эту воду. Если растения получают достаточное количество воды во время роста, урожайность повышается в два раза! Однако соленая вода их полностью высушит. Это далеко не всё, что необходимо сделать, нам нужно гораздо больше нарисованных макетов и шейдеров, к тому же мы планируем разработать возможность заниматься генетикой, где игроки смогут клонировать хорошие растения или извлекать семена высокого качества. Тем не менее, старт получился достаточно хороший. Наслаждайтесь!

p.s. для владельцев серверов: если у вас появятся проблемы с производительностью, связанные с расчетом света, вы можете отключить его командой plantlightdetection = false после чего воздействие света будет рассчитываться в зависимости от времени суток


Новые ящики с «лутом» и изменения

Лично я сомневаюсь в целесообразности вбрасывания в игру цельных элементов, так как мне кажется, что это будет мешать работе системы компонентов, но это решение поддерживают достаточно многие люди, как внутри команды, так и вне её, поэтому мы собираемся начать эксперимент. Мы добавили новые фиолетовые ящики с «лутом», которые будут появляться в мусорных кучах. В них можно будет найти топоры, кирки, оружие начального уровня и некоторые виды доспехов.

Я думаю, мы должны начать с самых маленьких шагов и посмотреть, что это даст. Также изменилась вероятность обнаружения ресурсов в мусорных кучах различных типов. Скорей всего, вы найдёте фиолетовые ящики с «лутом» возле автомобилей и грузовиков; в небольших кучах мусора, вероятно, можно обнаружить продовольствие и нефтепродукты, а в более технологических свалках могут быть компоненты уровня tier2.

20170112111649_1

 


Потолочные светильники

Работая над механикой земледелия, я одновременно увеличил яркость потолочных светильников на 50%. У меня возникли сомнения касательно того, стоит ли это делать, потому что мы не можем себе позволить добавить к ним тени, а это значит, что с большой вероятностью свет будет просачиваться через стены. Я попытался найти золотую середину, так что давайте посмотрим, что из этого получилось. Одно можно сказать точно – базы и/или растения будут выглядеть намного ярче!


Мёртвые мухи

Для отрисовки мух ночью используется несветящийся шейдер, из-за чего они были видны даже в полной темноте. Теперь это исправлено.


Варианты мусорных куч

На этой неделе я некоторое время провёл, занимаясь переделкой двух наших автомобилей в металлолом, чтобы разнообразить виды мусорных куч. С этой же целью я собрал несколько других куч в одну. Способ, которым они на данный момент вбрасываются на местность, не является совершенным, в этой области по-прежнему нужны некоторые коррективы.


Вариации грузовиков

На этой неделе я сосредоточился на завершении работ с дополнительными версиями грузовиков, которые были показаны в блоге пару недель назад, а также некоторых незначительных доработках кабины грузовика и грузовой платформы. Кроме того, я сделал небольшую оптимизацию, например, сделал нормальные LOD-модели для жилых вагончиков.

Плавность Ragdoll-анимаций

Наши Ragdoll-анимации всегда были немного дёрганными. Интерполяция никогда не работала как положено, и на этой неделе я узнал, почему.

Вот объяснение для тех, кто разбирается в Unity: ragdoll состоит из множества «твердых тел» или rigidbodies, и интерполяция отказывалась работать, когда rigidbodies являлись детьми других rigidbodies. Исправление заключается в перемещении всех rigidbodies к корню объекта. Так что теперь гибель вашего персонажа будет выглядеть более гладкой, и, если вы кого-то убьёте, его ragdoll будет двигаться гораздо более плавно.


Оптимизация

Мы ещё раз внимательно изучили код в поиске возможностей для его оптимизации.

RPC – это функции, которые вызываются через сеть. Например, когда игрок стреляет, он вызывает RPC на сервере, который осуществляет выстрел. Ранее поиск и вызов команды осуществлялся через отражения. Это работало и достаточно быстро, но являлось причиной утечек ресурсов.

Самым быстрым способом в данном случае является создание функции, которая бы работала по следующему алгоритму: «если мы хотим вызвать данную функцию, вызвать её». Вручную это было бы очень трудно сделать, поэтому я разработал специальный генератор кода. Теперь вызовы RPC стали такими быстрыми, какими они должны быть, а также полностью избавленными от утечек.

У нас в HUD есть скрипт ссылки на переменную. Вместо написания кода, говорящего: «если здоровье игрока изменилось, обновить этот текст», мы можем настроить это в редакторе, который использует отражение для поиска переменной для назначения функции. Это очень удобно и значительно облегчает работу, но это довольно медленно, и каждый вызов приводит к утечке примерно 20 бит. Мне удалось избавиться от неё во всем коде и найти быстрый способ экономии 0,2 мс на каждый фрейм.

Когда вы ищете что-нибудь в игре, перед вами появляется меню, свойства которого зависят от того, что вы ищете. Эти меню определяются в коде с использованием атрибутов и обнаруживаются с помощью отражений. Это медленнее, чем должно быть и является причиной значительной утечки ресурсов. Я использовал генератор кода RPC для того, чтобы преобразовать это в аналогичный вид плоской системы.

Я также исправил довольно большую утечку в аккаунте игрока. Это была ошибка в коде, сгенерированном нашей прото-системой. Она приводила к небольшой, но последовательной течи.

Таким образом, главный клиентский шлейф теперь является свободным от утечек. Это приведёт к уменьшению количества заиканий и использования памяти; в общем, если у вас более-менее достойный компьютер, вряд ли вы увидите разницу, но всё-таки она есть.

Нам еще предстоит потрудиться в других областях, поэтому я собираюсь продолжать работу в этом направлении ещё неделю, чтобы посмотреть, можно ли добиться дополнительного ускорения.


Изменения в Item Store

Мы внесли небольшие изменения в item store. В нём появилась категория New Items, предназначенная для элементов, добавленных в последнем цикле (обычно в течение 1 недели). Мы также создали категорию Leaving Soon, куда попадают элементы, которые будут удалены в следующем цикле.

Цены теперь устанавливаются автоматически. Сразу после поступления в магазин устанавливается самая низкая стоимость, которая в дальнейшем увеличивается каждый цикл, пока скин не достигает статуса Leaving Soon. После этого элемент удаляется из продажи.

В настоящее время данный процесс занимает 7 циклов или 7 недель. Нам кажется, что это решение будет справедливым для авторов скинов, так как спустя несколько недель продажи в любом случае сокращаются. Это значит, что некоторые ранее снятые скины вернутся в продажу, а некоторые из находящихся в продаже скинов будут сняты. Впрочем, эти правила не высечены на камне, так что посмотрим, как будут идти дела в течение следующих нескольких месяцев.


Обновления для Unity

Мы обновили Unity до версии 5.4.4f1 (ранее стояла 5.4.2). Благодаря этому был исправлен баг с командой “-window-mode exclusive”, позволяющей играть в эксклюзивном полноэкранном режиме. Забавно также то, что одновременно улучшилась частота кадров.

Мы знаем, что многим людям не хватало этой функции, поэтому с радостью объявляем, что она снова работает.


Оптимизация для компонента Rigidbody

Первым шагом в оптимизации физической части стало устранение 70% компонентов Rigidbody на стороне клиента. Это значит, что физической системе теперь придется иметь дело гораздо меньшим количеством взаимодействий коллайдера на каждый фрейм, что естественным образом снижает её влияние на производительность. Это всего лишь первый шаг и у нас есть множество других идей, которые позволят ещё больше ускорить этот процесс, но большинство из них по своему характеру являются довольно рискованными и нуждаются в тщательном тестировании, прежде чем мы сможем претворить их в жизнь.


Оптимизация для эффектов

Многие из наших эффектов ещё не используют модульное объединение, а это означает, что ситуации, где передвигается много игроков или где происходит много выстрелов, оказывают существенное воздействие на производительность из-за самого процесса создания игрового объекта Unity. Я уделил этому внимание, сделав все наши эффекты совместимы с системами модульного объединения, что значительно снизило влияние на производительность при вызове эффектов частиц и маркеров.


«Сериализация» мира

Мы начали работать над системой, которая позволит резко сократить время загрузки. Объём работы очень большой, поэтому можно не ждать начала тестирования по крайней мере еще неделю, но первоначальные тесты показывают, что сразу после реализации этого проекта время загрузки уменьшится и будет занимать только пару секунд. Я также надеюсь, что получится воспользоваться этой возможностью для того, чтобы передать моддерам (modders) контроль над генерацией мира на втором этапе. Позже мы выложим более подробную информацию о том, как это всё будет развиваться.


Оптимизация системы выбраковки

Пользователь с ником Алистер (Alistair) заметил, что некоторые из макетов, в особенности заготовки для лута и некоторые небольшие статические скалы видны с очень большого расстояния. Я прошёлся по всем заготовкам и убрал всё лишнее, что позволило уменьшить примерно на 100 000 количество вершин, которые должны быть обработаны видеокартой, и отключить в среднем около 500 вызовов процесса рисования.


Анимация для револьвера «Магнум»

Мы закончили визуальную модель анимации и звуковые эффекты для нового револьвера «Магнум».

Также началась работа над глобальной моделью от третьего лица и к следующей неделе всё должно быть готово для того, чтобы передать Хелку для добавления в игру.


Оптимизация глобальной модели

Как упоминал Гарри на прошлой неделе, я в настоящее изучаю ресурсы глобальной модели и стараюсь удостовериться, что все сущности имеют правильно рассчитанные и настроенные LOD-модели. На данном этапе мы не можем заявлять о каких-либо улучшениях, но каждая мелочь в итоге оказывается важной. Подход, при котором все активы находятся на своих местах и не потребляют лишних ресурсов, является также наиболее организованным и приспособленным для продвижения вперед.


Глобальные модели элементов

На этой неделе мы прошлись по ещё одному большому списку элементов. Мы хотели сделать так, чтобы модель, которая представляет всё, что вы забираете в свой инвентарь или сбрасываете на землю, выглядела не как мешок, а так, как выглядит элемент на самом деле. В этом списке больше внимания уделяется таким ресурсам, как животный жир, уголь, высококачественный металл, ткань, порох, камеры CCTV и так далее – то есть, было положено хорошее начало работе над этими элементами, и она будет продолжаться до конца недели.


Оптимизация звука

На этой неделе мы сделали часть работы по оптимизации звуковой системы. Хорошего прироста производительности мы смогли добиться в двух основных местах:

Во-первых, мы полностью убрали зоны реверберации до тех пор, пока вы на самом деле в них не окажетесь. Мы обнаружили, что, аналогично недавно обнаруженному поведению системы частиц, отключение зон реверберации также оказывает влияние на производительность. Это позволило нам сэкономить примерно 1 мс на фрейм (иногда даже больше), что является довольно значительным результатом. Когда мы начинали добавлять зоны реверберации на карту, их было совсем немного, но после появления пещер их число сильно возросло, что ударило по счётчику производительности.

Другой точкой, где нам удалось добиться улучшений, является метод переработки звуков. Ранее у нас возникали проблемы с вылетами из игры, когда мы в одно и то же время выключали звук и удаляли игровой объект, поэтому мы сделали небольшую задержку, чтобы между остановкой и ресайклингом звука проходило примерно полсекунды.

На первый взгляд это не кажется серьёзной проблемой, но Unity продолжает обновлять AudioSources, которые время от времени отключаются или ставятся на паузу, поэтому возникли некоторые накладки. Мы не уверены, были ли вылеты, с которыми мы столкнулись, исправлены обновлением Unity, или они перестали быть проблемой из-за способа, которым мы объединяем звуки, но кажется, они исчезли.

Теперь звуки перерабатываются сразу, что хоть и не дало такого большого роста производительности, как отключение зон реверберации, но всё же немного помогло.


Звуки животных

Также на этой неделе мы продолжили работать над звуками животных. Чтобы избежать двойной работы, мы не стали доделывать медведя, пока не будут готовы новые модели и анимации. Все исходные материалы для рыка записаны, и все цепочки процессинга и эффектов настроены и готов к работе, то есть, осталось только всё привести в соответствие с новой анимацией, как только она будет готова.

Большую часть времени, свободного от работы по оптимизации, я провёл за озвучиванием волка. У меня ещё остались кое-какие дела, однако вот два старых звука нападения волков и рядом два новых, чтобы вы смогли почувствовать разницу:

Работа над криками, которые издаёт волк, когда получает травму или умирает, является, наверное, одним из самых неприятных занятий.