The Machinery Beta — November 2020 (version 2020.11)

Hope you all are warm, safe, and socially distanced as we move into Glögg-season here in the Northern hemisphere. We have a new release, our first one since we went into open beta last month, with lots of things that we hope you will find interesting.

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:

Introduction to The Machinery.

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.

Project Import and Import from URL

We’ve made it easier to share and remix the content you make in The Machinery with new import features.

Project Import provides an easy way to import assets from one The Machinery project to another. To use it, select File > Import File… and pick a The Machinery project file to import. The project you select is opened in a new Import Project tab and from there, you can simply drag-and-drop or copy/paste assets into your main project’s Asset Browser.

Importing assets from another project.

When you drag-and-drop or copy-paste some assets, all their dependencies are automatically dragged along so that they are ready to use.

Here is a video showing this in action. We start with a blank project, then we drag in a level from the physics sample and a character from the animation sample, put them both in the same scene, and play:

Importing and remixing content from different projects.

To make it even easier to share your stuff, we’ve also added File > Import from URL… This lets you import any file that The Machinery understands: GLTF, FBX, JPEG, or a complete The Machinery project directly from an URL. You can even import zipped resource directories in the same way.

For example, in the image below, we imported a Curiosity selfie from NASA (using the URL https://www.nasa.gov/sites/default/files/thumbnails/image/curiosity_selfie.jpg ) and dropped it into the scene we just created:

JPEG imported from URL.

Have you made something interesting in The Machinery that you want to share with the world? Save your project as an Asset Database and upload it to a web server somewhere. Other people can use the Import from URL… option to bring your assets into their own projects.

Sculpt Tool

This release adds a new Sculpt component, intended for rapid prototyping. Using the sculpt component you can quickly sketch out levels or make beautiful blocky art:

A blocky character in a blocky forest setting.

To use the Sculpt Component, first add it to an entity, by right-clicking the entity in the Entity Tree and selecting Add Component. Then, select the newly created Sculpt component in the Entity Tree.

This gives you a new sculpt tool in the toolbar:

Sculpt tool.

With this tool selected, you can drag out prototype boxes on the ground. You can also drag on an existing prototype box to create boxes attached to that box.

The standard Select, Move, Rotate, and Scale tools can be used to move or clone (by shift-dragging) boxes.

You can add physics to your sculpts, by adding a Physics Shape Component, just as you would for any other object. Note that if you are cooking a physics mesh or convex from your sculpt data, you need to explicitly recook whenever the sculpt data changes.

Currently, all the sculpting is done with boxes. We may add additional shape support in the future. Here is a video of sculpting in action:

Sculpting.

In addition to being a useful tool, the Sculpt Component also shows the deep integration you can get with custom plugins in The Machinery. The Sculpt Component is a separate plugin, completely isolated from the rest of The Machinery and if you wanted to, you could write your own plugins to do similar things.

Area Lights

The Light component now has support for three types of area lights: Rectangular, Disk, and Sphere:

New light types: Rectangular, Disk and Sphere area lights.

The implementation is based on the Linearly Transformed Cosines (LTC) framework, first presented at Siggraph 2016 (https://eheitzresearch.wordpress.com/415-2/). We intend to extend the area light support by also adding support for tube lights in a future release.

Note that we do not yet have support for casting correct soft shadows from area lights, but as a fallback, you can play around with grounding objects using regular shadow mapping.

Editor

  • Added a Help menu with links for reporting bugs, joining our forum, and joining our Discord.
  • Added a Task Manager for viewing and canceling background tasks.
  • Fix for crash when importing lots of assets at the same time.
  • Fix for the character position resetting in the simulation when the scene was edited in the Animation sample. [#346]
  • Fix for a stall when saving the settings file.
  • Any tab can now have toolbars that can be re-docked on any edge of the tab. This is used in the Scene tab, replacing the previous HUD and tool selector.
  • Fix for a stall when previewing WAV files. [#351]
  • Fix for a crash in the Pong sample. [#355]
  • Editor tabs can now optionally be rendered on background threads, improving performance.
  • The last project you opened up with The Machinery will now automatically be opened on startup. You can set the Open Empty Project On Startup option in the Window menu if you always want to start from scratch instead.
  • The tab layout is now saved when you close The Machinery. It will be restored when you boot up the engine again. You can restore the default layout by selecting Restore Default Layout in the Window menu.
  • Console: Horizontal scroll bar in console tab now behaving correctly.
  • Better looking color scheme for scrollbars.
  • Unified “Add Component” behavior between Tree View tab and Properties tab.
  • Pre-rigged entities to quickly create planes, boxes, and UV-spheres are now shipped as part of core and found under core/geometry/.
  • Code driven Assets Tags now prevent resource picking of a creation graph assets that do not generate the requested input (such as images or materials).
  • Better framing of selection, the F-key in the Scene tab now ignores the origins of the entities and centers on their combined bounding volume. To include the origins, use CTRL-F.
  • Improved sorting of fuzzy search results in popup picker.
  • Component categories, all components are now categorized.

Unified “Add Component” view with categories.

Entity Tree

  • It is now possible to filter entities in the Entity Tree. Press the search icon or Ctrl + F to start searching.
  • It is now possible to hide components in the Entity Tree. Press the eye icon or Ctrl + H to toggle component hiding on and off.
  • Implemented the “Level Up” functionality, which will re-parent the currently selected entity to its grand-parent. Select Level Up in the entity’s context menu or press Ctrl + U.
  • Improved both “automatic” and “manual” scroll of the Entity Tree when there are a lot of entities.
  • It is now possible to reorder the entities in the Entity Tree. Drag the entity you want to move and drop it at the new location.
  • Entities can now be hidden in the Scene view. Hover over an entity and press the eye icon to hide it. Note that hiding an entity will hide all of its children automatically.
  • It is now possible to select ranges of nodes in both the Entity Tree and the ASM views. You can use either Shift + Left Mouse Click or Shift + Up/Down to range-select elements.
  • New icon for Components.
  • Components can now override the default icon:

Component icons.

Foundation

  • The old chash.inl hash implementation has been replaced with a new type-safe hash implementation in hash.inl.
  • Fixed a missing line break after PhysX error messages.

SDK

  • Our Assimp plugin is now open-sourced and shipped as part of the sample plugins.
  • The Machinery’s own GLTF importer plugin is now open-sourced and shipped as part of the sample plugins.

Rendering

  • Support for letting plugins enable Vulkan instance and device extensions.
  • DDS loader now supports files with DX10 headers.
  • Improved TAA stability in areas with high-frequency depth discontinuities (e.g. alpha masked vegetation).
  • Fix for negative EV minimum in automatic exposure.
  • NaN/INF view mode.
  • Vulkan: Warning if draw call is scheduled without having a render pass bound.
  • Shadow map biasing now operates in a more sensible range. Less peter-panning of shadows.
  • Fix for alpha masking not working correctly with unlit output node for opaque surfaces.
  • Fix for shader graph declared variables not getting updated correctly after a shader compile task finishes.

Graph

  • Fix for null event names on GPUSim nodes.
  • Added node support for Volume Component: Get Volume, Volume Contains, Volume Contains With Blend.
  • You can now check if an entity is alive with the Is Alive node
  • Expanded math nodes for rects: Add, Area, Center, Center In, Components, Equal, From Components, Inset, Intersect, Set H/W/X /Y, Union
  • Expanded math nodes for vec4 — now has the same nodes as vec2 and vec3
  • Expanded float nodes with min and max
  • Expanded string nodes with concatenate, length, equal
  • Expanded debug functionality with To String nodes for vec2, vec3, vec4, rect, float, and bool.
  • Math nodes now use full names instead of abbreviations.
  • Creation graph nodes for generating tessellated planes, boxes, and UV-spheres have been added under the category Geometry/
  • Creation graph nodes for constructing and deconstructing image declarations.

Assets

  • Assimp SDK upgraded to a snapshot of master from 2020-11-16.
  • Fix for meshes with vertex colors not being imported correctly using the Assimp plugin.
  • Bone weights are now always normalized when importing skinned meshes using the Assimp plugin.
  • Reassigning the prototype of an asset no longer loses the identity of the instanced object.
  • Import of supported file types with upper- and camel case extensions now works. (e.g. .JPG).

Performance

  • Significant performance improvements when loading and spawning large entities.
  • Tree view now handles navigating very large entities without any performance problems.

2020.11.a hotfix

  • Fix for infinite recursion in entity graph when an entity spawns another copy of itself. [#361]
  • Ability to boot the machinery in Safe Mode by passing a –safe-mode flag or holding F8 during boot. This lets you recover from situations where The Machinery is crashing at bootup because it’s trying to load a broken project or settings file. [#361]
  • Fix for bug that could caused corrupt project files when saving. [#363]
  • Fix for TM_STATIC_HASH() not working near EOF. [#358]
  • Fix for a bug where a graph stops working after an inherited subgraph node is overridden.
  • Fix for a crash if the Draw Call node was wired with incorrect data. [#359]
  • Fix for a crash if multiple files were imported simultaneously.