Developer postOriginal post (opens in a new tab)

Update 26.09.15

A new update has been released, you can view the full changes on our blog post.

https://sbox.game/news/update-26-09-15

Painter

`Painter` is a small utility struct that replaces `HudPainter` and the panel rendering system. It's now used to render the whole panel system and you can use it to render things like UI, HUDs, panels and world panels manually using a common sense API.Shapes are generally SDF rendered so they are totally antialiased and beautiful.

We have the ability to draw Arcs, Arrows, Bezier Lines, Capsules, Circles, Credcents, Crosses, Hearts, Lines, Poly Lines, Polygons, Quads, Rects, Rings, Stars, Ticks and Triangles..

We support a bunch of different strokes. Inside, center and outside. Solid, dashed, dotted..

And fill can be a color, an image, a radial gradient, a linear gradient or a conic gradient..

Line rendering supports different miters, including bevel and round, with a miter limit..

This all uses a batching system under the hood, so performance is actually pretty insane. This demo is all rendered in one single draw call.

Open Video

Here's what the code looks like, in a component..

void Update()
{
using var painter = Camera.BeginHud();

var color = Color.Green;
painter.Fill = Fill.LinearGradient( Color.Red, Color.White, 45.0f );
painter.Stroke = Stroke.Solid( color, 3 );
painter.Circle( new Vector2( 100, 100 ), 50 );
}

This change also makes `IPanelDraw` now redundant, a you can now just override the `OnDraw( Painter painter )` function.

GPU Text Rendering

Text Rendering has been the oldest component of our engine, it worked well, but it had it's caveats, specially for being generated from the CPU, was blurry on any transform.

Since we are going to focus on using our UI system for tools, we ought to make text rendering awesome.

Continuing from my work from a few hackweeks back, I have fully implemented GPU Text Rendering based on the Lengyel algorithm to the engine while retaining all the current API, curves are passed to GPU and all drawn on the shader.

You don't need to do anything, it just works, supports CJK, emojis, and everything that the previous system supported, and looks unbelievably sharp even from a millimeter away

This ends up being significantly faster than our previous system while always looking awesome.

All still rendered using our UI renderer in one draw call

Host Migration

When the host leaves, their snapshot state now gets restored on the new host, host-only objects included. If your state survives a late join, it should survive host migration.

Running code doesn't carry over though, so anything mid-flight needs resuming on the new host. There are analyzers to help you check that your state and behaviour are migration safe.

You can find more detailed information in the docs.

Hover Cards

We added hover cards to the menu. Hover a game and you can quickly glance at the info you need to decide whether to play.

Open Video

We've also reworked the game modals and toasts elsewhere in the menu. Making game interactions like Reviews, Favorite, Hide Game... more visible and consistent.

Editor Quality Settings

Changing graphics settings in the editor previously meant launching a scene and opening the in game settings menu.

There's now a dropdown in the viewport controls to switch quality presets directly.

Block Party

Here's a new game using the 2d sprite system for you to check out:
https://sbox.game/facepunch/blockparty/

Open Video

It's got leaderboards with replays, a level editor with workshop support, gif exports, and some other fun features.

Map Mesh Flipping

Open Video

Block Tool - Align To Face

Open Video

Serialization Performance Improvements

GameObject cloning is now ~2.6x faster with about 38% fewer allocations in synthetic tests. Anything spawning prefabs at runtime benefits.

In our actual tests it's less significant because the main bottleneck here for cloning is spawning models collisions etc.. the actual serialization overhead of the cloning was already quite low.

Network snapshots are also cheaper on the host. Scene state is still captured on the main thread, but JSON, blob and packet encoding now runs on workers, so players joining or loading in cost the host a lot less.

Mac and Linux Improvements

A bunch of Mac and Linux improvements:

  • Mac fixes cover game-view input, editor DPI scaling, Finder folder opening and scene staging.
  • Geometry shader support fixes Highlight component crashes on Mac; procedural render callbacks also have a lifetime fix.
  • Code editor detection and the publish/export controls work on Mac and Linux.
  • Linux native builds use Steam Linux Runtime 4.0
  • Colour emoji fallback uses Twemoji on Mac and Linux.

Open Source Workflow

I've improved the open source workflow a bit more, adding a simpler Setup.bat and now Setup.sh for Linux & Mac.

The Setup.bat now has progress reporting, mainly for the download steps as you had no idea how much or how long you were downloading for before previously.

On top of that the setup now installs Git hooks - each time you pull or switch branch the download step is run automatically, meaning you don't have to run Setup.bat every time.

Storage Settings

Redesigned the storage settings page.

CSS: overscroll-behavior

I've implemented the CSS property overscroll-behavior which lets you both disable the edge bounce of scrolling and also prevent scrolling cascading to the parent panel.

Open Video

Changelog

🎁 Added

UI & CSS

Editor

Networking

  • Host migration analyzers - added diagnostics for unsynchronised state and pending host logic, enabled according to the project networking setting facepunch/sbox@b9ef291 by @lolleko

Menu

Rendering

Platform

🧼 Improved

UI & CSS

Performance

  • GameObject cloning - reduced cloning time and allocations; the commit benchmark reports approximately 2.6x faster cloning and 38% fewer allocations facepunch/sbox@d527633 by @lolleko
  • Snapshot encoding - moved JSON, blob and packet encoding for join, scene-load and migration snapshots onto workers while preserving per-connection send order facepunch/sbox@b21367e by @lolleko

Networking

  • Host migration - graceful host departures now hand off a snapshot to the next host, including host-only objects, snapshot state and replicated ConVars facepunch/sbox@ac95437 by @lolleko

Navigation

Editor

Menu

Platform

🪛 Fixed

UI & CSS

Editor

Navigation

Physics

Rendering

Networking

Menu

Platform

Characters

Build and release context

Steam update times within 24 hours of this post. Matching dates do not confirm which build it describes.

  • Build 25310193 · staging branch

    Steam updated · First observed

  • Build 25309516 · staging branch

    Steam updated · First observed

  • Build 25308255 · staging branch

    Steam updated · First observed