sbox
April 2

sbox — Обновление 01.04.2026

📦 Цена игры - $20, критерии у кого отнимут игру, релиз 28 числа, посещение Dreamhack, удаление теней из Source 2, сохранения в Garrys mod 2, весь апрель для оптимизаций и подготовки к релизу

Оригинал (ссылка)

Sandbox Game: Камера

Автор: devultj

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

Sandbox Game: Hoverball

Автор: devultj

Теперь вы можете прикреплять ховербалы к своим конструкциям, чтобы летать!

Sandbox Game: Сохранения

Автор: Carson

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

Sandbox Game: Итоги

Автор: devultj

Мы обновляем игру (Sandbox Game, он же Garry's Mod 2) почти каждый день, так что если вы заметили что-то, что раньше не работало, это, вероятно, было исправлено. В последние недели мы сосредоточились на стабильности, поэтому не так много новых функций.

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

Dreamhack Бирмингем

Автор: matt

Facepunch спонсировала DreamHack Birmingham на выходных. Мы присутствовали и имели стенд, демонстрируя s&box, позволяя людям попробовать платформу, Sandbox, Sausage Survivors 2 и игры от сообщества.

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

Тени

Автор: matt

Когда мы впервые получили Source 2, это была ветка Half-Life: Alyx, единственным динамическим светом был ваш фонарик. Мы добавили больше, но это никогда не планировалось использовать таким образом, у нас не было контроля над теневым отображением, и было сложно что-либо с этим сделать.

Я удалил весь код теневого отображения C++ от Valve и написал новый теневой маппер на C#. Зачем переписывать?

  • Наш C# и HLSL это открытый исходный код, любой может увидеть, как это работает, форкнуть и улучшить это.
  • Полное владение: мы знаем, как работает каждая часть.
  • Меньше кода, проще, легче следовать и меньше шансов на ошибку.

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

Тени: Bindless

Автор: matt

Одно из ключевых изменений в тенях — переход от традиционного атласа теней к bindless теневым картам.

Атлас теней — это большая предвыделенная текстура (8192 x 8192), которая содержит все тени в сцене, при 32 битах эта текстура занимает 256 МБ видеопамяти. Если вы играете в игру, которая не требует много теней, это пустая трата, если вы играете в игру или на карте, где нужно много теней, вы можете потенциально исчерпать пространство.

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

Если ваша игра не использует тени, поздравляем, вы вернули 256 МБ видеопамяти!

Тени: Настройки каскада

Автор: matt

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

Тени: Жёсткость

Автор: matt

Каждый свет теперь может контролировать жесткость его теней от 0 до 1.

Тени: Baked

Автор: matt

Свет размещенные в Hammer с настройкой Baked, создавали смешанные тени, что было неправильно. Мы изменили поведение настройки прямого света.

  • Baked: запеченные тени, ничего динамического не рендерится
  • Dynamic: без запеченной тени, все рендерится динамически
  • Stationary: использует запеченную карту теней и накладывает динамические тени сверху

Тени: Настройки

Автор: matt

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

Вот как выглядят разные качества фильтров:

Перезапись данных потока Vulkan

Автор: Lorenz

Вулкан-рендерер Source 2 разработан для использования с очень ограниченным количеством потоков.

Однако в s&box .NET может выполняться асинхронный код из любого потока, нам нужно использовать методы рендерера из сотен различных потоков, при этом сохраняя скорость и стабильность.

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

Теперь это решено, что улучшает стабильность движка.

Оптимизация больших сетевых нагрузок

Автор: Lorenz

Мы внесли несколько изменений в обработку больших сетевых нагрузок (ObjectCreate & Refresh Messages). Большая часть улучшений связана с оптимизацией нашего процесса сжатия, что снижает использование ЦП и пропускной способности на клиенте и сервере:

  • Сервер сжимал транслируемые сообщения один раз на соединение, а не на каждое сообщение, что приводило к ненужной нагрузке на ЦП.
  • Теперь мы удаляем нулевые значения из JSON перед сжатием. Это не сильно уменьшает размер нагрузки, но заметно снижает накладные расходы на сжатие/распаковку как для клиента, так и для сервера.
  • Ранее мы разбивали большие нагрузки на части, а затем сжимали каждую часть отдельно. Изменение порядка операций значительно улучшает ситуацию, особенно на стороне клиента.

Вот некоторые отобранные бенчмарки (~1MB нагрузка 1000 GOs & 2000 компонентов):

Compress   with nulls                       0.210 ms/op (old)
Compress   without nulls                    0.165 ms/op (new, 1.27x faster)

Decompress with nulls                       0.232 ms/op (old)
Decompress without nulls                    0.074 ms/op (new, 3.13x faster)
Server chunk-first:                         0.85 ms/op  (old)
Server compress-first:                      0.88 ms/op  (new, ~same)

Client chunk-first:                         1.16 ms/op  (old)
Client compress-first:                      0.34 ms/op  (new, 3.4x faster)

Поддержка non-QWERTY клавиатуры

Автор: matt

Если вам не повезло и вы француз, скорее всего, у вас клавиатура AZERTY, а у немца - QWERTZ. В играх, где по умолчанию назначены клавиши WASD, вам всегда придется переназначать на ZQSD... 😫

Мы сделали так, чтобы наша система ввода использовала скан-коды, что стандартизирует клавиши ввода по позиции, а не по названию. Это значит, что когда игра назначает что-то на клавишу W, если у вас клавиатура AZERTY, это будет автоматически назначено на клавишу Z.

Редизайн Hub

Автор: Alex

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

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

ModelDoc: Hull из мэшей

Автор: Layla

Холлы из рендера теперь могут создавать один холл из ВСЕХ рендер-мешей, теперь есть возможность создавать холл для каждого меша или для каждого элемента (каждый набор связанных граней)

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

Итоги

Автор: matt

Все продолжает складываться, мы играем в Sandbox каждый день, и он начинает выглядеть очень цельно. Строим конструкции, экспериментируем, делаем скриншоты для нашей страницы в Steam.

Мы пытались тихо анонсировать нашу дату выхода — 28 апреля, но, похоже, все очень взволнованы.

До этого мы отзовем всех, кто не играл много в последнее время, разрабатывал игры или покупал скины.
А затем мы выйдем в продажу за $20.

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

💙 Русскоязычное сообщество s&box

Changelogs

🎁Added

  • New C# shadow mapper, fully replacing Source 2's native shadow mapper
  • Bindless per-light shadow maps
  • Directional light configurable cascade counts
  • Per-light shadow hardness
  • User quality settings for shadows
  • ModelDoc hulls from meshes now supports per-mesh and per-element hull generation, allowing better collision when saving map meshes with mixed hull and mesh collision types
  • HtmlPanel now supports ordered and unordered lists
  • Footstep sounds for glass surfaces
  • Mesh element selection now supports undo/redo in the editor
  • New hub page layout with smarter game cards showing upvotes/downvotes and active players, condensed friend activity grouped by game, and achievements sorted by completion percentage
  • Movie recordings can now be imported from any game into a blank project, and games can disable demo recording on clients

🧼Improved

  • Input system now uses scan codes for gameplay input, making the game usable on non-QWERTY keyboard layouts (e.g. AZERTY) without rebinding — key glyphs are translated to local key names
  • Vulkan per-thread data rewritten with a dynamic slot pool that bounds memory usage and eliminates potential out-of-bounds access from unbounded thread indices
  • Pixel shaders are now stripped for opaque objects during shadow and depth passes, reducing GPU work
  • Physics hull creation is more robust, routing through CQuickHullBuilder to avoid potential infinite loops with coplanar points and adding support for planar geometry
  • Network broadcast now encodes the wire payload once instead of per-connection, and large messages are compressed before chunking — client decompression is ~3.4x faster
  • Network serialization omits null values, reducing JSON processing overhead and improving compression/decompression speed
  • Sprite system optimized to perform a single GPU upload instead of one per group, eliminating upload overhead
  • RadiusDamage batches and parallelizes LOS traces with reduced allocations, improving heavy explosion processing from ~10s to ~2s
  • Heartbeat ping/pong switched to unreliable channel, eliminating head-of-line blocking under packet loss
  • Movie recording performance improved by avoiding reflection in hot paths, reducing per-frame recording cost

🪛Fixed

  • Potential infinite loop in PolygonMesh.Rebuild with fractional/coplanar vertex positions
  • Memory leak in DeltaSnapshotSystem where pooled snapshot IDs were not cleared before returning to the pool
  • OutOfRangeException in Rigidbody when Bodies and BodyTransforms sync lists arrive independently
  • "Lobby Disbanded" spam, lingering socket, and stuck loading screen when host disconnects mid-join
  • Modals not closing when joining a game, server, or lobby
  • Lingering error toast popups not dismissing across game/menu context switches
  • Atmosphere sky shader not using the new single sunlight path
  • IgnoreGameObjectHierarchy not applying to child objects
  • Client hotload not clearing reflection type cache, causing errors after server-side code changes
  • Damage falloff being inverted in RadiusDamage
  • Movie recording of TextRenderer, NaN rotations, and target creation edge cases

🚯Removed

  • Deprecated OnDirty, MakeDirty, and OnPropertyDirty in favor of field-backed properties