The Machinery Beta — June 2021 (version 2021.6)

Here at Our Machinery, we’re preparing for some off-keyboard time as summer is approaching fast in the Northern Hemisphere. Hope that you are all able to take some time off too. Maybe you’ll even have time to take a look at The Machinery. As always, we have a bunch of new features and bug fixes for you. We have more stuff coming down the pipe too, so stay tuned!

If you are already running The Machinery, this new release should pop up in your Downloads tab. Otherwise, get it from our beta download page and have a look at this quick introduction video. If you find bugs in this release or have requests for specific features, post them to our issue tracker. For more general discussions, hit us up on GitHub discussions or Discord.

Key highlights in this release are:

As always, we also have a number of smaller updates.

Save Game System

It is now possible for games and applications to serialize and deserialize their runtime state using the new Gamestate API.

The Entity Component System has been updated to work automatically with this system (for all built-in components). If you mark an entity as persistent in the entity tree, its state and the state of all its children will be saved into the Gamestate:

You can click on the root entity of your game to make the entire world persistent. Here the Arkanoid asset has been marked as persistent.

You can click on the root entity of your game to make the entire world persistent. Here the Arkanoid asset has been marked as persistent.

From there, the data can be dumped to a saved game file on disk.

Note that if you create your own custom components for the entity system you will have to define what persistence “means” for those components. Otherwise, no state changes will be saved for those components, meaning that when a saved game is loaded, they will be restored to their state at the start of the simulation.

You can try out the new system in the simulation tab. The save symbol lets you save and restore the state of the simulation (for testing purposes, the state is saved to an internal buffer). Just make sure you have flagged the entities you want to be persistent, or nothing will be saved.

Saving the state of the Interaction sample.

Saving the state of the Interaction sample.

Breakpoints in Entity Graphs

The Entity Graph debugger now supports breakpoints. You can set breakpoints on nodes in the entity graph and once you are stopped at a breakpoint, you can step through the execution of the graph. Note that you must connect to the Breakpoint Debug Session by clicking the connect icon for breakpoints to work.

Debugging entity graphs using breakpoints.

Debugging entity graphs using breakpoints.

The Debug Overlay shows all the Breakpoints that have been set in the graph.

We’ve also added a Graph Instances tab to the overlay. This lists all the entity graphs that the debugger knows about and lets you quickly switch between them.

For debug watching of wires, we’ve added a drop down menu that lets you select which of the running instances of the graph’s wires you are watching (since there may be multiple entities using the same graphs and the values on their wires may be different):

Selecting which graph asset to view.

Selecting which graph asset to view.

UI Components

We are working on improve UI Components, create a system like that is tricky in terms of how much would be helpful for users, and a common source of complains. It still is behind a feature flag and in constant development, but this way we can have feedback from the beginning. For this release we have some changes and improvements: `

  • Fix for bad performance caused by unnecessary update of The Truth data [#575].
  • Screen space UI Canvas uses a reference size, and you specify coordinates in its reference system.
  • Get rid of percentage coordinates.
  • Don’t clamp coordinates anymore.
  • Some improvements in UI Components selection mechanism.
  • It’s possible select different UI Themes assets for each UI Element.

Note that the component still can change, but you hope you enjoy it and help us improve with your feedback.

Facelift for Sample Projects

Our sample projects all now use the procedural sky system. This has reduced the size of our sample project package from 200 MB down to 15 MB (most of the memory was taken up by skybox textures).

In addition, we’ve gotten rid of the old deprecated Dcc Asset Component which was used to directly render some DCC assets. Instead, all samples now use the Extract Assets system to render stuff using entities and creation graphs.

We also use the UI Component to provide help text for the samples:

Help text for the Physics sample. We’ve also adjusted the colors for better contrast and readability.

Help text for the Physics sample. We’ve also adjusted the colors for better contrast and readability.

Entity Tree

  • Tree item keeps focus if you ESC out of Add Component popup dialog.
  • Keyboard shortcuts for Add Component, etc work when a component is selected.
  • Replace with Asset… context menu option to replace one entity with another.
  • Fixed bug in Pinned Entity Tree tab restoration from project settings.

Asset Browser

  • Added global and local search.
  • Added Open entry in the context menu for opening assets.
  • Fixed issue with zoom in and drag and drop file from the window explorer. [#589]


  • When multiple DCC assets are selected, you can now create entities for all of them with the Extract All Assets button in the properties UI.
  • Floating point numbers can now be entered without a zero prefix, e.g. .5.
  • Added a general re-orderable subobject set control. It’s available through tm_properties_view_api->ui_subobject_set_reorderable. It works like the ordinary subobject set UI function, except that it takes an extra argument for specifying which property on each subobject item to use for keeping track of the order. This order property should be of type double.
  • Fix for copy/paste of subobject set items detaching the newly copied object from its prototype.
  • Added a context field to tm_properties_ui_args_t that enables the code to pass along an extra tm_tt_id_t when drawing custom property UIs.

Entity Graph

  • Added node for getting the current elapsed time.
  • Delay node now has two output events, one triggers directly and one triggers after the delay.
  • Better layout of graph links.

Creation Graph

  • Added if and sequence event nodes.
  • Creation Graphs that output a shader instance can now be previewed using a classic “material sphere”.
  • Introduced a new node creation graph called Screen ST which outputs the current pixel coordinate.
  • Support for sampling of linear depth and hdr_accumulation targets in shader graphs, accessed through the new node Frame System Resources.
  • Aspect ratio fix in editor-icon creation graph.
  • Creation graph type-safety for data-driven settings objects defined in .shader files.


  • Added Graph Input and Output references, making it possible to create properties that can hold a reference to an input or output. Useful for highly data-driven systems.


  • Fixed a bug where 64 bit integers could overflow in the JSON parser, causing potential data corruption on project load.
  • tm_unicode_api uses char * instead of uint8_t *.
  • tm_snprintf() does Unicode safe truncation.


  • Fix for bug in drawing of convex shapes.


  • Workaround for bug in tinyfd_messageBox() when the text contains a < sign. [Reference.]
  • Fixed bug where the Properties View wasn’t redrawn correctly if the graph editor node in focus changed.


  • Fixed orthographic camera projection mode in simulate tab.
  • Fixed small discrepancy in windows position and size when moved to a monitor with different DPI scaling.
  • Fixed one frame glitch where all editor glyphs appeared scrambled after changing the editor zoom.
  • Fixed viewport blink after reset of The Truth.


  • Physically based light units now work in a more predictable way.
  • Fixed frustum culling not working in rare cases.
  • Updated Vulkan SDK to
  • Updated DXC to 2021-04-20 version.
  • Light component now has an enabled property allowing it to be turned off.
  • ST2084 PQ transfer function now assumes 350 nits instead of 10000 for viewers.
  • Fixed bug caused by some drivers returning more swapchain images than expected. [#572]
  • Vulkan render backend now uses TLSF Allocator for block memory allocations instead of Buddy allocator.
  • Implemented a graphics memory fallback system, memory will be allocated on system RAM in case of oversubscription.
  • Subresource support for render graph input and outputs.
  • Added ability for components to activate global systems.
  • Fixed bug in GUI pixel snapping code.
  • Runtime cubemap capturing now always executes in the correct entity context.
  • Primitive drawer now supports depth test primitives as well as two-pass rendering of primitives where triangles failing the depth test are dimmed.
  • Front-to-back, back-to-front draw call sorting using tm_render_graph_depth_sort_key().
  • Optimized LOD selection.


  • Improvements to the heuristic used to determine when to save the project window layout.
  • If you hold F7 while loading a project it will now load using the current window setup instead of restoring the window setup from the last work session with that project.


This release supports our newly announced licensing models for Our Machinery.

  • Beauty pass over UI — tweaks to colors and rounded corners.
  • Linux: Fix for some plugins not being copied to beta folder.
  • Added tm_load_image_api to runner.
  • Fixes for crashes when publishing projects.
  • Removed beta survey plugin.
  • Fixed various bugs in expression nodes.
  • Prevent frame glitch in preview UI API.
  • Infinite loop protection in for and grid nodes.
  • Fix for bounding sphere not enclosing bounding box.
  • Fix for orphaned references in asset database.
  • Fix for import crash.
  • Fix for mip map generation crash.


This release fixes connection issues with the licensing server.

  • Updated https certificate fingerprint.
by The Machinery Team