We’re excited to share a few of the new features now available on the Master branch on GitHub. To be able to try out these new features, you will need to download the source code for the Master branch and build the Engine yourself. For more information about how to build the Engine from source code, please see this page. The Master branch on GitHub is constantly being updated and is not quality tested so it may be potentially unstable. We do not recommend using the Master branch for project development. If you wish to wait, these features will be made available to all in an upcoming official release.
Engine News
New Features
Ambient Occlusion Material Mask
The new Ambient Occlusion Material Mask feature lets you access Lightmass calculated AO in your material, which can be useful for procedural texturing, for example to add in aging effects and dirt in areas where it would accumulate.
To use, you need to enable both ‘Use Ambient Occlusion’ and ‘Generate Ambient Occlusion Material Mask’ under World Settings -> Lightmass Settings, and then rebuild lighting. The other AO controls like Occlusion Distance can be useful to tweak the look.
Be sure to set Direct and Indirect Occlusion Fraction to 0, so that this AO will not be applied to the actual level lighting.
Then in your material you can access the AO as a 0-1 mask with the PrecomputedAOMask node
After building lighting in the Sun Temple level, it will look like this:
Here’s an unlit picture of an AO mask used to blend in a dirt layer automatically into corners of the environment.
Use of this feature for procedural texturing requires care - it’s easy to make something that just looks like bad lighting with dark corners. BaseColor should contain the material reflectivity, not lighting.
On the performance side, using the PrecomputedAOMask node is just a standard texture lookup. Enabling the feature adds half a byte per lightmap texel, where the default usage is about 4 bytes per lightmap texel. AOMaterialMask texture memory can be inspected with ListTextures.
Content Browser: Nested Collections
Your collections of assets can now be organized into a hierarchy.
Child collections can be created by choosing the “New…” option from a given collections context menu. Alternatively, collections can be parented via drag-and-drop.
When performing a Content Browser search for a given collection, any child collections will also be included in that search.
Content Browser: Dynamic Collections
Dynamic collections leverage the power of the Advanced Content Browser Search Syntax to allow you to create and share Content Browser filters.
Anything you can do with the Content Browser text search can be saved as a dynamic collection, including referencing other collections (both static and dynamic).
You can create a dynamic collection using the “Save” button to the right of the Content Browser text filter.
Content Browser: Quick Collection Assignment
You can now quickly add an asset to many collections at once using the new Quick Asset Management check boxes.
These are available within the collections view itself, or alternatively, via the context menu of any selected asset(s).
The checkboxes will update based on the current asset selection, where:
- Unchecked - None of the selected assets exist in the collection.
- Checked - All of the selected assets exist in the collection.
- Undetermined - Some of the selected assets exist in the collection.
Content Browser: Collection System Improvements
Improved Collection Robustness
Collections will now automatically follow any redirectors that they contain, which avoids the issue of an asset seeming to vanish from a collection when it was renamed or moved. Additionally, collections are now considered when fixing up (and ultimately removing) redirectors via the Content Browser.
Improved Status Reporting
Each collection now has a little status indicator at the right hand side of its row item. This changes colour depending on the current state of the collection, with each colour meaning:
- Red - The collection is in some kind of bad or read-only state. See the tooltip for how to resolve the issue.
- Orange - The collection is not up-to-date with the latest version in source control.
- Blue - The collection has local unsaved changes. This may happen if a save or auto-checkin fails, or if the collection had its redirectors followed.
- Green - The collection is non-empty and up-to-date.
- Grey - The collection is empty and up-to-date.
Improved Asset Tooltips
The static collections for a given object are now shown as part of its tooltip in the Content Browser.
Material Parameter Sliders
Don’t you hate it when you are scrubbing a parameter on a Material Instance like Roughness, which is only valid from 0-1, and you accidentally scrub to a crazy value?
Now you can set the valid range for a scalar parameter on the Scalar Parameter expression node in the base material.
The Material Instance parameter value will now give you a slider, clamping your input to the valid range.
You can still key in any value, this just clamps the slider. Use a clamp in the material graph if you need to prevent out of bounds values.
Custom attenuation curves for sounds
You can now define your own custom curve for attenuating sounds rather than simply being limited to the built in algorithms.
In the attenuation settings set the Distance Algorithm to ATTENUATION_Custom and you will see the custom curve section appear. You can then either specify an external curve asset from the content browser or define a custom curve directly in the details panel yourself.