sbox — Обновление 01.04.2026
📦 Цена игры - $20, критерии у кого отнимут игру, релиз 28 числа, посещение Dreamhack, удаление теней из Source 2, сохранения в Garrys mod 2, весь апрель для оптимизаций и подготовки к релизу
Оригинал (ссылка)
Sandbox Game: Камера
Мы переработали камеру от третьего лица, чтобы она была гораздо плавнее, так что находиться в транспортном средстве приятно.
Sandbox Game: Hoverball
Теперь вы можете прикреплять ховербалы к своим конструкциям, чтобы летать!
Sandbox Game: Сохранения
Теперь в Sandbox Game есть сохранения, чтобы вы могли сохранять и загружать целые игровые сессии. Они работают в одиночной игре и многопользовательском режиме, и будут отслеживать карту, игроков, все предметы и сущности и т.д.
Sandbox Game: Итоги
Мы обновляем игру (Sandbox Game, он же Garry's Mod 2) почти каждый день, так что если вы заметили что-то, что раньше не работало, это, вероятно, было исправлено. В последние недели мы сосредоточились на стабильности, поэтому не так много новых функций.
Мы всегда ждем обратной связи, так что не стесняйтесь делиться своим мнением на форумах, а также показывать нам свои конструкции и скриншоты!
Dreamhack Бирмингем
Facepunch спонсировала DreamHack Birmingham на выходных. Мы присутствовали и имели стенд, демонстрируя s&box, позволяя людям попробовать платформу, Sandbox, Sausage Survivors 2 и игры от сообщества.
Это был огромный успех, многие люди возвращались снова и снова на еще один раунд Sausage Survivors 2. Мы получили ценную обратную связь о том, как люди впервые используют платформу. И было здорово поддержать наше местное игровое сообщество, где мы находимся.
Тени
Когда мы впервые получили Source 2, это была ветка Half-Life: Alyx, единственным динамическим светом был ваш фонарик. Мы добавили больше, но это никогда не планировалось использовать таким образом, у нас не было контроля над теневым отображением, и было сложно что-либо с этим сделать.
Я удалил весь код теневого отображения C++ от Valve и написал новый теневой маппер на C#. Зачем переписывать?
- Наш C# и HLSL это открытый исходный код, любой может увидеть, как это работает, форкнуть и улучшить это.
- Полное владение: мы знаем, как работает каждая часть.
- Меньше кода, проще, легче следовать и меньше шансов на ошибку.
Мы увидели, как это исправляет критические ошибки, такие как полное исчезновение теней в Construct, но мы также видим небольшие улучшения производительности без каких-либо реальных изменений в поведении.
Тени: Bindless
Одно из ключевых изменений в тенях — переход от традиционного атласа теней к bindless теневым картам.
Атлас теней — это большая предвыделенная текстура (8192 x 8192), которая содержит все тени в сцене, при 32 битах эта текстура занимает 256 МБ видеопамяти. Если вы играете в игру, которая не требует много теней, это пустая трата, если вы играете в игру или на карте, где нужно много теней, вы можете потенциально исчерпать пространство.
Переход на bindless карты означает, что мы можем динамически выделять отдельные теневые карты, нам не нужно беспокоиться о том, где в атласе мы можем рендерить, пытаясь управлять тем, что происходит, если у нас заканчивается место и т.д.
Если ваша игра не использует тени, поздравляем, вы вернули 256 МБ видеопамяти!
Тени: Настройки каскада
Направленные источники света теперь могут настраивать свои каскады, указывая, сколько их нужно и где они будут разделяться.
Это отлично, если вы работаете над игрой с видом сверху с ограниченным обзором, вам понадобится всего 1 каскад для всех ваших теней, что повысит производительность.
Тени: Жёсткость
Каждый свет теперь может контролировать жесткость его теней от 0 до 1.
Тени: Baked
Свет размещенные в Hammer с настройкой Baked, создавали смешанные тени, что было неправильно. Мы изменили поведение настройки прямого света.
- Baked: запеченные тени, ничего динамического не рендерится
- Dynamic: без запеченной тени, все рендерится динамически
- Stationary: использует запеченную карту теней и накладывает динамические тени сверху
Тени: Настройки
Ранее у нас не было способов настроить параметры производительности теней, теперь у нас есть множество конваров для управления максимальными тенями, максимальным количеством каскадов, качеством фильтра теней, максимальными разрешениями и многим другим. Эти параметры теперь также глобально настраиваются в меню графики.
Вот как выглядят разные качества фильтров:
Перезапись данных потока Vulkan
Вулкан-рендерер Source 2 разработан для использования с очень ограниченным количеством потоков.
Однако в s&box .NET может выполняться асинхронный код из любого потока, нам нужно использовать методы рендерера из сотен различных потоков, при этом сохраняя скорость и стабильность.
Ранее у нас было хакерское решение, которое росло без ограничений, что приводило к утечкам памяти и сбоям.
Теперь это решено, что улучшает стабильность движка.
Оптимизация больших сетевых нагрузок
Мы внесли несколько изменений в обработку больших сетевых нагрузок (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 клавиатуры
Если вам не повезло и вы француз, скорее всего, у вас клавиатура AZERTY, а у немца - QWERTZ. В играх, где по умолчанию назначены клавиши WASD, вам всегда придется переназначать на ZQSD... 😫
Мы сделали так, чтобы наша система ввода использовала скан-коды, что стандартизирует клавиши ввода по позиции, а не по названию. Это значит, что когда игра назначает что-то на клавишу W, если у вас клавиатура AZERTY, это будет автоматически назначено на клавишу Z.
Редизайн Hub
Страница хаба была запутанной, я немного переработал её, добавив более умные карточки и сгруппировав активность друзей. Уверен, мы ещё что-то изменим.
- Новые карточки, которые немного умнее и показывают информацию о голосах и активных игроках.
- Активность друзей теперь сжата и красиво сгруппирована, что делает её более читаемой. Мы используем аватары вместо иконок игр, показывая онлайн-состояние, позволяя присоединяться к друзьям и т.д.
- Достижения отсортированы по проценту выполнения, и теперь мы фильтруем игры без заработанных достижений.
ModelDoc: Hull из мэшей
Холлы из рендера теперь могут создавать один холл из ВСЕХ рендер-мешей, теперь есть возможность создавать холл для каждого меша или для каждого элемента (каждый набор связанных граней)
Это позволяет улучшить коллизию при сохранении мешей карты, поддерживаются выбранные меши карты с сочетанием типов коллизии холла и меша в сохраненной модели.
Итоги
Все продолжает складываться, мы играем в 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