Jump to content

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


photo

Recommended Posts

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:

 

ssrtgi_gi_on_off.gif

 

Ambient Occlusion with more realistic shadows between the objects:

 

ssrtgi_ao_on_off.gif

 

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

 

ssrtgi_bentnormals_on_off.gif

 

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.
ssshadows_on_off.gif

 

ssshadows_2_on_off.gif

 

Use the render_shadows_screenspace console command to enable the effect.

 

Improved Soft Shadows

 

Improved quality of soft shadows.

 

soft_shadows_on_off.gif

 

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.

 

render_callbacks.jpg

 

See C++ samples: source/samples/Api/Render/GBufferWritesource/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).

 

translucence_on_off.gif

 

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.
roads_sm.jpg

 

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.
railroad.jpg

 

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.
landcover.jpg

 

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.
landscape_ui.png

 

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).

 

superposition0_sm.jpg

 

superposition1_sm.jpg

 

superposition2_sm.jpg

 

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).
  • 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
Link to comment

Known Issues
 
Engine (2.5, ver-2.5-b7bac36 May 31 2017):

  • ObjectVolumeBox + volume_fog_base material have rendering artifacts on DX11 API and not working completely with OpenGL; [En-2912]
  • WidgetSpriteViewport: No sky rendering in widget; [En-2911]
  • WidgetSpriteShader: rendering artifacts; [En-2910]
  • ObjectTerrain: shader warning x4121 when world with terrain is loaded (performance is not affected). [En-2904]

Editor (2.5, ver-2.5-b7bac36 May 31 2017):

  • Enabled Plays.TV from AMD will result in Editor instability. Solution: uninstall plays.tv completely.
  • Warning: NameSpace::check(): unused variable "Creator::FBX::info_b".

SDK Browser (1.7.x):

  • Sometimes buttons like "Run" will not react on click action.
  • Run / Copy demo as project buttons available during the demo installation process.

How to submit a good bug report
---
FTP server for test scenes and user uploads:

Link to comment

Hi,

 

I have a question about the following update posted in the 2.5 release notes:

 

"Refactored ObjectMeshClutter / ObjectMeshCluster instancing"

 

Has this resulted in performance improvements at all?  If not then what does this mean for the developer?  API changes?

 

Cheers,

Simon

Link to comment

Hi Simon,

 

That refactor give us a little boost in the synthetic tests with ObjectMeshClutter / ObjectMeshCluster nodes (up to 5%). 

 

More likely, in a real-world scene with multiple objects, sky, sun and shadows there will be very little changes or you can't find them because you already CPU or GPU-bounded.

 

Thanks!

How to submit a good bug report
---
FTP server for test scenes and user uploads:

Link to comment

Hi,

 

I used the landscape tool for generating the road by vectors, and I found that the center of the road is transparent.

 

And I want to ask for 2 questions:

-Is any wrong steps I have made?

-Could I know the formula for the transformation between cartesian with longitude and latitude?

 

Thanks!

Link to comment
Hi liang.hao,
 
Step by step instructions for the road generation you can find in docs here:
 
For the more specific advices about transparency of the road, I'm afraid, we need node and textures, you've generated the road from.
 
As for coords transformation formula: 
 
Geodetic to ECEF you can find in the article here.
ECEF to geodetic you can find in the following article at 2.2 section: https://microem.ru/files/2012/08/GPS.G1-X-00006.pdf
Link to comment
×
×
  • Create New...