UNIGINE 2.5: Screen-Space Ray-Traced Global Illumination, Vector Roads API, Landcover Data Support, Superposition Demo
- 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.
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:
- Creation of a WorldSplineGraph node from a SplineGraph file.
- Generation of geometry along the graph segments in stretching mode.
- Creation of a WorldSplineGraph node from a SplineGraph file.
- Generation of geometry along the graph segments in tiling mode.
- 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.
- 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 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 chromatic aberration (available on ultra refraction settings).
- Added refraction settings (render_water_refraction_quality console command).
- 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.
- 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.
- 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
- The complete list of API changes is available in the API Migration Guide
- Added C# and C++ examples for the following articles:
- Added a new C++ programming quick start tutorial (for sections 6 - 16, videos are provided).