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:
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.
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.
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):
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:
- 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.
- 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.
- 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
- Fix for copy/paste of subobject set items detaching the newly copied object from its prototype.
- Added a
tm_properties_ui_args_tthat enables the code to pass along an extra
tm_tt_id_twhen drawing custom property UIs.
- 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 Graphs that output a shader instance can now be previewed using a classic “material sphere”.
- Introduced a new node creation graph called
Screen STwhich 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
- 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.
char *instead of
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
- 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 220.127.116.11.
- 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
- 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.
- 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.