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:
- The Machinery Book gives an introduction to The Machinery.
- The Machinery Tutorial Book is a collection of tutorials.
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.
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.
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.
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
andsign
nodes. - Added
min
,max
, andabs
nodes for vector types. - Added tooltips to expression language nodes.
Creation Graph
- Added
Fresnel
andStep
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 afloat3
with afloat4x4
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)
acceptsGPU Images
as input.
Editor
- 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 theopt
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]
Rendering
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.
Windows
- Improved readability of error messages.
- Fixed various issues with window resizing.
Linux
- 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.
Curves
- 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.
Foundation
- tm_hash_remove() now correctly decrements
(h)->num_used
preventing hash maps with frequent add/removes from growing indefinitely. - Registrations of image loaders are now done using tm_add_or_remove_implementation() under the string TM_IMAGE_LOADER_INTERFACE_NAME.
PhysX
- Added support for Height Field collision shapes.
Runner
- Published projects now have the same folder layout as used in the editor.
- Added cubemap capture interfaces. [#592]
- Added tm_image_loader_api.
UI
- Support for programmatically scripting the UI by simulating mouse moves, keypresses, etc.
Entity system
- Automatic hot-reload is now supported for engines and systems.
Tools
hash.exe
now prints errors if it encounters a bad TM_STATIC_HASH pattern.