[p]A new update has been released, you can view the full changes on our blog post.[/p][p]
https://sbox.game/news/update-26-04-22[/p][p][/p][p][/p][p][/p][p]Here's some highlights from the blog.[/p][p][/p]
Sandbox: RT Screens
[p]You can link cameras to TVs now, great for contraptions, or just generally messing around.[/p][p][/p][p][/p]
Sandbox: Contraption Weapons
[p]This is a feature I added a few weeks back, but it really shines now with the addition of the Rocket Launcher, and support for the Physics Gun.[/p][p]This means your contraptions can shoot rockets..[/p][p][/p][p][/p]
Better Disconnect Feedback
[p]Sometimes, when trying to join a game, you'd get thrown back to the menu without really knowing why or at what point things went wrong. So this week, we've straightened out the connection flow, formalised things under the hood, and added a bunch more feedback.[/p][p][/p][p]Players will now see big new message boxes when they're disconnected from a server, or when a connection attempt fails, with fairly descriptive reasons. This is how we show kick messages now too, and we've fixed an issue that would sometimes make these messages appear garbled, so you'll know when you've been kicked for RDMing and to hang your head in shame.[/p][p][/p]
Bindless AMD Artifact Fixes
[p]After merging UI batching and new shadows we've been seeing some minor to intense artifacting on AMD cards.[/p][p][/p][p]We switched all these shaders to use bindless textures, which are great but needed explicit marking with [c]NonUniformResourceIndex[/c] to work in non-uniform cases (which were 99% of our cases…). Whilst we were marking these like [c]Bindless::GetTexture2D( NonUniformResourceIndex( TextureID ) )[/c] they weren't actually doing anything as a function parameter, they needed to be done on the descriptor heap itself.[/p][p]The solution was simple, if 99% of the time we needed to be doing [c]NonUniformResourceIndex[/c] we might as well do it inside [c]Bindless::GetTexture2D( TextureID )[/c] so people don't have to bother with what it means. If we have justification to we can do a variant for when you know you have a uniform resource index.[/p][p][/p][p]No more artifacts on AMD.[/p][p][/p]
Media Framework Rewrite
[p][/p][p]We've removed FFmpeg and replaced it with our own implementations of a few codecs, we now only support the following formats: VP9, AV1, animated WebP, H264.[/p][p]We've also reworked our workshop to serve videos in the AV1/WebM format, this means videos are about 50% smaller and load faster.[/p][p][/p]
Finance
[p][/p][p]I've updated our
open finance metrics to be even more detailed, adding our costs for running s&box as a company, salaries, server costs, taxes, play fund, it's all there.[/p][p][/p][p]People will say it's crazy to be this transparent, showing how much we're making or even losing - I think the benefits outweigh the negatives, it's important people see the sustainability of the platform. We're not after short term financial success here, we're here for the long haul.[/p][p][/p]
UI Batching Fixes
[p]We got
UI Batching in last week which came with a huge drop in draw calls and a big increase in FPS. This was a huge change for the huge amount of things we could do with our UI system and all the various ways you can layer and blend your panels together - obviously some things broke, but we've fixed them. ๐ช[/p][p]
Blend Modes[/p][p]The most noticable bug was blend modes weren't being set correctly, our text renders should've been rendering in a premultiplied alpha blend mode but weren't, creating very unappealing text. This was also noticable in the Sandbox mode inventory.[/p][p][/p][p]
[/p][p]
Deferred Batching[/p][p]But fixing this had broken our batching all together, we were doing immediate mode batching, every bit of text was causing a flush and breaking the batch.
We needed a new approach. Deferred collects it all first, sorts it into groups with a sort key derived from the z-index, the layer, the blend mode, then flushes in the new sorted order.[/p][p][/p][p]The images show:[/p][*][p]Immediate batching with improper blend modes[/p]
[*][p]Immediate batching with proper blend modes[/p]
[*][p]Deferred batching with proper blend modes[/p]
[p][/p]
Party Time
[p][/p][p]Parties have been a thing in S&box for ages, this week we've given them a pass to refresh the UI, better integrate them with newer systems and features, and cut the faff.[/p][p][/p][p]Before now, parties were a bit tucked away, accessed from a creation menu on the main menu footer. Now, you're basically always in one. You can invite a friend right off the bat, and we'll automatically set up the real party behind the scenes.[/p][p][/p][p]There's been a bunch more changes to buff up the party experience, too: You now need to be party leader to be able to start and join games. You can kick players from your party. You can invite friends and accept their invites directly from the Steam overlay. Party voice chat is back. And just like for game servers, we've added more player-facing feedback when joining and creating a party - maybe it doesn't exist anymore, maybe it's full, now you'll know.[/p][p][/p][p]Parties are a quick and easy way to experience games on s&box, and they work just like you'd expect. Invite your mates, and they'll follow you right into any game on the platform. Give it a go! ๐ฅณ[/p][p][/p]
AO Optimizations #2
[p]Done the second part of AO optimizations, AO runs at half resolution now, so it's 4x faster while keeping same sample count as previously, 16x if on low preset (quarter-res), the upscale makes it look pretty much the same, going in line with what others do.[/p][p]The optimizations from previously made spatially denoised AO look like shit, so I've completely redone the denoiser it uses, and it looks as good as the temporal approach.[/p][p]We deprecated temporal denoising, it's all done in one frame -
we want to prioritize pleasent gameplay experiences by focusing on image clarity and stability instead of photorealism and excess graphics fidelity.[/p][p][/p][p][/p]
๐ Added
- [p]Automatic LOD generation in ModelDoc, allowing users to build LOD chains from a single mesh. Auto-generated and handcrafted LODs can be mixed.[/p]
- [p]Spritesheet Importer for the Sprite Editor with automatic strip detection, row/column selection, and persistent padding settings.[/p]
- [p]Bridge Tool for the map editor, enabling quick bridge geometry creation between surfaces.[/p]
- [p]Clip Tool cycle mode for toggling between clip sides without restarting the operation.[/p]
- [p]SoundFile.FromMP3 API for loading audio from MP3 files in mounts.[/p]
- [p]SoundFile.FromPCM API for loading raw PCM audio data without creating a fake WAV wrapper.[/p]
- [p]Editor option to hide GameObjects in the scene view while keeping them visible in the hierarchy.[/p]
- [p]MovieRecorderOptions.BufferDuration property for ring buffer recording mode, with `movie_save` command to save without stopping.[/p]
- [p]Foliage Subsurface Scattering using an improved Frostbite-based SSS term, restoring foliage rendering broken in the Shadows2 update.[/p]
- [p]Ctrl+A shortcut now selects all faces in texture mode, matching face mode behavior.[/p]
- [p]Whitelisted `System.Threading.Tasks.TaskCreationOptions` for sandbox use. Thank you LeQuackers![/p]
- [p]Apply-and-continue shortcut (Spacebar) for the Clip Tool, allowing consecutive cuts without exiting the tool. Thank you @trende2001![/p]
- [p]Background Audio toggle in Audio Settings. Thank you @drekunia![/p]
- [p]Sound file support for the NS2 mount, reading FMOD sound banks with PCM16 and MPEG formats. Thank you @nixxquality![/p]
[p]๐งผ Improved[/p]
- [p]Removed FFmpeg dependency entirely, and replaced them with other alternatives – reducing binary size by ~30MB and improving video export quality.[/p]
- [p]Movie Maker timeline grid rendering optimized from >10ms to <1ms by only repainting when the view changes.[/p]
- [p]Multiplayer party system improvements: Steam party invites now work, menu buttons restricted to lobby leader, player kick functionality, auto-leave when joining a different server, and better error messages.[/p]
- [p]Better disconnect feedback with formal disconnect messages, retry support for SteamId connections, and connection loading screen fixes.[/p]
- [p]GameClosedToast lifetime increased from 4 to 10 seconds, countdown pauses while hovered.[/p]
- [p]Mesh components now automatically add a world tag to their GameObject.[/p]
- [p]Bindless shader API now uses NonUniformResourceIndex by default, removing redundant explicit calls.[/p]
- [p]Upgraded Zio library to latest version, fixing a detected security vulnerability.[/p]
- [p]Menu UI/UX cleanup: GameCard activates on click, adjusted heading sizes, removed unused styles.[/p]
- [p]Line material now lazy loaded in a thread-safe way.[/p]
- [p]SceneCustomObjects now safe to run on non-main thread.[/p]
- [p]AssetSystem defers orphan deletion until parents are fully resolved, preventing incorrect asset removal during project load.[/p]
- [p]SpriteBatchSceneObject sprite data collection moved back to UploadOnHost, fixing single-frame sprite artifacts.[/p]
- [p]Physics filter component now creates its internal joint in OnStart, ensuring rigidbodies exist first.[/p]
- [p]Fast Texturing Tool settings now properly saved when the window is closed and undo scope is correctly disposed in all cases. Thank you @CarsonKompon![/p]
- [p]Editor Widget API: OnWheel renamed to OnMouseWheel for consistency with other mouse event callbacks. Thank you @RumBugen![/p]
- [p]Formatting for \[InlineEditor] in collections is now correct. Thank you @boxrocket6803![/p]
[p]๐ช Fixed[/p]
- [p]VR editor play/stop crash no longer occurs when toggling game mode.[/p]
- [p]Asset scan startup crash resolved.[/p]
- [p]Assets now correctly detect changes when activating mods.[/p]
- [p]UI VRAM leak fixed by removing threadlocal panel renderer and adding proper thread synchronization.[/p]
- [p]Sprite.BroadcastEvent type now displays correctly with proper \[EnumDropdown] attribute, and unnamed broadcast events render properly.[/p]
- [p]EnumControlWidget now correctly triggers OnChildValuesChanged.[/p]
- [p]HudPainter.DrawLine now handles colorspace (gamma correction) and blend modes correctly.[/p]
- [p]Menu fonts no longer disposed when unloading games, fixing garbled text in the overlay.[/p]
- [p]Menu no longer clears out when game load is cancelled or errors at certain points.[/p]
- [p]Foliage red flicker issues fixed, along with improved antialiasing.[/p]
- [p]ModelDoc Auto LOD fixes: ngon simplification, infinite loop in mesh list simplification, better tooltips and defaults.[/p]
- [p]Menu framerate limit setting now persists correctly. Thank you @RumBugen![/p]
- [p]Standalone startup timing event submission no longer throws a NullReferenceException. Thank you @RumBugen![/p]
- [p]SCSS inset values with commas no longer break shadow lists. Thank you @boxrocket6803![/p]
- [p]UI tooltip children now have pointer-events: none, and hover flicker on icon edges is resolved. Thank you @pedroforbeck![/p]
[p]๐ฏ Removed[/p]
- [p]FFmpeg dependency removed, replaced with free codec alternatives.[/p]
- [p]MPG123System removed from binding definitions.[/p]