The Machinery — July 2021 (version 2021.7)

This July release is our first major release of The Machinery since we announced our license model and our Early Adopters program. Thanks so much to everybody who has purchased a license! And thanks so much to everyone who is helping us by posting bug reports on our issue tracker, feature requests and other discussion topics on Discord, and even pull requests with bug fixes and new features. It is great to see that the community is as excited about making The Machinery better as we are. I hope you find us responsive and approachable. Please come to us with any issues you have.

If you are a studio considering using The Machinery for a project but have some qualms, please come and talk to us. We know that betting on a new engine can be scary and we also know how valuable the first users of the engine are to us. We will do anything in our power to help you succeed with your project.

If you are already running The Machinery, this new release should pop up in your Downloads tab. Otherwise, get it from our 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.

The Machinery Books

We’ve received a lot of requests for more material on how to get started and work with The Machinery. To help with this we’ve started two mdbook projects:

Both of these books are works in progress and the content is a bit sparse right now. We will be adding more to them going forward.

We host the books in a public GitHub repository, so feel free to add your own contributions.

The Machinery Book.

The Machinery Book.

Icon Touchup and UI Improvements

We’ve improved the look and feel of the editor with tweaks to the color scheme, new icons for the asset browser and the entity tree, as well as lots of other little fixes.

UI improvements.

UI improvements.

Thumbnails in the Asset Browser

The Asset Browser now has thumbnail support, giving you a quick overview of the asset content. Currently, only texture assets have thumbnails. We will be adding thumbnail support to more asset types going forward.

Texture thumbnails in the Asset Browser.

Texture thumbnails in the Asset Browser.

Community Contributions

  • Thanks to ForxVT for providing macros for generating random numbers as well as other fixes. [#673] [#685]
  • Thanks to tedlofgren for fixing a bug in tm_slab_remove_all. [#668]
  • Thanks to photex for making The Machinery run on Fedora 34. [#666]
  • Thanks to cforfang for fixing Vulkan resource transitions. [#664]
  • Thanks to lpanian for fixing a crash when renaming animations. [#674]
  • Thanks to quicklyslow for fixing an issue with thumbnails not showing correctly as well as preview of DCC assets. [#678] [#693]
  • Thanks to jamesmintram for fixing an issue when a graph was assigned itself as a prototype. [#683]
  • Thanks to infosia for enabling hot-reload by default in the runner and the samples. [#689]

Entity graph

  • Looping nodes now have overflow protection.
  • Fix for a bug causing crashes in the For loop node. [#665]
  • Added inverse lerp and sign nodes.
  • Added min, max, and abs nodes for vector types.
  • Added tooltips to expression language nodes.

Creation Graph

  • Added Fresnel and Step node.
  • New memory management for creation graph instances guarantees that all instance memory gets recycled.
  • Fix for destroy_resorce() getting called twice for images that can’t be mipmapped.
  • New node: Last Frame Time — returns the last frame’s simulation time. Useful for calculating velocity vectors for procedural vertex animations.
  • New node: Transform — transforms a float3 with a float4x4 matrix.
  • New node: Rotate About Axis — rotates a vector or point around an arbitrary axis. Supports an optional pivot point.
  • New node: PivotPainter Unpack — helper node for unpacking information in “Pivot Painter 2” textures.
  • Support for passing the last frame’s position as input to Lit Output. Used for creating per pixel velocity vectors when computing shader-driven procedural vertex animations.
  • Fix for correctly handling garbage collection of cached node results when the owning node is deleted.
  • New node: Reconstruct World Position — reconstructs a world position based on a linear depth value.
  • New node: World Position — returns the world position of the current pixel.
  • New node: Wetness Material Properties — implementation of material wetness described in The Technical Art of Uncharted 4.
  • Fix for incorrect image formats in Creation Graphs image descriptors.
  • Fix for the data stripping of The Truth data.
  • Compress Image (Crunch) accepts GPU Images as input.


  • Various components now use dimmed or culled visualization lines for better placement.
  • Fixed multi-selection not working after selecting the gizmo.
  • Added a color scopes tab, this replaces the overlay waveform visualizer and adds a vectorscope visualizer for any viewer tab.
  • The viewport camera is no longer rendered when enabling component visualization for the Camera Component.
  • Fixed a bug in glyph chart UV calculations causing some blurriness in the font rendering.
  • Fixed a crash in thumbnail generation triggered during project import.
  • Graph: Increased the maximum number of node connectors from 16 to 24.
  • Support for importing .exr image files using TinyEXR.
  • tm_the_machinery_api->create_or_select_tab() now always opens a new tab if the opt parameter is NULL. [#692]
  • Fix for scene toolbar dropdown menus opening and closing inconsistently. [#607]
  • Fix for fonts sometimes being garbled on startup. [#652]
  • Preserve simulation settings on Restart. [#570]
  • Objects now always open in the last focused tab, even if they’re already open in another tab. [#641]
  • Fix for a crash when deleting an animation. [#642]


  • robustBufferAccess is no longer enabled by default.
  • The backend can now simulate other physical devices with VK_LAYER_LUNARG_device_simulation.
  • Expanded Vulkan environment validation when failing to create a Vulkan instance.
  • Fixed opacity discard materials not taking depth into account.
  • Added color grading component.
  • tm_render_component_api->set_creation_graph() now immediately creates an instance of the assigned graph.
  • Assert and gracefully handle user errors when tm_renderer_resource_command_buffer_api->destroy_resource() was called more than once for the same tm_renderer_handle_t.
  • Fix for power-of-two alignment requirement in view frustum culling output buffer.
  • Floating-point precision tweaks in vector glyph intersection and SDF code.
  • Crash fix when manually triggering cubemap capturing more than once in a row.
  • Atmospheric fog now correctly affects transparent surfaces.
  • Exposed main camera parameters in tm_render_args_t.
  • The atmospheric component now supports defining distance in meters.


  • Improved readability of error messages.
  • Fixed various issues with window resizing.


  • Fix GLTF animation issue. [#651]
  • Improved and fixed the file dialogs’ recently used folders. [#588]
  • Fix for tmbuild --install. [#608]
  • Fix for some missing plugins in the release package.


  • Added the Curve API, used to evaluate curves with up to four constants. 8 curves are defined by default, more can be added using the curve type interface.



  • Added support for Height Field collision shapes.


  • Published projects now have the same folder layout as used in the editor.
  • Added cubemap capture interfaces. [#592]
  • Added tm_image_loader_api.


  • Support for programmatically scripting the UI by simulating mouse moves, keypresses, etc.

Entity system

  • Automatic hot-reload is now supported for engines and systems.


  • hash.exe now prints errors if it encounters a bad TM_STATIC_HASH pattern.
by The Machinery Team