UNIGINE 2.3: Round Earth, Shoreline, New DoF and GI, HTC Vive Support
- Round Earth according to geo-coordinates
- Completely revamped Landscape tool, improved its usability (experimental)
- Updated terrain materials: metalness workflow, no limit on the number of layers and materials
- HTC Vive support
- Metalness workflow by default
- Reworked depth of field (DoF) effect
- Configurable TAA
- Improved support for screen-space raytraced reflections
- Implemented GGX mipmaps
- Global illumination effect by box projection for EnvironmentProbe
- Bow/stern ship wake waves
- Shoreline with physics interaction
- Improved underwater rendering: added caustics and light shafts
- Experimental new editor with completely new UI and integrated assets browser
- API improvements: C# mathlib, better callbacks, topology methods, and more
- New video tutorials
UNIGINE 2 Sim now lets you create round (ellipsoid) 3D Earth: objects can be placed in geo-coordinates (longitude / latitude / altitude) and visualized correctly even for high-altitude in-atmosphere flight. We also added support for high-res terrain insets that are bent according the ellipsoid model.
This enables precisely synchronized scenarios for flight simulation or similar tasks (continent-wide road network planning, precise weapon simulation, etc). And the power of UNIGINE's 64-bit coordinates precision is now used to its full extent.
You can create a completely curved world, and object physics behavior will be correct (however, it is important to make sure that the gravity vector is directed correctly in different points).
To bend object geometry, create a GeodeticPivot node, make your objects its children, specify settings and click the Make Curve button. At the moment, the GeodeticPivot node works with the following node types:
There are built-in WGS84, GRS80, GRS67, Airy 1830 and International 1924 reference ellipsoids and you can easily add custom geodetic datums (or another planet reference ellipsoid datums). You would only need to specify the semi-major axis, and the flattening coefficient. Yes, that simple.
Our plans for the next releases are:
- Low-res template of the entire planet Earth
- Seamless atmosphere-to-space rendering transition
- Support for the rest of the object types
Updated Terrain Materials
Terrain material system has been switched to metalness workflow. There's no limit on the number of layers and materials anymore. We reworked the material system and got rid of index textures.
Terrain materials hierarchy became more clear:
- Terrain Base specifies the base relief of the terrain.
- Layers are used to group materials and specify their masks.
- Materials are used for terrain visual representation.
Mask Base logic has been changed to Detail material logic: detail materials use the mask of the "parent" material.
Additional changes are:
- Removed diffuse and specular maps / texture arrays (due to metalness workflow)
- Added albedo and height maps / texture arrays
- Added roughness maps
- Added albedo color and roughness parameter modulation
- Added normal_scale parameter to terrain_base material
- Added render_terrain_anisotropy console command that changes terrain textures anisotropy
- Added render_terrain_refined_albedo, render_terrain_refined_normal and render_terrain_refined_mask console commands that allow using coarse / refined textures for terrain
- Added new terrain material states: subtract_materials, subtract_layers, material_detail, material_roughness, material_normal
Experimental Landscape Tool
Huge terrains are one of the UNIGINE's key features, so in order to streamline workflow and improve productivity of teams creating them we have completely rewritten the Landscape tool. This experimental tool is available in Sim edition only. Currently it features the following:
- Support for multiple data layers aligned by geo-coordinates
- Direct loading of standard file formats: GeoTIFF, DEM, JP2 and many more
- Easy-to-use user interface
- Performance-optimized terrain generation
- Support for curved world model
Next iterations of the Landscape tool are going to introduce procedural rules system, which will be used to procedurally refine / generate content based on geo-data (both raster and vector). Also, non-geo data support is planned for 2.4.
Old Landscape plugin for UnigineEditor is still available as well, until the new tool will gain all of its features.
HTC Vive support
Example project is provided in the Samples (Samples -> UnigineScript -> App -> app_vive_00) section of Unigine SDK Browser.
Metalness Workflow by Default
Metalness workflow materials properties are, compared to specular workflow, much closer to the real-world ones. Being based on the real, physical behavior it is thus somewhat easier for content authors to understand. Most of the advanced digital texture creation tools (3D-Coat, Substance Painter, etc.) are switching to metalness workflow these days.
We decided to switch to metalness as well and made a huge internal change in the renderer and shaders with this release. Specular workflow is still supported, but metalness is used by default from now on. Because of that change, UUSL now provides a new GBuffer structure that supports both specular and metalness workflows, as well as methods to convert specular GBuffer to metalness.
Improved Screen-Space Raytraced Reflections
In this release we restored SSR support with better visual quality.
Improved GGX Mipmaps
We added GGX mips for EnvironmentProbe cubemaps: when you grab the cubemap texture via the EnvironmentProbe node interface, the engine automatically creates GGX mip cubemaps. GGX mips have better quality and meet all the requirements of physically-based rendering.
It doesn't work for EnvironmentProbe's dynamic reflections.
To use this feature in your existing projects, you should re-grab all the cubemap textures for your EnvironmentProbes.
Parallax Depth Cutout
Introduced parallax depth cutout technique that improves parallax mapping quality.
It's visually great: you can see how a mere texture plane looks almost like real geometry. Objects with parallax depth cutout option enabled connect extremely smoothly with the real mesh objects (see the picture below).
Also, this technique improves the SSAO calculation on surfaces with parallax maps.
New Depth of Field Effect
DoF effect has been completely reworked in order to achieve photorealistic effect:
- Enabled Bokeh effect by default. Two more physically correct Bokeh shapes are available: circle and ring
- Improved transitions between in-focus and out-of-focus parts of the image
- Simplified effect settings
- Added chromatic aberration support
- Added visualizer: Rendering -> Buffers -> DoF mask
An example can be found in the Samples demo (Camera Effects section).
Additional bokeh shapes are slated for future releases.
Added flexible TAA settings that enable fine-tuning TAA for different scenes types (Render Settings -> TAA in UnigineEditor).
Those settings let you:
- Control the number of frames for velocity buffer. That reduces the blurring in dynamic scenes with a lot of moving objects
- Clamp the color of the current and previous frame. The image becomes more sharp.
- Fix the flickering of bright thin wires, ropes and lines in dark scenes
- Control the AA detail level.
The respective console commands are render_taa_velocity_clamping, render_taa_color_clamping, render_taa_fix_flicker.
GI by Box Projection
The fact that EnvironmentProbe in UNIGINE 2 can define environment lighting enables reusing it for Global Illumination effects too. In addition to the traditional method of projecting a cubemap onto a sphere, we also provide an optional box projection method (formally, projection onto a cuboid). That works (much) better with indoor scenes (where the rooms tend to be boxes), or box-shaped outdoor scenes (think of a back alley between buildings). Corners are specially treated, too: objects closer to corners are more glossy, that is both more physically correct, and helps fight artifacts.
Note that the effect is mostly visible next to the walls. Moving objects can cast GI light bounces, too; for that you need to enable "dynamic" flag in the EnvironmentProbe (otherwise moving objects will just be accepting the GI bounces from the environment). It is also recommended to use this feature together with SSR to achieve better visual results.
Ship Wake Effects
New FieldHeight node with particle systems can provide an effect of a stern wave (when moving vessels leave a long trail on the water) and a so-called bow wave in front of vessels.
FieldHeight object uses its own height map texture to change global water heights. You can create a new FieldHeight object either in UnigineEditor (Create -> Effects -> Field Height), or programmatically by using the FieldHeight class. render_field_height_resolution console command controls the FieldHeight height texture resolution.
Oil Platform demo provides an example of both stern and bow waves.
By using FieldShoreline, you can create nice swash zones, where waves smoothly fade out right next to the shore. It also adds an effect of wet sand and wet objects on the shore: stones, litter, etc.
You can create a FieldShoreline node via UnigineEditor (Create -> Effects -> Field Shoreline) or programmatically by using the FieldShoreline class. The resolution of FieldShoreline texture can be set by the render_field_shoreline_resolution console command. Also you can enable / disable wetness effect by using render_water_shoreline_wetness console command.
Examples can be found in Port Angeles demo and in the Samples (Water section) demo.
Underwater scenes are now somewhat more realistic, with the advent of the following two changes:
- Added caustics (can be enabled / disabled in the water_global_base material)
- Improved underwater light shafts (can be enabled / disabled by render_water_shafts console command)
- Added 3D texture for detail state of decal_base material: you can set transformation of the 3D texture now
- Added world align mode for decals (decal-independent UV for projection)
- Added alpha blending mode for decals (detail and base alpha multiplication)
- Added water decals option: decals can be projected onto the water surface (you should enable the water decal option in decal_base material)
- Added screen projection state to decal_base material (mesh decals are projected onto each surface behind the mesh)
- Restored parallax support for decal_base material
Other Renderer Improvements
- Restored support for orthographic projection camera
- Added inverse depth (inverse Z buffer) support instead of logarithmic
- Renamed base_transform to uv_transform material parameter
- Removed deferred transparent pass: all transparent objects are rendered in the forward pass now
- Added support for the forward transparent pass for LightEnvironmentProbe
- Fixed GGX model
- Added parallax for decals and shadows
- Added colored specular highlights for light sources
- Added Quad Buffered Stereo support for AppProjection
- Added render_water_opacity_depth console command for water soft interaction (for particles). This command also activates the DoF effect for water
- Renamed Decal Mask to Material Mask
- Moved Alpha Test option to Transparency options
- Added RG11B10F support, it can provide noticeable performance boost for interior scenes (disabled by default)
- Added *_sh postfix for shader textures (similar to *_alb or other texture postfixes)
- Added new console commands to control the per-object light source count limit in the forward rendering material: render_world_lights_per_forward_object, render_omni_lights_per_forward_object, render_proj_lights_per_forward_object, render_env_probes_per_forward_object
- Added a per-material option to disable post-effects (SSAO, SSR, SSS, DOF, Motion Blur, Sun shafts) in materials' State tab.
- Added triangle blur for render_blur material
- Added disable_soft_shadows parameter to particles_base material
- Added jitter transparency state to mesh_base material (alpha test is performed by using noise)
- Added MaxWarmingTime parameter for Particle Systems
- Replaced render_shader_define console variable by render_defines console command
- Added render_textures_max_resolution console command to control max resolution of the textures.
- Fixed velocity calculations for multi-window rendering (AppWall, AppProjection, etc.)
- Added support for QuadBuffered stereo in AppProjection
- Fixed object shaking in WidgetSpriteViewport
- Various bugfixes
Experimental New Editor
There were a lot of UnigineEditor improvement requests, we heard you, and our Tools Team has been working on a shiny new version for a few months now. Today, we're proud to announce that the core internal subsystems are all done, we have started working on the GUI, and the experimental new editor build is now immediately available to customers starting with the 2.3 release.
- Completely rewritten from scratch in C++ (faster, better architecture)
- Greatly improved usability
- Qt-based interface (native widget look and feel)
- Deep integration with the asset browser
- Hot loading into the running engine instance is back! (editor2_load / editor2_quit console commands)
- Customizable UI layout with dockable panels
- Extensible by plugins
Please bear in mind that this isn't yet a production-ready version, but rather an early technical preview. To try it out, check Options -> Use Editor2 (experimental) in the SDK Browser. Production version will be released along with SDK 2.4.
FBX Export Improvements
- Added support for object dynamic meshes
- Added support for vertex colors
- Added enabling / disabling dialog option for exporting lights, cameras, normal maps
- Other minor bugfixes
C++ callbacks changes: declarations more strict from now on. For example, old callback declaration could look like:
virtual void setEnterCallback(CallbackBase *func) const = 0; virtual void setLeaveCallback(CallbackBase *func) const = 0;
And the respective new one is:
virtual void setEnterCallback(Unigine::CallbackBase1< Ptr<Body> > * func) = 0; virtual void setLeaveCallback(Unigine::CallbackBase1< Ptr<Body> > * func) = 0;
So as you see, the callbacks are now (partially) type-safe.
Other API improvements and changes:
- Fixed C# API set*Callbacks
- Fixed PhysicalTrigger "Leave" callback behavior
- Added all the missing methods to C# API MathLib
- Added convenient math constants to C++ / C# API:
- vec2::ZERO, vec2::ONE, vec2::EPS, vec2::INF (and the same for dvec2, vec3/dvec3, vec3/dvec4)
- vec3::UP, vec3::DOWN, vec3::FORWARD, vec3::BACK, vec3::RIGHT, vec3::LEFT (and the same for dvec3)
- hvec2::ZERO, hvec2::ONE (and the same for hvec3, hvec4, ivec2, ivec3, ivec4, bvec4)
- mat2::ZERO, mat2::ONE, mat2::IDENTITY (and the same for mat3, mat4, dmat4)
- quat::ZERO, quat::IDENTITY
- Added new methods for mat4 / dmat4 to C++ / C# API: getUp(), getDown(), getForward(), getBack(), getRight(), getLeft()
- Added new MathLib functions:
- getAngle() to return non-negative convex angle (non-reflex) within 0 < a < 180
- getAngle() to return convex angle (non-reflex) (can be negative)
- rotateTowards() to rotate quat / vec3 about some max angle
- Renamed C++ UnigineUtils.h to UnigineSort.h
- Added new UnigineUtils.h which contains different helper functions
- Added Camera::getDirectionFromScreen() method to C++ API (similar to UnigineScript's getPlayerMouseDirection() from utils.h)
- Fixed Viewport::renderNodeImage2D() incorrect behavior
- Added VIEWPORT_SKIP_FORMAT_RG11B10 flag for RG11B10 rendering control
- Added a local_space flag to Viewport::renderImageCube() method:
camera angle is now accounted for when local_space==true
- Added flat/curved topology-related methods to Node class (supported by ObjectMeshStatic / DecalMesh / ObjectTerrain nodes):
- Added flat/curved topology-related functions to ObjectTerrain
- Added new ObjectParticles methods: getBoundBoxParticles(), getBoundBoxSimulation()
- Added new FileSystem methods: addDirectory(), reloadPackage()
- Added Stream::getType() method with available type STREAM_BLOB | STREAM_FILE | STREAM_SOCKET | STREAM_USER values
- Added new property methods and flags for LightEnvironmentProbe
- Added Geometry class functions to work with geometry
- Updated Node class functions
- Updated Player class functions
- Updated Camera class functions
- Updated DOF methods in the Render class
The complete list of API changes is available in the API Migration Guide.
- Added checkMask() method to check if the given bits are all set in a bitmask
- Added isOrtho() method to check whether the camera's projection is orthographic or not
- Added INIT_TEXTURE_INT() for int texture initialization
- Added loadGBufferVelocity() and loadGBufferMaterialMask() methods to GBuffer.
- Changed TEXTURE_2D_CUBIC() function arguments
- Added new constant masks
- Added new shader parameters: s_material_mask, s_sky_up, s_sky_altitude, s_sky_transform
- Added component-wise min/max functions to UUSL
- maxFloat2() / maxFloat3() / maxFloat4() support up to four arguments
- minFloat2() / minFloat3() / minFloat4() support up to four arguments
- Added uint32 to half2 decompression function floatDecompressHalf1616()
- Added geodetic-related functions:
- struct GeodeticTopology, basic GPU-side curved geometry topology storage
- geodeticTopologyDefault() constructor
- geodeticTopologyCalculateUV() to calculate topology texture UV coordinates
- geodeticTopologyCalculateCurved() to fetch curved data from topology texture
- geodeticMul4() to apply transformation to curved point
- geodeticBasis() to build transformation based on curved data
- Added support for unpackHalf2x16 (for OS X) from GLSL 4.2 standard
- Added support for images larger than 2 GB.
- Added support for absolute paths in state_save / state_restore
- Updated Oculus SDK to 1.6
- Fixed crashes under Linux / Mac OS X platform on shutdown
- Various bugfixes and minor improvements
In order to lower the entry barrier for new users, we started series of video tutorials on basic topics.
Documentation improvements never cease to stop, and the following changes have been made based on your feedback:
- Added a Migration guide section for migrating your projects from 2.2.1 to 2.3 version
- Extended C++ / C# / UnigineScript API references with samples, code snippets and usage examples
- Updated (completely) the following articles:
- Added new articles:
- Added more articles in Chinese
- Improved some technical issues of online documentation:
- Improved search engine (for more relevant results)
- Improved UnigineScript and UUSL code highlighting
- Other minor changes and fixes
Offline documentation is now available via the Knowledge section in the UNIGINE SDK Browser. You can download multiple different versions, as necessary.