The Machinery — April 2022 (version 2022.4)
We are deep at work on a bunch of bigger features spanning all the way from a new improved document editing model, to support for handling very large worlds. Unfortunately they aren’t ready to be rolled out just yet, but rest assured they are well worth waiting for.
In the meantime we still have the April release for you with a some smaller features and bunch of fixes and improvements.
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. We are also working on a book about The Machinery. Note that the book is still a work in progress.
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:
Euler Angle Ordering
The Machinery now allows rotation Euler angles to be specified in any axis order. This lets you use the axis order that is most natural for the object you are working with. To select a particular axis order, right click on the Rotation field label in the properties editor:
Note that, internally, the angles are still represented by quaternions, not Euler angles. This means, for example, that you can’t set the rotation around an axis to 1000 degrees, because there is no way of representing multiple full rotation “turns” using quaternions. (The quaternion rotation of an object that has made a full turn is identical to that of an object that hasn’t rotated at all.)
Mesh Shader Support
The Machinery now has support for Mesh Shaders when running on Turing powered Nvidia GPUs through the VK_NV_mesh_shader Vulkan extension.
Rendering using a mesh shader is possible by writing a shader that implements the two new stages
task_shader
and mesh_shader
and submitting a draw call with the tm_renderer_draw_type
set to
TM_RENDERER_DRAW_TYPE_MESH
or TM_RENDERER_DRAW_TYPE_MESH_INDIRECT
.
Support for Mesh Shaders should be considered an early preview. We are currently not shipping with any examples of how to use them, and we have no plans of building features that exclusively dependent on them.
Community Contributions
- Thanks to Tisten for multiple fixes:
- Thanks to tlein for multiple fixes:
- Thanks to matias-eduardo for improving the canvas component #941
- Thanks to jamesmintram for fixes to the animation blend UI #925
Entity Graphs
- Added support for generic graph node connectors.
- The Sequence node now grows dynamically as you add new connectors.
- Added runtime errors when a required connector isn’t valid. #1225
- Added
In Editor
node for detecting if the graph is running in the editor.
Graph Editor
- Fix for “propagate to prototype” not working correctly after creating a subgraph that consists of instantiated nodes.
Entity System
- We have added fixed stages. There is first, pre update, update, post update, last stage. After each stage a Engines or Systems Commands are executed. Within a Stage you can still order your Engines, Systems with
.phase
,.[before/after]_me
. Note that there is also asetup
andshutdown
stage. These stages are only executed once: At the beginning and at the end of the Entity Context Lifetime.
Simulation
- Only the
Reload Event
is now triggered when an Entity Graph is Reloaded. #1237 - Assets won’t be propagated if the Simulation is paused. #1237
Entity Tree
- Fix for clones not being named correctly when duplicated via the Entity Tree context Menu. #1243
- Fix for erroneously showing
Removed From Instance
for components in some specific prototype chains. #1234 - Moved “Create Prototype from Entity” out of the “‘Advanced” sub context menu.
Docking System
- The code for managing workspaces has been broken out from
docking.c
into at newworkspaces.c
The Truth
- Fixed a performance issue where
tick_version()
could cause significant stalls if a lot of objects were changed in one operation. #1258
Creation Graphs
- Simplified setup for GPUSim systems spawning into other GPUSim systems by splitting out indirect dispatch arguments for emitter spawning into its own argument section.
- Better dirty version tick mechanism when propagating through multiple graph instances.
Rendering
- Added ability to request a RenderDoc capture from the render graph API
- Vulkan:
VK_ACCESS_SHADER_READ_BIT
are now always set for images created withTM_RENDERER_IMAGE_USAGE_UAV
usage flag. - Vulkan: Fix for incorrectly requesting blend capabilities even for non normalized integer image formats in
vk_image_usage_to_format_features()
.