Table of contents: Recent news: 2017-05-31 UNIGINE 2.5: Screen-Space Ray-Traced Global Illumination, Vector Roads API, Landcover Data Support, Superposition Demo 2017-03-01 UNIGINE 2.4.1: Stabilization, Interactive BIM Demo 2017-02-06 UNIGINE 2.4: New Multi-Layered Volumetric Clouds, New Terrain, Oil Refinery Demo 2016-09-19 UNIGINE 2.3.1: Landscape Optimizations, Compute Shaders Support, Renderer Optimizations 2016-08-05 UNIGINE 2.3: Round Earth, Shoreline, New DoF and GI, HTC Vive Support 2016-04-07 UNIGINE 2.2.1: Orbits Demo, Water Improvements, Oculus CV1, and Bugfixes 2016-03-17 UNIGINE 2.2: New Geometric Water, Unified API, Geodetic Improvements 2015-12-10 UNIGINE 2.1.1: UUSL Improvements, SDK Browser Usability, and Bugfixes 2015-11-20 UNIGINE 2.1: New Sky, Increased Depth Precision, Improved AA, Optimizations, Bugfixes 2015-10-09 UNIGINE 2.0: Fully Deferred Rendering, TAA, Data Streaming Improvements, Performance Optimizations

UNIGINE 2.5: Screen-Space Ray-Traced Global Illumination, Vector Roads API, Landcover Data Support, Superposition Demo

Key Changes

  • New Screen-Space Ray-Traced Global Illumination (SSRTGI).
  • Screen-space shadows.
  • 3D spline system.
  • Vector roads API.
  • Landcover data support.
  • Terrain modification API.
  • C++ programming quick start tutorial.
  • New Superposition demo with VR features.

Screen-Space Ray-Traced Global Illumination

The new SSRTGI (Screen-Space Ray-Traced Global Illumination) technology invented by UNIGINE R&D team is a set of screen-space ray tracing techniques with real-time performance level. Their combination enables incredibly realistic lighting and shadow play simulation for real-time interactive rendering.

No light baking is required (removing the phase of painful scene preparation and long offline rendering), every object can be freely moved (enabling a new level of interactivity even for the most detailed interior scenes).

Thanks to SSRTGI the Global Illumination recreates light reflections from the object’s surface:

Ambient Occlusion with more realistic shadows between the objects:

Bent Normals used in this technique help to smooth ambient lighting:

All SSRTGI settings are available in the Rendering Settings -> Global Illumination tab.

Screen Space Shadows

Introducing the screen space shadows (they can be mixed with regular ones) with the following features:

  • Infinite visibility distance: distant objects, trees and grass can cast shadows even next to the horizon.
  • Per-pixel detail at any zoom level.
  • Per-light work.
  • High-quality penumbra.
  • Performance does not depend on polygon or object count.
  • Support for depth cutout parallax.

Use the render_shadows_screen_space console command to enable the effect.

Improved Soft Shadows

Improved quality of soft shadows.

Access to the Rendering Sequence

You can now use callbacks before and after any rendering pass: thus, you can get access to the intermediate state of rendering buffers and matrices. Some of them are read-only, but most of them can be modified ad hoc: int Viewport::addCallback(int callback, Unigine::CallbackBase * func). The callback can get a Renderer pointer.

Thanks to this feature you can get direct access to G-Buffer, SSAO, lights or any other effect. One more example: you can now create a custom post-process and apply it before TAA, thus, getting correct antialiased image as a result. You can even create your own custom light sources, decals, etc - whatever you need. The feature is also useful for custom sensors view.

See C++ samples: source/samples/Api/Render/GBufferWrite, source/samples/Api/Render/GBufferRead.

Moreover, Viewport class now has different rendering modes: RENDER_DEPTH (depth only), RENDER_DEPTH_GBUFFER (depth + G-buffer), RENDER_DEPTH_GBUFFER_FINAL (depth + G-buffer + final image). This can give you extra performance boost if you need only depth info, for example.

Transparent Blur Effect

Added new transparent_blur state to the mesh_base material, it can be used for matte transparent objects (use render_transparent_blur 1 console command to enable).

Vector Roads API

UNIGINE now supports procedural generation of roads and communications via code on the basis of vector data. The following features are offered:

  • Flexible tagging system to filter the data from a vector source (currently only *.SHP files are supported) to be used for generation.
  • Spline graph generated on the basis of the data selected from a vector data source.
  • Basic object representing a part of a road or a pipeline can be tiled or stretched along the segments of the spline graph (currently an ObjectMeshStatic with an arbitrary mesh and material can be used as a basic object). It enables automatic creation of large amounts of content on the scene.

Terrain Modification API

ObjectTerrainGlobal now supports low-level modification making it possible to control virtually every pixel of it tiles:

  • Add, remove or replace tiles.
  • Make hills, holes, shell craters on the terrain surface.
  • Adjust alignment of terrain surface with roads and buildings.
To edit ObjectTerrainGlobal tilesets use the new TileSet class. There is also a new TileSetFile class available in the API to handle tileset container files.

Added a new C++ API sample (samples/objects/terrain_global_00). It features:

  • Procedural generation of a large terrain with 3 insets.
  • Demonstration of capabilities of low-level terrain modification C++ API.

3D Spline System

UNIGINE now has a flexible 3D spline system with a wide range of applications, particularly procedural content generation. Vertices and segments of spline graphs are managed via the SplineGraph class. WorldSplineGraph node is used to place basic objects along the spline graph. Each WorldSplineGraph node can have a single or a set of basic objects. An arbitrary number of WorldSplineGraph nodes can be added to the scene.

WorldSplineGraph nodes can be created and modified via API using the WorldSplineGraph (currently works with ObjectMeshStatic only):

  • 2 modes are supported:
    • stretching: basic objects are stretched along the spline segment.
    • tiling: basic objects are duplicated along the spline segment.
  • Forward axis selection for stretching / tiling basic objects.

Added new C++ API samples:

world_spline_graph_00 featuring:

  • Creation of a WorldSplineGraph node from a SplineGraph file.
  • Generation of geometry along the graph segments in stretching mode.

world_spline_graph_01 featuring:

  • Creation of a WorldSplineGraph node from a SplineGraph file.
  • Generation of geometry along the graph segments in tiling mode.

spline_graph_00 featuring:

  • Creation of a SplineGraph from scratch.
  • Movement of a node along the segments of the SplineGraph.

Landcover Data Support

Generation of grass and clutter masks is now available. Landcover objects can now be generated procedurally on the basis of imagery data stored in a single- or a 3-channel image file. Creation of forests, meadows, etc. is now just a matter of a couple of steps. It features:

  • Flexible tagging system to filter and categorize the data from a data source to be used as a mask for generation.
  • Basic object (currently an ObjectGrass, ObjectMeshCluster or ObjectMeshClutter) representing a segment of a forest or even a small neighbourhood can be duplicated over a mask.

Landscape Tool

  • Improved UI.
  • Added vector source type with the ability to create tags and filter vector data using attribute filters.
  • Added generation of roads and communications (WorldSplineGraph objects) based on vector sources data.
  • Added the ability to split graph segments into subsegments with a given length to improve alignment of vector objects with the terrain surface.
  • Added landcover source type (1 or 3 channel images) with the ability to create tags and filter landcover data (for 1 channel: range of values, for 3 channel: color and bias).
  • Added generation of landcover objects. Creating tilesets of objects of certain type with masks, based on landcover tags.
  • Added generation modes (only landcovers / only roads / only landcovers and roads).
  • Added constraints for play area position.
  • Added rectangulars on play area bounds to visualize areas of stretching.
  • Automatic creation of LODs for data sources (faster generation of far LODs and fixed filter problem).
  • Improved update performance for large projects (when settings are changed).
  • Removed RAM limit option.

Superposition Demo

Superposition demo is an editable version of Superposition Benchmark. It has a lot of interactive features to showcase rendering capabilities of the engine.

  • Top-notch visuals with even more realistic graphics and lighting thanks to new unique SSRTGI dynamic lighting technology.
  • More than 900 interactive objects.
  • Free interactive mode with mini games.
  • Scalable quality settings, including extreme Ultra HD 4K, 8К.
  • VR support (Oculus Rift and HTC Vive).

More Rendering Improvements

  • All render console commands are now implemented as methods of the Render class.
  • High-quality upscaling of post-process effects is now available: even if rendered with half or quarter resolution, effects still look very nice. At the moment the feature works with SSRTGI enabled only. It is controlled by render_ssrtgi_upscaling console variable.
  • Improved quality of DoF, SSR and motion blur effects.
  • Added texture converter for conversion from the Specular to the Metallness workflow as a plugin to the Editor. The corresponding methods are: Render::convertImageSpecularToMetalness and Render::convertColorSpecularToMetalness.
  • Occlusion queries now disable shadows for lights that are not visible.
  • Added overlap option to the material. This option makes it possible to render objects at the final stage of the rendering pipeline ignoring post effects (available for transparent objects only). This option can be useful for UI rendering.
  • Added depth_test option to the material (available for transparent objects only).
  • Added environment probe ambient contrast slider.
  • Added GI parallax / parallax blending for environment probe texture.
  • Added supersampling for environment probe grabbing.
  • Added sun color modulation for environment probe.
  • Velocity buffer now supports FOV and aspect change.
  • Added light intensity adjustment for ObjectVolumeBox when view direction corresponds to the direction of the light rays.
  • Added lighting of particles by environment probes.
  • Added render_virtual_resolution console command enabling high resolution (e.g. 8k) rendering regardless of actual monitor's resolution.
  • Added render_environment_cubemap_blend console command for blending background environment.
  • Fixed CloudLayer reflections in WaterGlobal with planar reflections on.
  • Added a new experimental debug_materials material. This material can be used for debugging of image generation stages.
  • Changed noise algorithm.
  • Fixed incorrect shader uniform name for GUI transform.
  • Added soft shadows for particles.
  • Refactored clouds:
    • Fixed one-frame lag for clouds ground shadows.
    • Improved lighting.
    • Fixed rendering near screen borders.
  • Refactored water:
  • Added multithreading to rendering of shadows as well as to rendering of OmniLights without shadows.

The complete list of Console command changes is available in the Console Migration Guide.

Other Changes

  • Refactored ObjectMeshClutter / ObjectMeshCluster instancing.
  • Added an option of merging the ObjectMeshSkinned surfaces.
  • Moved GPU monitor update from the main thread to a separate one. Now GPU monitor retrieves information of GPU utilization.
  • Fixed engine crash by Unigine::Interpreter::removeExternClass.
  • Removed obsolete Schemer and Skinner systems.
  • Sound:
    • Added workaround for a broken HW with audio device connection lost.
    • Removed 30 fps update lock.
    • Added precise sound source offset measurement.
  • Fixed clutter and grass intersection with curved TerrainGlobal.
  • Changed data storage format for ObjectTerrainGlobal: now tileset or UTS files are used instead of UNG (reducing RAM cost and improving performance). Delete old terrain data and use Landscape Tool to generate it again.
  • Added TilesetFile console tool to unpack data from UTS files.
  • Fixed Tracker track parameter reload logic.
  • Video grabber: fixed applying track changes.

Documentation and Video Tutorials