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

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

Sandbox: Оружие для механизмов

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

Теперь ваши технические сооружения могут вести ракетный огонь..

Или манипулировать объектами с помощью тягового луча..

Sandbox: Экраны реального времени

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


Эта возможность существовала и раньше, но я решил продемонстрировать, как реализовать это в ваших собственных проектах. Вы можете создать текстуру для рендера (Render Target) нужного разрешения и просто привязать её к RenderTarget компонента камеры (CameraComponent).


Автоматические уровни детализации (LOD)

Мы добавили функцию автоматической генерации уровней детализации (LOD) непосредственно в ModelDoc.
В основе процесса лежит мощный инструмент meshoptimizer от Арсения, который берет на себя всю вычислительную нагрузку.

Видео предоставлено авторами Northbound RP

Система максимально интуитивна, и вы получите достойный результат уже при стандартных настройках. Тем не менее, никто не запрещает тонкую ручную настройку отдельных параметров и совмещение автоматических LOD-ов с созданными вручную.

Импорт спрайт-листов

Больше не нужно вручную нарезать спрайты — мы добавили возможность импортировать их из цельного листа. Просто укажите количество строк и столбцов, а затем выберите нужные кадры:

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

Инструмент для создания мостов при проектировании карт

Ещё один важный функционал из Hammer перекочевал в наш редактор карт. Теперь доступно создание перемычек между ребрами и гранями.

Информативность при разрыве соединения

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


Теперь игроки будут видеть информативные сообщения в случае отключения или неудачной попытки подключения с понятным описанием причины. Таким же образом мы теперь выводим сообщения об исключении с сервера. Мы также устранили ошибку, из-за которой текст мог отображаться некорректно — теперь вы точно будете знать, за что вас выгнали (например, за RDM), и сможете с полным основанием посыпать голову пеплом.

Исправление артефактов на картах AMD в режиме Bindless

После объединения батчинга интерфейса и новой системы теней мы столкнулись с проблемами графических артефактов на видеокартах AMD.



Мы перевели шейдеры на использование bindless-текстур. Они отличные, но требуют явной пометки с помощью NonUniformResourceIndex в случаях, когда ресурсы не являются единообразными (что составляет 99% нашего кода). Выяснилось, что использование этой конструкции в качестве аргумента функции не давало эффекта — ее нужно было применять непосредственно в дескрипторной куче.

Решение оказалось элегантным: если нам нужно использовать NonUniformResourceIndex почти всегда, мы просто интегрировали его внутрь Bindless::GetTexture2D( TextureID ). Теперь разработчикам не нужно ломать над этим голову. Если возникнет необходимость в специальном варианте для единообразных индексов, мы его добавим.

Артефактов на AMD больше нет.

Переработка медиа-фреймворка


Изначально мы использовали FFmpeg как простое и быстрое решение для воспроизведения медиа, но понимали, что это «ящик Пандоры» с точки зрения лицензирования кодеков.

Мы отказались от зависимости от FFmpeg. Вместо поддержки всех возможных форматов мы сфокусировались на наиболее востребованных: AV1, WebM и Opus.

В дальнейшем мы поддерживаем следующие форматы и кодеки:

Видео

  • Декодирование: VP9, AV1, анимированный WebP, H.264 (только Windows через MMF)
  • Кодирование: VP9, AV1, анимированный WebP
  • Контейнеры: .webm, .mp4
Аудио
  • Декодирование: Opus, FLAC, MP3, WAV/PCM, AAC (только Windows через MMF)
  • Кодирование: Opus, WAV/PCM
  • Контейнеры: .ogg, .wav, .flac, .mp3, .opus
Сетевое воспроизведение: HTTP/HTTPS

Примечание: Декодирование H.264 и AAC доступно на Windows через Media Foundation. При создании игр с видеоконтентом мы настоятельно рекомендуем использовать AV1 или VP9.

Дополнительная документация доступна здесь: https://sbox.game/dev/doc/media/

Если вы считаете, что какого-то важного формата не хватает — создайте обращение. Если кодек широко распространен, мы можем его добавить, но поддерживать абсолютно всё мы не планируем.

Backend-кодирование в AV1

Вслед за изменениями медиа-фреймворка мы оптимизировали процесс кодирования видео в нашей мастерской. Ранее использовался H.264 в MP4, теперь мы перешли на AV1 в WebM и начали перекодирование всей существующей библиотеки.

Ниже приведены сравнительные показатели видео из наших популярных игр.

  Dark Descent (1080p 60fps, 27.8s)
   ║ Вариант │ MP4 Размер │ AV1 Размер │ Экономия │ MP4 SSIM │ AV1 SSIM ║
   ║ High    │  41.80MB │  16.29MB │  -61%  │  0.9719  │  0.9538  ║
   ║ Medium  │  17.65MB │   9.93MB │  -44%  │  0.9598  │  0.9535  ║
   ║ Low     │   3.41MB │   3.02MB │  -11%  │  0.9284  │  0.9499  ║

  Sausage Survivors 2 (1080p 30fps, 24.6s)
   ║ Вариант │ MP4 Размер │ AV1 Размер │ Экономия │ MP4 SSIM │ AV1 SSIM ║
   ║ High    │  12.94MB │   5.99MB │  -54%  │  0.9889  │  0.9603  ║
   ║ Medium  │   6.11MB │   3.31MB │  -46%  │  0.9835  │  0.9551  ║
   ║ Low     │   1.39MB │   1.00MB │  -28%  │  0.9638  │  0.9479  ║

  Sandbox (720p 50fps, 21.2s)
   ║ Вариант │ MP4 Размер │ AV1 Размер │ Экономия │ MP4 SSIM │ AV1 SSIM ║
   ║ High    │   8.45MB │   6.49MB │  -23%  │  0.9328  │  0.9760  ║
   ║ Medium  │   8.45MB │   5.65MB │  -33%  │  0.9328  │  0.9741  ║
   ║ Low     │   1.53MB │   1.46MB │   -5%  │  0.9135  │  0.9700  ║
Итоги:
  • Размер файлов: меньше на 5–61% по всем направлениям, наиболее заметный выигрыш при высоком битрейте в 1080p.
  • Качество: Все варианты AV1 сохраняют показатель SSIM выше 0.95 (отличный результат). В случае с Sandbox качество даже значительно выросло.
  • Наихудший сценарий: High-настройки в Sausage Survivors 2 просели с 0.989 до 0.960 SSIM. Метрически это заметно, но визуально качество остается на высоком уровне при двукратном уменьшении размера файла.

Финансовая прозрачность

Я обновил наши открытые финансовые метрики, добавив детализацию расходов: операционные затраты, зарплаты, стоимость серверов, налоги, фонд Play Fund — теперь всё на виду.

Кто-то сочтет такую прозрачность безумием, ведь мы показываем и прибыль, и убытки. Но я уверен, что польза перевешивает риски: сообществу важно видеть жизнеспособность платформы. Мы ориентированы не на сиюминутную выгоду, а на долгосрочное развитие.

Оптимизация батчинга интерфейса (UI)

На прошлой неделе мы внедрили батчинг интерфейса, что привело к существенному снижению draw calls и росту FPS. Изменения были масштабными и затрагивали сложные системы слоев и смешивания панелей. Разумеется, что-то пошло не так, но теперь мы всё исправили. 💪

Режимы наложения (Blend Modes)

Самой заметной проблемой стала некорректная работа режимов наложения. Текст должен был рендериться с использованием premultiplied alpha, но этого не происходило, что портило внешний вид. Особенно сильно это было заметно в инвентаре Sandbox.



Отложенный батчинг (Deferred Batching)

Исправление режимов наложения сломало сам процесс батчинга. Мы использовали immediate-метод: каждый фрагмент текста принудительно сбрасывал очередь, нарушая пакетную обработку.

Потребовался новый подход: отложенный батчинг. Сначала система собирает все элементы, сортирует их по Z-индексу, слою и режиму наложения, а затем выполняет рендер в оптимизированном порядке.

На изображениях показано:
  1. Immediate-батчинг с неверными режимами смешивания.
  2. Immediate-батчинг с правильными режимами смешивания.
  3. Отложенный батчинг с правильными режимами смешивания.

Обновление системы групп


Группы (Party) в S&box существуют давно, но на этой неделе мы полностью переработали их UI, интегрировали с новыми системами и убрали лишнюю сложность.

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

Группы — самый простой способ весело провести время в s&box. Зовите друзей, и они автоматически последуют за вами на любой сервер. Попробуйте! 🥳

Вторая волна оптимизации AO

Завершён второй этап оптимизации Ambient Occlusion (AO). Теперь AO рассчитывается в половинном разрешении, что делает его в 4 раза быстрее при сохранении прежнего количества сборок (или в 16 раз быстрее на низких настройках с четверть-разрешением). Апскейлинг позволяет добиться идентичной картинки — стандарт индустрии.

Предыдущая версия пространственного шумоподавления (denoising) выглядела ужасно, поэтому я полностью переписал денуайзер; теперь результат не уступает временным методам (temporal).

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

А еще мы починили кнопку отключения AO — теперь она действительно его отключает. 🙈

Источник

Читайте также