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:

As always, we also have a number of smaller updates.

Linux Support (Preview)

The Machinery now runs on Linux:

The Machinery running on Ubuntu 20.04.

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:

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.

Hello Triangle raytracing sample.

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:

Adding a label to world.entity.

In the Asset Browser, you can filter the view so that only assets with certain labels are shown:

The Asset Browser will only show assets with the “scene” label.

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, and tau 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 and Construct 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() and overlap() in the tm_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 to tm_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 as hash and docgen has been improved.
  • tmbuild’s libs.json now supports a repository keyword specifying the repository that a dependency should be downloaded from. (The default is ourmachinery.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.