We got it!
We’d like to present you with a brand new Flax 1.4! This version brings lots of new features like Realtime Global Illumination, better licensing, crowd navigation, large world support, and tons of good stuff.
For this update together with our contributors, we’ve made over 643 commits and merged 23 Pull Requests into Flax repositories. Thanks for your support!
As always, we will do a short check around new features and highlights. To see detailed information visit the official release notes.
Realtime Global Illumination
Realtime Global Illumination comes to Flax! This was one of the most requested features and now it’s available to use in games and architectural visualization projects. You can see it in action in the video above. We implemented it using DDGI algorithm with scrolled-probes volumes around the camera which utilizes our custom Software Ray Tracing solution that runs on all modern GPUs – no need to have RTX-ready GPU. Instead, we added support for Signed Distant Fields for models to rasterize them into a global volume which can be ray traced in shaders on a GPU. Together with Global Surface Cache, we can simulate the GI effect in a dynamic environment where lighting conditions are constantly changing (eg. via time of the day).
To learn more see the Realtime GI docs.
Download Tech Demo
To showcase the capabilities of the new Global Illumination rendering we made a small demo presenting the ArchVis scene with dynamic lighting, dynamic objects, and adjustable time of the day. It’s a small sandbox where you can playtest how the GI looks in an actual production project and how it performs. You can download it now from our server or wait for the official release on Steam.
In the demo, you can control the camera with a mouse and keyboard or play with a gamepad. Use D-pad or UHJK keys to rotate the sun and play with the time of the day in the scene to see how it affects the dynamic lighting.
Together with a massive amount of new features coming to Flax in this update we wanted to do even more. Thus we updated our licensing terms by increasing the minimum revenue threshold to $250k from $25k. Now, it’s free to use Flax if your game or product earns less than $250k in a calendar quarter. Any revenue above this value is using a 4% revenue share, as it was before. For example, if your game earns $300k you pay $2k, which is 4% out of $50k above that new threshold.
We believe this change will make the engine more affordable for small developers. It begins to be effective including with this calendar quarter (Q3 2022).
64-bit World Coordinates
Flax Engine contains various features to create large and rich worlds such as async data streaming, different content tools (for foliage and terrain), and optimized multi-threading. In this update, we’re bringing 64-bit precision support for World Coordinates to enable building even larger worlds. Together with relative-to-camera rendering and physics scene origin shifting large worlds can be efficiently simulated and rendered which makes it possible for the game scenes to be as large as the whole Solar System while still maintaining good quality and precision.
By default, the engine still uses 32-bit floats precision which can be upgraded to 64-bits in Custom Build. To learn more see the docs.
In order to implement real-time GI, we needed a way of tracing through the scene to simulate light transport for diffuse light bounces and specular light with reflections. Nowadays, the most common way to do it is through hardware raytracing which is limited to high-end GPUs only. We decided to use Signed Distance Fields which provide an efficient way for ray tracing. To do it, we rasterize model SDFs into an array of volume textures (called Global SDF) to provide up to 10cm precision nearby the camera at a distance of 200m or more. This gives a rough approximation of the scene geometry and can be used for software raytracing.
To learn more see the Global SDF docs.
Global SDF in Content
Additionally, the benefit of maintaining Global SDF for a whole scene is the ability to use it in materials, particles, and shaders. We added new
Sample Global SDF and
Sample Global SDF Gradient nodes to materials and particles for sampling SDF at any position. Also, particle emitters have new modules for Global SDF collisions and Global SDF forces to drive the realistic VFX simulation.
For game projects that use AI with NavMesh-based navigation, we’ve added a new
NavCrowd system which allows to efficiently simulate pathfinding with avoidance for crowd of agents. Above you can see 2 groups of simple navmesh agents that are colliding with each other. NavCrowd is a navigation steering behaviors system for a group of agents. It handles avoidance between agents by using an adaptive RVO sampling calculation. It can be used to implement automatic avoidance and movement for a crowd of agents using navmesh and supports asynchronous calculations which can run on our Job System (as shown in docs).
Rich Text Formatting
For this release, we improved Rich Text Box GUI control by adding HTML tag formatting with styling, layout, and inlined image support. This notably makes it easier to style text in UI and create more elegant content. Our simple HTML parser is very extensible and can use custom tags (eg. defined by plugins). Follow the documentation to learn which tags are supported and how to use them in your projects.
Visual Scripting improvements
Every update, we bring many features and improvements for Visual Scripting users. Our goal is to make it a very extensible and usable solution for gameplay scripting. This time we added Dictionaries support, new editor features for easier script editing, as well as, Finder tool. New Finder tool allows you to quickly search anything in the graph or even in all scripts in projects (bring it via
Ctrl+F in all graph editors). This can be also used to search for something in all materials, particles, and animation graphs in a whole project (eg. to search usages of a certain texture or method).
Finally, Reroute node got more usability and now can be easily connected to other nodes including multiple inputs/outputs (depending on the type). This will improve reusing graph parts and help organize visual scripts or material graphs.
Screen Space Reflections for transparency
Transparent materials have new options for performing per-pixel depth-buffer raytracing to render reflections which improve the realism of water surfaces like puddles. Also, transparency can sample new Global Illumination and/or use Non-Directional Lighting mode which is useful when creating smoke, fog, or dust particle materials (shown below).
Animations can have nested animations inside to create sub-clips or composites (aka montages). This allows to easily reuse existing animation assets (eg. single reload gun animation duplicate 3 times for each gun shell).
Now, Flax contains various utilities for different noise functions such as: Perlin, Simplex, Worley, Voronoi, Custom. Those can be accessed via scripting
FlaxEngine.Utilities.Noise static class and used to enrich procedurally generated worlds and content.
All visual graphs (materials, particles, animations) can sample noise functions both on CPU and GPU to enrich the content. All noise functions return normalized results in the range 0-1. Some of them return more noise components, such as Voronoi Noise where
Z=minEdgeDistance. Depending on the context only one or even all components can be used. Follow the tooltip with documentation for every node.