March Update

The Playfund system is now working end to end. We did the February payout, and people got their money.

The payout threshold is $100. If you haven't earned $100, then it'll roll over to the next month. We can pay out in a number of different ways (paypal, echeck, bank transfer) to a ton of different countries.

This was the last big piece of this puzzle, and now that it's working, we can iterate and improve it.
Most texture based components can be animated with texture sheets, I gave the same treatment to decals.

To support this, I extended decals with an extra data buffer which is future proof for whenever we need to add more features without breaking older shaders.
The audio occlusion previously used a collision group called "sound" to determine what surface should occlude. By default this hit the "solid" layer. But that was stupid, because all physics automatically get a solid tag. So it hit everything, including the player controller's physics. So technically no sound could reach your ears.

So now you define the collision tags it should hit on the Mixer. Each mixer can override these settings, so you can have sounds that go through some objects, and sounds that don't. The default now is that they hit any object tagged with "world". All the static walls created by Hammer are automatically tagged as "world".
More progress has been done on our version of Datacore (Now Depot), Progressing through what assets are needed and freshening up old assets.
We've enabled ReadyToRun on our published builds. This means that it's pre-compiling the code in our c# dlls instead of using JIT to compile it just before it's used. The end result is that it reduces any micro-stutters you'd see when doing things for the first time.

The only real downside is that the dlls are a bit bigger.
I added a couple more sculpt modes this month.

Smooth
Simple Noise

Assets weren't being fully preloaded. This gave a small hitch when you did something like creating a prefab for the first time.. because it was loading all the models and textures associated with it.

Now they're preloaded, so everything is in memory, ready to be used. You can diagnose these hitches using the convar resource_log. Set it to 1 to log whenever a resource loads.
Mixers can define the maximum amount of sounds that are allowed to play on them at one time. If more voices than are allowed want to play, it'll only play the newest.

This is a performance strategy. You can divide your sounds to go to different mixers, so you can limit particularly common and inconsequential sounds (like impact sounds), while always allowing high priority sounds (like gun shots, speech).
Our Post Processing effects system is all driven by components & our managed pipeline, we removed the last bits that used Source 2's native post-processing system.

Bloom was still using that system, this gave me the opportunity to rework bloom entirely and ends up looking much better and simpler by using our texture downscaler.
The new effect can look very faint or as overblown as you want.

While removing the C++ post process pipeline, I've done some other optimizations on some post processes, which should result in overall better performance as well.
We've been thinking about open source. Obviously, we can't open-source Valve's code, but we can open our C# code. And other than our obvious embarrassment over the state of it, I don't see any reason to keep it closed.

Our challenge here isn't the decision, it's how. How would we marry the native dlls with the open source c# repo. Do we use submodules (fuck no)? Do we do use subtrees (fuck knows)? Do we make each assembly its own nuget and go super modular (my head hurts)?

I just wanted you guys to know it's on the cards. I see no value in keeping it closed source, it's just about getting the logistics right so we don't end up in a nightmare.
Glass Shader & anything that requires a framebuffer copy was reworked so that the fetching is done at the same time we are about to draw the primitive and in the correct order, this fixes translucents not showing up on glass and gives the option for multiple things that uses refraction and blur to be drawn intersecting at once.
For our rendering pipeline we use Forward+ Rendering, it's great and fast, but unlike deferred we can't implicitly fetch some material information before we do our lighting pass, things like SSAO had surface information derived from depth, so was very blocky, and dynamic reflections was an entirely different pass.

In our rendering pipeline we use Depth Prepass which rasterizes all objects before main draw to reduce pixel shader overdraw, by calculating pixel information at the same pass we can have material information ahead of time and still retain the benefits of a Forward+ pipeline, all transparently while retaining the same API that ShadingModel uses with no significant overhead.

This greatly improves effects like SSAO and allows us to move Dynamic Reflections to be entirely a compute shader pass.


In any shader you can use Normals::Sample( int2 ScreenPosition ) to get accurate normal map information.
Most of the internals of Movie Maker were completely rewritten this month, cleaning up all the hacks I did while quickly iterating. The main public API that lets you read movie clips, define tracks, and bind those tracks to stuff in the scene seems to be in a good place right now. Here's how it looks:
The editor code has been completely overhauled too, aiming to make it easy to write new edit operations and to make sure it can support undo / redo without much memory overhead. Here's how that looks:
I added a "smoothen" operation to test out the new way of defining edits, which lets you apply a blur filter to recordings. You'll be able to define your own editing operations in your project's editor code, in case the ones we include don't cover your needs.
Speaking of recordings, I've made it super easy to record player controllers by adding relevant tracks automatically when you drag one into the track list. Ideally we'd want a clean way of describing which tracks to auto-populate like this for custom components.
Now that the big rewrites are just about done, I'd like to get it published as a package for people to start using in their projects. After that I'll iterate based on your feedback, and I'm excited to see where we'll take it together.
Cylinder traces are now supported, this avoids having to create a cylinder hull shape approximation to trace with.

Shape traces can now optionally request their hit point, these are optional because they're not always needed and takes a bit more processing to calculate.
As we move closer to release we're starting to think about how our release cycle will look. When we're released we can't be pushing every commit we make to the live version on Steam - because things will be too unstable.

What we're thinking will happen will be a main "stable" branch will generally be updated only once a month (other than urgent fixes). 

Then we will have a staging branch that will receive what will likely be daily updates, which at the end of the month all get bundled together and pushed to the stable main branch.

What we want to build is a system where developers test their games on the staging branch. While we will always avoid breaking games, I think it's inevitable that we will have pain days every now and then. 

This is something we're putting a lot of thought into right now.
As you can tell, we're kind of slowing down on the flashy stuff. We're now rounding all the corners off, making what we have work better.

Getting the PlayFund stuff working end to end was a good achievement for me. We now have a fully legitimate way for creators to make money in s&box. And it's working. Now we know it works, we've started increasing the fund - so everyone will make more.

We're going to do our thing and keep steadily improving things over the next few months. Thanks to everyone who is helping us out by making suggestions and reporting issues - you're helping us make a much better engine.
trophy 1160
Apr 2021 186 posts
trophy 305
Oct 2021 18 posts
thanks
trophy 2070
Sep 2022 24 posts
Another month of peak
trophy 480
Feb 2024 16 posts
G+ yesterday edited yesterday
https://sbox.game/f/off-topic/458/1
wow s&box is truly the future
trophy 1650
Apr 2021 28 posts
Awesome work as usual.

Looking forward to finally getting a staging branch and just having big monthly updates to stable.
trophy 1130
Aug 2022 72 posts
marching to success as we speak
trophy 155
Jul 2022 8 posts
Presumably, the end goal before release would be the addon/plugin/modding system, and that would come alongside the Sandbox game, right?
trophy 0
Jul 2024 8 posts
I have a work project that uses submodules and it's a pain. On a similar project that used SVN we used externals to split the code base up largely because we failed to plan ahead with the folder structure, but also because we wanted to have a shared framework between multiple projects. With SVN externals multiple projects could reference and use this framework. So with a new framework I tried to set up GIT the same way. Submodules are far more limited since you have to pull in a whole repo and not just a specific folder or file. So I end up having to split into multiple repos for each folder I would want to pull in which sucks. I definitely need to figure out a better way to do it, only way I can think of is leveraging symlinks to pull in a full repo while cherry picking specific folders to include in specific locations. But I am not sure how well this would work in practice, especially on Windows.
trophy 5
Jul 2024 1 post
Great!
trophy 0
Oct 2024 1 post
Awesome!
trophy 835
Sep 2021 61 posts

Not bad

The point with the Open Source solution is very interesting: will we be able to do Custom Editor, will we be able to do our own multiplayer and how open will everything be? I think for Standalone games it will be a good solution, but for platform nothing much will change

The first payments are very cool! Finally developers can earn money, but if FP will make Private Server Code it will be even better

Waiting for news about sandbox game (gmod 2), about the contract with Valve, and then the release
trophy 95
Aug 2022 31 posts
Thanks for all the hard work, love how things are turning out.
trophy 375
Mar 2025 2 posts
I really can't wait until full release. Over time this'll 100% beat gmod.
trophy 2175
Jul 2022 1 post
hell yeah brother
trophy 155
Aug 2021 12 posts
Terrain tools are looking pretty cool, wonder what artworks are going to created using it
trophy 635
Sep 2021 9 posts
1. Is animated decals as way to show player where his shot landed, a good idea?
2. Making game open source will not open open gates for cheaters?
3, New SSAO look greate!
trophy 375
Mar 2025 1 post
I'm new to S&box (started playing recently) and I really like how personal these updates sound. I really hope this game does well and gets more players. Only small complaint is I'd really like lower graphics options, some of the games are hard to run on my old-ish gtx 1050ti pc lol
trophy 0
Jan 2025 1 post
news about the market? or skins?
trophy 155
Sep 2021 1 post
Good job, Garry and the Facepunch team. I see a great future in this product

About open source. On the one hand, it's good that we will have more open source and will even be able to participate in the development. On the other hand, I feel a certain dishonesty, knowing how much you have worked on the engine. I would ideologically agree to an "add-on" on top of the engine. Relatively speaking, there are several levels. 1. Engine (your code) - 2. (the part of the engine that is open for editing, like different shaders) - 3. the rest of what we have now

But again, I think the current architecture is comfortable. And before switching to open source, it's better to put it in the back drawer after the release of the "game". And focus on the development of the engine itself, as well as the standalone version
trophy 0
Mar 2025 3 posts
Lets go! 
trophy 50
Dec 2023 1 post
Its very difficult to run s&box on gtx960,its run out vram,but it is still wonderful update,new SSAO its looks great,im expect final release will fix vram issues 
people
Log in to reply
You can't reply if you're not logged in. That would be crazy.