sbox — Обновление 05.08.2026
🤓 Кучу изменений в рендере, Slang новый язык шейдеров, Vulkan 1.3 и ВНЕЗАПНО обновление Hammer от Deadlock и быстрая загрузка игр/карт
Оригинал (ссылка)
Новое главное меню
Главная страница меню не справляется со своей задачей, она должна максимально легко направлять вас в интересующую вас игру. На этой неделе я внес несколько изменений, и мы будем продолжать вносить их, пока она не станет действительно полезной.
Список друзей
На этой неделе список друзей получил несколько обновлений, так как он выглядел устаревшим. Участники группы сгруппированы в списке, и вы можете приглашать пользователей в свою игру/группу прямо из строки.
Режим стримерса
Мы добавили на платформу настройку «Режим стримера» . При включении этой функции всем (включая вас) будет присвоено анонимное имя и сгенерированное случайным образом изображение профиля.
Обратите внимание, что это не будет работать во всех играх по умолчанию, поэтому разработчикам следует проверить Preferences.StreamerMode, чтобы гарантировать, что они никогда не будут передавать по сети строки/изображения профилей игроков, если в клиенте включен «Режим стримера».
Превьюшки для Mount карт
Теперь вы можете играть на картах из поддерживаемых игр на ездовых животных, и для удобства выбора они теперь снабжены миниатюрами. Наслаждайтесь! 😎
Если вы разрабатываете собственную игру на ездовых животных, 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.
Кроме того, Steam Controller и другие универсальные контроллеры раньше вообще не отображали своё название, теперь отображают, что должно упростить различение ваших контроллеров.
Header
saddssadsadsadsadasdsadsadsadadsds
Vulkan 1.3
Мы повышаем минимальную версию 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
Я добавил новый апскейлер DLSS наряду с FSR3. Это необязательные апскейлеры, использующие временные методы, поэтому могут наблюдаться незначительные двоения изображения и артефакты. Генерации кадров нет, и добавлять её не планируется.
Исправления Upscaler
При рендеринге в низком разрешении графические процессоры неявно выбирают более гладкую, уменьшенную версию текстуры, когда соседние пиксели текстуры находятся ближе друг к другу; масштабирующие процессоры рендерят игру в более низком разрешении, и сочетание этих двух факторов приводило к тому, что текстуры выглядели слишком гладкими при использовании DLSS или FSR.
Применив смещение в выборе этих текстур, мы можем добиться того, чтобы текстуры игры выглядели такими же четкими, как и при нативном разрешении.
Specular включен изначально
Мы включили блики по умолчанию во всех материалах, использующих «сложный» шейдер. Если вы когда-либо создавали материалы со сложными шейдерами, то знаете, что «блики» раньше были функцией, которую нужно было включать вручную в каждом материале, созданном с использованием сложного шейдера.
Именно блики делают модели блестящими и эффектными. Всё блестит. Было непонятно, почему такая важная часть затенения была необязательной, и я знаю по личному опыту, что это может сбивать с толку многих начинающих художников. Кроме того, почти все остальные шейдеры, включая пользовательские, имеют включенные по умолчанию блики.
Повлияет ли это на мои ресурсы? Весьма вероятно, что это НЕ повлияет на ваши материалы, и игры будут выглядеть так же. Однако может быть один крайний случай, когда это *может* изменить внешний вид ваших материалов, но только если они соответствуют определенным критериям:
- Ранее в материале была отключена функция "Зеркальный эффект".
- Текстура шероховатости не задана, использована текстура по умолчанию, равная 0,5.
В этом случае модели могут приобрести плоский пластиковый блеск. Это можно исправить, установив значение шероховатости в настройках материала на 1.0 или добавив соответствующую текстуру шероховатости; надеюсь, это довольно быстро решит проблему.
Tint для шейдера меха
Теперь шейдер меха поддерживает тонирование из компонента рендеринга модели. Ранее это было невозможно, но теперь, когда у нас наконец-то есть удобочитаемый код в шейдере меха, мы можем начать внедрять в него новые функции. Думаю, это будет удобно для создателей косметических предметов.
Статическое кэширование теней
Теперь, когда мы можем помечать объекты как статические, мы можем выполнить ряд полезных оптимизаций.
Для карт теней нам нужно отрисовывать статическую геометрию только один раз, а затем кэшировать её; тени будут перерисовывать только динамические объекты в картах теней, и вам не потребуется много настроек или запекания.
Прозрачность для волос исправлена
Мы используем альфа-канал для обеспечения прозрачности, не зависящей от порядка отображения, но этот метод работает только при включенном MSAA. При выключенном MSAA мы, по сути, возвращались к прозрачности типа «сетка», что создавало некрасивые точечные узоры.
Теперь, когда MSAA отключен, мы используем альфа-отсечение. Это означает, что волосы больше не полупрозрачны, но при этом исчезает точечный эффект.
В будущем мы, возможно, рассмотрим другие методы обеспечения прозрачности, не зависящие от порядка пикселя и не использующие MSAA, но до тех пор мы будем выдавать предупреждение в настройках, если MSAA отключен.
Bloom 3
Наша вторая реализация эффекта размытия (bloom), предыдущая лучше подходила, чем та, что была изначально в движке, и являлась хорошим примером нашего конвейера постобработки, но её было сложно настроить, а после недавних изменений она также потеряла значительную часть визуальной выразительности.
Bloom 3 выглядит ещё лучше и проще в настройке, эта реализация больше похожа на то, как это делается в современных играх.
Мелкие, очень яркие детали раньше не распускались, а теперь они прекрасно смотрятся:
В наших тестах это также показало примерно на 25% более высокую скорость.
Тени
Несколько обновлений назад мы добавили тени в экранном пространстве, и теперь хотим постепенно более широко раскрыть концепцию масок теней — способ отложить часть вычислений теней для вычисления шейдеров с текстурой в экранном пространстве, чтобы они могли эффективно уменьшаться в размере и корректно компоноваться.
Я переработал внутренний механизм создания масок теней, и это также исправило задержку в 1 кадр, из-за которой такие вещи, как тени в экранном пространстве в VR, отображались в обратном порядке. Теперь все в порядке, и API практически готов к публикации.
Я также исправил артефакты, возникающие из-за расхождения квадов в тенях. Мы используем метод, называемый Receiver Plane Depth Bias, который использует разницу глубины между текселями соседних карт теней в кваде для соответствующей корректировки смещения глубины. Проблема в том, что порядок карт теней в этом кваде может расходиться, приводя к появлению некорректных данных, даже если мы стараемся это смягчить.
Я упростил это и просто использовал метод, аналогичный тому, что делают Unity и Godot, смещая положение тени на размер PCF и нормаль поверхности. Это решает как проблему «угревой сыпи» в тенях, так и проблему расхождения квадов.
Агрегация мэшей в Hammer Editor
Теперь Hammer Maps будет создавать агрегированные объекты сцены из мешей и свойств. Агрегаты объединяют несколько мешей и свойств, использующих один и тот же материал, в один специализированный агрегированный объект сцены, поэтому среда выполнения отправляет один пакет вместо одного на каждый меш.
Это приводит к уменьшению количества draw calls и ускорению процесса отрисовки статической геометрии.
Это частично перенесенная из исходного кода 2, но без мешлетов и отсечения на графическом процессоре, как в первой версии.
Hammer Open World VVis
Мы обновили способ объединения кластеров видимости во время компиляции карты, используя проверенные настройки из Deadlock.
Ранее открытые карты могли генерировать множество небольших соседних скоплений объектов с плохой видимостью, даже если эти области уже были видны друг другу. Новые этапы предварительного объединения позволяют комбинировать подходящие открытые пространства и небольшие регионы до начала выборки данных о видимости.
- Уменьшите количество ненужных скоплений объектов, на которые не следует обращать внимание.
- Улучшить расчеты видимости на больших открытых пространствах.
- Обеспечьте более качественную визуализацию данных в процессе составления карт.
Для того чтобы эти изменения принесли пользу всем картам, их необходимо перестроить . Поскольку это повлияет на видимость на всех картах, мы также будем проверять результаты с помощью пересборки карт и визуальной проверки корректности.
Зачем обновлять Hammer?
В наших сценах скоро появится этап компиляции, использующий агрегированные сетки и объекты.
Перенос этих функций из исходного кода Source 2 в Hammer дал нам возможность протестировать их в наших самых неэффективных сценариях работы со статической геометрией.
Map Editor: Плохие фейсы
В Hammer неудачно подсвечивали фейсы, чтобы их можно было исправить, и теперь мы делаем то же самое.
Map Editor: Hide Face
Помимо скрытия игровых объектов, теперь можно также временно скрывать грани сетки.
Map Editor: Инструмент UX
Примитивный инструмент в нашей картографической системе нуждался в доработке, поэтому я совместно с сообществом придумал что-то получше.
Улучшенный импорт
В рамках небольшой пользовательской оптимизации, теперь в мастере создания модели добавлена функция импорта масштаба.
ModelDoc: автоматическое заполнение текстур
Я обновил работу узла DefaultMaterialGroup, и теперь он может автоматически назначать материалы, если имена совпадают. Таким образом, если имена материалов вашей модели совпадают с именами материалов в вашем проекте, они будут автоматически заполнены.
Ранее эта функция автозаполнения работала только в том случае, если слоты материалов в модели содержали полный путь к содержимому, что, очевидно, не очень удобно для художников. Теперь она работает и с простыми именами материалов.
Этот вспомогательный инструмент будет работать при соблюдении следующих условий: 1) слот материала еще не был автоматически заполнен какой-либо другой функцией, например, автозаполнением по пути к содержимому; 2) имя материала не является неоднозначным, то есть в вашем проекте s&box должен быть только один материал с таким именем.
Быстрое создание декалей
Я добавил новую опцию в контекстное меню, которая позволяет быстро создавать новые определения декалей из текущего набора текстур. Просто выберите одно или несколько изображений в браузере ресурсов, щелкните по ним правой кнопкой мыши и выберите «Создать декаль».
Engine попытается автоматически назначить все текстуры соответствующим слотам декалей из выбранных. Единственное требование — ваши текстуры декалей должны иметь соответствующие суффиксы, добавленные в конец имени файла, например: _color , _normal , _rma , _emissive , _height . Например, файл «my_custom_decal_color.png» будет назначен слоту цвета.
Вы получите уведомление во всплывающем окне, если что-то пошло не так во время создания декалей; это обычно происходит, если у какой-либо из текстур декалей есть неправильные/отсутствующие суффиксы. Этот инструмент должен значительно упростить процесс создания декалей, превратив его в быструю процедуру в два клика.
Оптимизации callbacks ивентов физики
Теперь события столкновений происходят значительно быстрее, особенно когда объекты находятся в спящем режиме.
Раньше каждое событие требовало собственного управляемого коллбэка плюс четырех вызовов обратно в нативную инфраструктуру. Теперь все события объединяются в один вызов для каждого шага физики.
Это вносит одно небольшое изменение в поведение: события обновления столкновения больше не отправляются для спящих контактов.
Unity сохраняет ту же семантику для OnCollisionStay.
Если вам нужно старое поведение, установите PhysicsBody.AutoSleep = false, чтобы вернуть его.
Clutter на опубликованных картах
Ранее нарисованные объекты некорректно загружались на опубликованных картах, поскольку их данные хранились на уровне сцены, а не непосредственно на карте.
Теперь экземпляры карт могут применять временные переопределения системы игровых объектов . Эти переопределения отменяются при выгрузке карты, что предотвращает загрязнение основной сцены данными, специфичными для карты.