Обновление от 26.08.05

Прокомментировать Просмотры: 3

Изменения в главном меню

Обновление от 26.08.05

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

Список друзей

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

Открыть видео

Режим стримера

На платформе появился новый параметр — Режим стримера. При его активации все участники (включая вас) получат случайные анонимные никнеймы и автоматически сгенерированные аватары.

Обратите внимание, что эта функция работает «из коробки» далеко не во всех играх. Разработчикам необходимо проверять свойство Preferences.StreamerMode, чтобы исключить передачу сетевых имён игроков и аватаров по сети, когда у клиента активен режим стримера.

Миниатюры для карт из сторонних игр

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

Если вы создаете собственную интеграцию, учтите: SceneLoader теперь поддерживает интерфейс IThumbnailProvider, который подгружает превью по пути /thumbs/{Host.Ident}/{RelativePath.WithExtension( ".png" )}. Массово сгенерировать их можно с помощью консольной команды mount_generatethumbs. Она делает скриншот с игрового объекта, помеченного тегом map_preview, либо использует точку появления игрока в качестве запасного варианта.

Ускоренная загрузка пакетов

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

Мы увеличили лимит параллельных загрузок с 16 до 64 и перешли на протокол HTTP/2. Теперь вместо открытия 64 отдельных сокетов запросы распределяются по нескольким общим соединениям. Мелкие файлы скачиваются примерно в два раза быстрее.

Кроме того, передача данных теперь идет напрямую на диск, минуя предварительное буферизирование в оперативной памяти. Раньше загрузка пакета весом 610 МБ вызывала скачок потребления памяти до 739 МБ, а теперь этот показатель держится на отметке в 3 МБ.

Иконки ввода и улучшения

Мы добавили поддержку современного Steam Controller, и теперь в нашем распоряжении имеется уникальная библиотека иконок как для Steam Deck, так и для самого контроллера. Заодно была внедрена поддержка геймпадов Switch Joy-Con.

Помимо этого, Steam Controller и некоторые другие универсальные геймпады раньше вообще не передавали свои системные имена — теперь эта проблема решена, и различать подключенные устройства стало проще.

Vulkan 1.3

Мы повышаем минимальную поддерживаемую версию графического API Vulkan с 1.2 до 1.3. Несмотря на кажущуюся масштабность изменений, мы не ожидаем никаких проблем для подавляющего большинства пользователей или существенного роста системных требований.

Фактически, это соответствует новым минимальным спецификациям Minecraft, что кажется нам вполне разумным стандартом.

Переход на Vulkan 1.3 даёт нам более чистую и стабильную базу для рендеринга, позволяя задействовать функции, которые уже стали стандартом на современном „железе“. Практически для всех ничего не изменится: никаких новых графических настроек, падения производительности или необходимости апгрейдить ПК. 

Модернизация Vulkan

Мы начали процесс масштабного обновления работы с API Vulkan.
Внешне это никак не проявится, однако позволило избавиться от устаревшего кода и предоставить видеодрайверу более точные инструкции.

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

Расширение VK_KHR_dynamic_rendering стало обязательным, что позволило полностью удалить устаревшие пути рендер-пассов и фреймбуферов.

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

Компилятор шейдеров Slang

Мы отказались от компилятора DXC в пользу Slang — того же инструмента, который используется в актуальных сборках Source 2.

Никаких проблем со старыми шейдерами возникнуть не должно, так как Slang полностью обратимо совместим с HLSL и при этом предлагает ряд преимуществ:

  • Время компиляции шейдеров сократилось на 25% при сохранении идентичного кода HLSL. Процесс можно дополнительно оптимизировать с помощью модулей, дженериков и интерфейсов.
  • Поддержка Intellisense через расширения для Visual Studio и VSCode, которыми мы и так пользуемся.
  • Дженерики и интерфейсы, уменьшающие количество вариаций шейдеров и позволяющие масштабировать крупные кодовые базы за счет модульности.

Мы, как и прежде, стремимся идти в ногу со временем и использовать передовые технологии в рендеринге, .NET и других сферах.

DLSS

В дополнение к FSR3 мы интегрировали алгоритм масштабирования DLSS. Это опциональные апскейлеры, использующие темпоральные методы, поэтому они могут создавать незначительные артефакты и шлейфы. Генерация кадров не предусмотрена, и добавлять её в планы не входит.

Исправления апскейлеров

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

Внедрив корректировку смещения для выборки текстур, мы смогли вернуть им ту же четкость, что и при нативном разрешении.

Зеркальный блеск (Specular) теперь включен по умолчанию для сложных шейдеров

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

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

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

  • В материале ранее была отключена функция «Specular».
  • Не задана текстура шероховатости (roughness), из-за чего использовалось значение по умолчанию, равное 0.5.

В таком случае модели могут приобрести плоский пластиковый блеск. Проблема решается за пару секунд: достаточно выставить значение шероховатости в настройках материала на 1.0 или подключить подходящую текстуру шероховатости. 

Поддержка тонирования для шейдера шерсти

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

Кэширование статических теней

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

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

Исправления прозрачности волос

Для независимой от порядка отрисовки прозрачности мы используем метод Alpha to Coverage, который корректно работает только при включенном сглаживании MSAA. Без MSAA движок переключался на так называемую сетчатую прозрачность (screen-door transparency), создававшую неприятную зернистость.

Теперь при отключенном MSAA задействуется альфа-отсечение (alpha clipping). Это означает, что волосы перестают быть полупрозрачными, но взамен исчезает раздражающий «шум».

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

Bloom 3

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

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

Открыть видео

Мелкие яркие детали раньше почти не светились, а теперь этот эффект отрабатывает отлично:

Открыть видео

Наши бенчмарки показали, что этот вариант работает примерно на 25% быстрее.

Тени

Несколько обновлений назад мы внедрили тени в пространстве экрана (Screen-Space Shadows) и теперь планируем постепенно расширять концепцию масок теней. Идея заключается в том, чтобы переложить часть расчетов теней на вычислительные шейдеры с использованием текстуры пространства экрана, что позволит эффективно их оптимизировать и корректно совмещать.

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

Кроме того, мы избавились от артефактов при расхождении квадов в тенях. Раньше использовался метод Receiver Plane Depth Bias, который анализирует разницу глубин соседних текселей карт теней внутри квада для корректировки смещения глубины. Проблема заключалась в том, что порядок карт теней в кваде мог нарушаться, приводя к появлению мусора на экране, даже несмотря на наши попытки сгладить этот эффект.

Я упростил систему, применив подход, аналогичный решениям в Unity и Godot: смещение позиции тени рассчитывается на основе размера фильтра PCF и нормали поверхности. Это разом решило проблемы как с «эффектом самозатенения» (shadow acne), так и с багами квадов.

Объединенные меши в Hammer

При компиляции карт в Hammer теперь создаются специализированные объединенные объекты сцены (aggregate sceneobjects). Они объединяют несколько мешей и пропсов, использующих одинаковый материал, в единую структуру, благодаря чему во время исполнения отправляется один пакет вместо кучи отдельных вызовов отрисовки.

Это приводит к снижению количества вызовов отрисовки (draw calls) и ускоряет рендеринг статической геометрии.

Эта функция частично перенесена из свежих версий Source 2, но на данном этапе — без использования мешлетов и GPU-отсечения.

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

Мы обновили алгоритм объединения кластеров видимости при компиляции карт, задействовав проверенные наработки из Deadlock.

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

Это позволяет:

  • Сократить количество избыточных кластеров видимости.
  • Повысить точность расчетов видимости на больших открытых пространствах.
  • Сделать данные о видимости более чистыми при компиляции карт.

Чтобы нововведение заработало, карты необходимо перекомпилировать. Поскольку изменения затрагивают видимость на всех уровнях, мы также проведем дополнительную верификацию результатов и визуальную проверку. 

Зачем обновлять Hammer?

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

Портирование этих механик из Source 2 в Hammer дало нам отличную возможность протестировать их на самых тяжелых участках со статической геометрией.

Проблемные полигоны

В Hammer появилась подсветка некорректных граней, что упрощает их поиск и исправление.

Открыть видео

Временное скрытие граней меша

Помимо возможности скрывать целые игровые объекты, теперь можно временно скрывать отдельные грани мешей.

Открыть видео

Улучшение интерфейса инструмента примитивов

Интерфейс инструмента создания примитивов в нашем редакторе карт нуждался в переработке, поэтому совместно с сообществом мы создали более удобное решение.

Масштаб импорта и пресеты единиц измерения

По многочисленным просьбам пользователей мы добавили в мастер создания моделей возможность указывать масштаб при импорте.

ModelDoc: автозаполнение текстур материалов по имени

Открыть видео

Мы обновили логику работы ноды DefaultMaterialGroup: теперь она способна автоматически назначать материалы, если их имена совпадают. Если названия материалов вашей модели соответствуют ассетам в проекте, они подставятся сами.

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

Помощник сработает при выполнении двух условий: 1) слот материала еще не был заполнен другой функцией (например, по полному пути), 2) имя материала уникально — то есть в вашем проекте s&box существует ровно один материал с таким названием. 

Создание декалей через контекстное меню

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

Движок попытается автоматически распределить текстуры по соответствующим слотам. Единственное требование — файлы должны иметь стандартные суффиксы в названиях: _color, _normal, _rma, _emissive или _height. Например, файл «my_custom_decal_color.png» автоматически отправится в цветовой слот.

Если в процессе что-то пойдет не так (например, пропущен или некорректно указан суффикс), система предупредит вас всплывающим окном. Этот инструмент превращает создание декалей из рутинной задачи в быструю процедуру в пару кликов. 

Оптимизация обратных вызовов физических событий

Обработка столкновений стала значительно быстрее, особенно когда физические тела находятся в состоянии покоя.

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

Это влечет за собой одно небольшое изменение в поведении: события обновления столкновений больше не отправляются для неактивных (спящих) контактов.

Аналогичная логика используется для OnCollisionStay в Unity.

Если вам требуется старое поведение, верните его с помощью параметра PhysicsBody.AutoSleep = false.

Растительность и мелкие объекты на опубликованных картах

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

Теперь экземпляры карт могут применять временные переопределения системы игровых объектов (Game Object System). При выгрузке карты эти изменения сбрасываются, что защищает главную сцену от захламления лишними данными.

Спасибо нашему участнику @Pol за этот вклад!

Источник

Поделиться:

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов