Завершение ракетного завода, будущее острова Hapis, оптимизация сети, скинов и прочее.
Асинхронная загрузка текстур
Как обещалось в прошлом блоге, на выходных и первой половине недели я сосредоточился на последних проблемах, связанных с производительностью и скинами. Я реализовал полностью асинхронную загрузку текстур из PNG формата, включая конвертирование в DXT и создание mip разметки для них. Это значит, что все, что нужно для загрузки нового скина и создания кеша теперь выполняется параллельно потоку без какого-либо влияния на частоту кадров. Вся тяжелая работа была реализована в собственном коде, чтобы позволить обрабатывать текстуры скинов достаточно быстро, даже когда необходимо одновременно обработать несколько из них. В результате этого, загрузка скинов теперь практически не влияет на производительность. Вы можете заметить его, взглянув на скрины до и после ниже:
Я горжусь системой API, которую я создал для всего этого, так как она проста в использовании, как и система WWW-класса Unity, но не создает просадки в кадрах при перегрузке основного потока. Если вы до этого момента играли с выключенными скинами, я настоятельно рекомендую дать им еще один шанс на этой неделе.
Оптимизация сети
Помимо скинов, одна из самых больших проблем с производительностью была связана с объектами, транслируемыми в и за пределы окружения. Сторона клиента могла имела способ получения информации о всех объектах, принадлежащих к определенной сетевой группе. Это использовалось для уничтожения всех объектов, принадлежавших к определенной группе, когда та становилась неактивной. Я полностью переписал эту систему, чтобы у нас был простой и эффективный способ реализовать это. Она устраняет задержку в 30 мс для каждого элемента сети, которых может быть около 15 одновременно.
Защита от флуда
На прошедшей неделе мы тестировали новую конфигурацию защиты сервера на наших официальных серверах, и после нескольких правок, мы получили штуку, которая выглядит более защищенной в случае DOS атак и одновременно уменьшает количество ложных срабатываний. Эта конфигурация будет доступна для всех серверов с сегодняшним обновлением.
Оптимизация получения данных
Я увеличил количество запросов на сторону сервера, когда кто-то спаунится или респаунится. Это должно ускорить время, затрачиваемое на этап загрузки "Receiving Data".
Ракетный завод
Я изо всех сил старался довести территорию вокруг фабрики до ума. Большая часть области, над которой я работал, теперь полностью готова. Я старался над расставлением объектов, текстурированием почвы и над другими мелочами. Я очень доволен тем, что получилось. Я потрачу все оставшееся время на этой неделе, чтобы все было на высоте. Осталось только создать LOD модели, коллизию и протестировать все на наличие каких-либо багов, а так же добавить точки спауна лута. Если ничего не произойдет, мы выпустим нашу фабрику уже на следующем глобальном вайпе.
Остров Hapis
Работа над островом Hapis продолжается, и мы по-прежнему планируем выпустить большое обновление уже в июле.
Я взял во внимание освещение, поскольку в последнее время оно заметно ухудшилось, как и наша прекрасная "неоновая трава". Кроме того, я надеюсь, что смогу добавить несколько густых деревьев до глобального вайпа, чтобы мы могли наконец попрощаться с этими устаревшими соснами.
Кроме того, мы с Баком будем работать над тем, чтобы создать острову Hapis немного предыстории. Это включит в себя обозначение всех локаций на острове, которые будут видны на карте. Так же есть что то, что бы мы хотели перенести на procmaps в ближайшем будущем.
Но обо всем этом немного позже, так как ничего из этого не имеет отношения к сегодняшнему патчу.
Верстак 3 уровня.
Я закончил работу над верстаком. LODы и gib'ы сделаны, так что оно готово к релизу. Я знаю, что некоторые из вас задавались вопросами по поводу устройств в игре, поэтому я хочу оповестить всех вас о том, что теперь у нас есть все 3 вида! Вот несколько скринов из игры:
Музыка
Я потратил довольно много времени на прослушивание и тестирование различных интенсивностей в колебании и устранении проблем, по мере сталкивания с ними. В основном это были очень мелкие изменения (например, увеличение длины ноты, чтобы заполнить пробел, который очень заметен при отключении драмов). Есть еще над чем поработать.
Я обнаружил несколько проблем с синхронизацией клипов, которые постепенно сливаются между собой и теперь я пытаюсь найти варианты их решения. Похоже, мне придется немного переписать часть новой системы воспроизведения. У меня есть несколько вариантов, которые, я думаю, смогут решить эти проблемы, и дадут нам точную синхронизацию во всех музыкальных клипах.
На этой неделе есть еще пара изменения. Отдельные ползунки для объемного звучания в меню паузы, а так же слайдеры громкости звука теперь имеют гораздо более разумный максимум, поэтому, когда они будут выкручены на максимум, они будут прекрасно сочетать в себе музыку и все остальные звуки игры.
Я заметил, что много людей спрашивали, когда это будет реализовано, и я надеялся что это будет готово, но я хочу еще раз убедиться в том, что это будет работать так как надо после того, как я добавлю все в игру. Вам придется подождать еще немного, но я думаю, что это того стоит.
Звук
На этой неделе я добавил еще одну стадию микширования и доработки звуков. Вы заметите это в звуках инвентаря и пользовательского интерфейса, поскольку я сгладил все переходы.
Я так же потратил немного времени на этой неделе, работая над моим списком необработанных записей и подготовкой библиотеки материалов.
Доработка анимации
Я вернулся к разработке Rust после работы над другим проектом. На этой неделе я работал над анимацией игроков в виде от третьего лица. Я добавил немного раскачивания рукам во время бега. Я также сместил оружие немного ниже, для более естественного положения при ходьбе (если игрок давно не стрелял из своего оружия). Я также улучшил анимацию ходьбы, поэтому она более не похожа на анимацию бега.
Список изменений:
- Исправлена яркость подстветки кодового замка.
- Оптимизированы запросы для объектов при выходе из сетевой группы.
- Оптимизировано распределение GC на стороне клиента во время смены сетевой группы .
- Увеличено значение maxpacketspersecond до 1500 (было 1000).
- Добавлена функция updatebatchspawn (более быстрая передача данных во время спауна\респауна).
- Добавлена полная асинхронная загрузка скинов.
- Добавлено больше пунктов в combat log при отказе атак.
Комментарии