The Machinery Beta — January 2021 (version 2021.1)
Welcome to a new and hopefully better year than 2020! Let’s all be safe and put an end to this pandemic. Here at Our Machinery, we’re back from our holidays and working hard to add new features to the engine.
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 the forum or Discord.
Key highlights in this release are:
- Linux Support (Preview) — The Machinery now runs on Linux.
- Bindless GPU Resource Management — Better performance in Vulkan backend.
- Raytracing Support (Preview) — Preview of our raytracing APIs.
- Asset Labels — Tag assets for better organization.
As always, we also have a number of smaller updates.
Linux Support (Preview)
The Machinery now runs on Linux:
You can find the Linux binaries on our Beta download page.
The Linux build should run on Ubuntu 20.04 or a recent ArchLinux. Make sure you have up-to-date Vulkan drivers for your GPU. It might run on other distributions as well, but we haven’t tested it.
You also need to install the following packages:
sudo apt install libxcb-ewmh2 libxcb-cursor0 libxcb-xrm0 unzip
Be aware that this is our first release on Linux and we consider it a Pre-Release. It has not been tested as much as the Windows release. It has some known bugs and most likely a number of unknown ones too. If you run into anything, please report it in our issue tracker. Thanks for helping us improve the Linux build!
Bindless GPU Resource Management
We have transitioned to a fully bindless GPU resource binding model.
This comes with a significant performance improvement on the CPU. We’ve measured up to 6x speed improvements in the Vulkan backend for heavy scenes, compared to our old binding model (https://ourmachinery.com/post/vulkan-descriptor-sets-management/).
Surprisingly, we are also seeing a decent GPU speed improvement in some scenes.
As long as you are using the shader system shipped with The Machinery, this change should be
transparent to both shader authors and users of the rendering APIs. However, if you rely on being
able to create resource binders directly from
tm_renderer_resource_command_buffer_api
,
your code will no longer work. In a future release, we might resurrect that code path to make it
easier to mix-and-match between bindless and the more traditional resource binding model.
The implementation relies on the Vulkan extension VK_EXT_descriptor_indexing
and we’ve tried our
best to respect device limitations reported from the extension. If you do run into any issues or
crashes we’d much appreciate it if you report them to
us.
Raytracing Support (Preview)
As of this release, you can get an insight into the rendering APIs we’re working on to support hardware raytracing in The Machinery. So far, we’ve mainly been focusing on getting all the infrastructure in place, such as:
- Command and resource buffer APIs — see additions in
tm_renderer_command_buffer_api
andtm_renderer_resource_command_buffer_api
. - Shader system support for writing HLSL code for the new shader stages.
- Vulkan backend support for new shader stages.
- Interop with the new bindless resource model.
If you want to try it out or get a good entry point for studying these new APIs, check out the new
Hello Triangle sample we ship with this release. That, together with the shader code found under
shaders/ray_tracing/
should give you a decent understanding of where we are heading with things.
Any feedback you might have on this is much appreciated. Don’t hesitate to reach out.
Asset Labels
We now support adding Labels to assets. Labels are arbitrary text strings that can be used to organize the project.
You can add or remove labels in the Properties tab that is shown when selecting an asset:
In the Asset Browser, you can filter the view so that only assets with certain labels are shown:
When you create a new Asset Label, the label itself gets added to the project as an asset (that’s
how we keep track of everything in a project). The .label
assets get added to the
asset labels
folder in the root of the project.
Note that in addition to user-defined Asset Labels, the engine also automatically assigns labels to Creation Graphs based on their output. I.e., all creation graphs that produce a material get the Material label. These engine-assigned labels cannot be edited or removed and they don’t appear in the project as assets.
UI
- Fix for crash when selecting Change View in a tab’s context menu.
- Fix for crash when showing modal dialogs.
- The accelerator key for the quick Create/Add menus found in the Graph Editor and the Entity Tree has been changed from Tab to Space. (To avoid key conflicts.)
- The Add Entity from Asset shortcut has been changed from Shift + Tab to Shift + Space.
- You can now double-click on the Render Graph component in the Entity Tree to open it in the Graph tab.
- You can now double-click on a node in the Graph tab to override it.
- The UI render buffers are now cached and updated only if necessary.
- Better naming scheme for entities added with Add Child Entity in the Entity tree.
- You can now double-click on a not-instanced component to override it.
- Categories have been introduced for the UI tabs to make the Tab menu easier to navigate.
- The scroll wheel speed now takes the OS setting into account.
Projects
- Fix for Import Project crash. [#437]
- Fix for copy-pasting from a closed project. [#429]
- When publishing a project, there is now a new node called Strip (Retain Image) in the Creation Graph that will cache any inputted image and remove all the nodes behind it from a published project. This is a first step towards stripping editor-only data to reduce the size of published projects.
- Each project now has its own settings file.
- By default, the state of a project (open windows, etc) is now restored when you open it or recover it from a crash.
- The engine now detects if the project files have been changed on disk (outside of the editor) and gives you options to Import or Discard the changes.
Asset Browser
- Fix for case sensitive name sorting.
- Fix for renaming multiple assets at once.
- Fix for an issue when clicking on an item in a selected set didn’t deselect the other ones. [#456]
- Fix for asset browser selection not being picked up by the properties tab. [#448]
- When you create a new folder you now immediately get to specify a name for it. [#440]
- Added a quick creation menu for assets, triggered by pressing Space. [#438]
- Entities can now be dragged from the Entity Tree to the Asset Browser to create a prototype.
- Columns are now automatically resized based on the name length.
- The asset browser settings (filter, view, last open folder) are now remembered when you reopen a project.
Asset Pipeline and Importing
- The Reimport functionality for DCC assets has been improved. Meshes and materials with matching names now preserve their identity after a re-import step, ensuring that references to these objects are kept intact.
- Better extraction of material blending and alpha masking from imported materials.
Runner
- Fix for the Runner not loading plugins from Plugin Assets.
Entity Graph
- Added
sin
,cos
,tan
,pi
, andtau
trigonometry nodes.
Graph
- The internal IDs of inputs and outputs now include the ID of the graph. This prevents collisions of input/output IDs between a graph and its prototype.
- Added a *Go to Definition option when selecting nodes if developer mode is enabled.
Creation Graph
- The
tm_creation_graph_api
is now capable of reasoning about multiple Truths in-flight (previously it used a singleton manager connected to a single Truth). Many functions in the API now require an explicitly passed Truth pointer. - Compile Option node – connected / not connected no longer required to be wired.
Construct Float2
andConstruct Float3
now supports connecting a higher dimensional vector as input.- Changing inputs in the property editor no longer results in flickering graphics in the viewport.
Rendering
- Added various shader validation checks to improve debugging.
- Added false-color exposure view mode.
- Added physical properties to the Camera Component (shutter speed, aperture, and ISO).
- Added orthographic projection support to the Camera Component.
- Added a camera-based exposure mode.
- Added waveform scope.
- Support for Emissive texture and color in default
dcc-material
. - Fix for mesh vertex colors not correctly applied in some cases.
Simulate
- The Simulate tab now has a toolbar with camera and visualization options.
Runner
- The Runner now has options for resolution and fullscreen mode.
- ALT-Enter can be used to toggle fullscreen on and off.
Physics
- The settings for the physics simulation can now be controlled by a Physics Scene Settings asset. [#408]
sweep()
andoverlap()
in thetm_physx_scene_api
now take a world transform instead of a position and rotation, so that the scale of the transform can be used to scale the geometry correctly. Sweeps and overlaps now work correctly with scaled shapes.compute_penetration()
has been added totm_physx_scene_api
. It computes the minimum translation needed to take two overlapping physics shapes out of collision.
Build
- The engine now uses the
/utf-8
build flag for Visual Studio builds, to indicate that the source code is in UTF-8 format. [#421] - The way that
tmbuild
searches for utility tools, such ashash
anddocgen
has been improved. tmbuild
’slibs.json
now supports arepository
keyword specifying the repository that a dependency should be downloaded from. (The default isourmachinery.com/lib
.)
Documentation
- The Help menu now links to the API documentation.
- Cross-references are now supported in the API documentation.
- Enum members can now be found in the search index.
- A review pass has been made over the documentation, improving and clarifying it.
- API documentation search is now case-insensitive.
- The ranking of search results has been improved.
Settings
- The File > Settings property view has been cleaned up. [#405]
2021.1.a Hotfix
- Fix for a bug where publishing a project caused some creation graphs to be stripped of inputs, causing things to not render.
- Fix for a crash when deleting entities that render meshes.
- Fix for a crash when importing certain FBX files. [#469]
- Fix for a startup crash on some AMD GPUs. [#476]
- Fix for files failing to import if their file extension was capitalized.
2021.1.b Hotfix
- Crash fix for AMD GPUs.