Jump to content

UNIGINE 2.18.1: Upscalers, Optimized Presets, In-App Video Streams, MATLAB Integration


Recommended Posts

 

Key Changes

  • Upscaling support: NVIDIA DLSS 3 and AMD FSR 2.2 (experimental)
  • CUDA integration for Vulkan and DirectX 12
  • Optimized quality presets with up to 80-90% performance boost
  • Updated MATLAB integration via ROS bridge
  • In-app video streams playback
  • Improved Surface Profiler tool
  • Dependency tracking for runtime-nodes
  • Multi-language UI in Editor and SDK Browser
  • Simplified scene import from Unity projects
  • Free learning course updated

title_sm.jpg

Advanced Upscaling: DLSS and FSR (Experimental)

We continue to enhance the performance of our engine to incorporate new features, support increasing resolutions, and add greater realism to the final visuals, all within the same stringent frame budget. The importance of upscalers cannot be overstated in this context; they reduce the need to render more pixels for higher resolutions, thereby freeing up resources for other critical enhancements and maintaining acceptable performance levels. To this end, we have integrated support for NVIDIA DLSS 3 (Deep Learning Super Sampling) and AMD FSR 2.2 (Fidelity FX Super Resolution). These technologies enable upscaling on a broad array of devices across different manufacturers and cater to various quality presets for both static and dynamic scenes.

upscalers_performance_sm.jpg

This feature is currently in the experimental phase and only supports configurations using Windows and DirectX 12. Detailed requirements and compatibility limitations for each upscaler are outlined in the accompanying documentation.

2_sm.gif

3_zoomed.gif

Optimized Quality Presets

UNIGINE Engine includes a vast array of settings and parameters designed to control rendering, many of which are specific to certain cases and scenes and may not be needed in others. To accommodate various scenarios, we offer extensive optimization options. We have fine-tuned the quality presets for our UnigineScript sample pack, as well as for the C++ and C# sample packs included as demos in the SDK. These optimizations ensure smooth operation across both high-end systems and less powerful platforms, providing all the necessary options and settings required for optimal performance.

2.18

perf_218.jpg

2.18.1

perf_2181.jpg

The average performance gain provided by this optimization for C++, C#, and UnigineScript samples comprised 80-90% (test configuration at 1920x1080 resolution: Intel i3-4160; NVIDIA GTX 1050 Ti (4GB); 8GB RAM).

perf_samples_script.png

perf_samples_cpp_cs.png

VR Improvements

A series of enhancements and fixes have been implemented in the UNIGINE Core VR system to boost its stability and reliability. These improvements include:

  • Fixed an issue with separate viewports not sharing Auto-Exposure and White Balance level, causing visual inconsistency of peripheral displays on Varjo HMDs.
  • Fixed a crash on switching vr_foveated_rendering_enabled several times when using Varjo VR API.
  • Fixed the issue with the peripherial rendering mode in VR disabled by default (returned the enabled default state).
  • Fixed some of Varjo warning messages.
  • Fixed issues with vr_mirror_mode 1 and 2 causing lots of debug messages about incorrect scissor rectangle in video debug mode on Vulkan.

We have also optimized the quality presets for VR project templates to ensure optimal performance at each quality level.

Starting with version 2.18, Vulkan is the principal fully functional graphics API for Linux, and version 2.18.1 marks the discontinuation of the OpenGL support for VR. The only remaining option for VR on OpenGL is to use deprecated plugins such as OpenVR, Varjo, and Oculus.

ROS + MATLAB Integration

scheme_sm.jpg

We have added a basic example of an Advanced Driver-Assistance Systems (ADAS) model, developed using MATLAB, that communicates with a UNIGINE-powered vehicle simulation via a ROS (Robot Operating System) bridge. Essentially, MATLAB scripts are used to control a virtual vehicle within the real-time 3D UNIGINE-based application through the network using the ROS communication protocol. Simulations like this are instrumental in creating vehicles equipped with ADAS or entirely autonomous vehicles.

This example is available as a template project in the UNIGINE 2 Sim SDK.

CUDA Integration for Vulkan & DirectX 12

UNIGINE Sim SDK now contains a new set of samples demonstrating how to interact with an external graphics API using new ResourceExternalMemory and ResourceFence classes in UNIGINE API). Although the samples show interaction with NVIDIA CUDA Toolkit, you may use them as the basis for integrating the Engine GAPI (Vulkan, DX11, DX12) with other GAPI (OpenGL, DX, CUDA, etc.) that can accept the handle and import a synchronization primitive (such as external semaphore in CUDA).

cuda_interop.jpg

This approach allows interaction of various APIs using different GAPIs, such as interaction of Media Foundation using DX11 with the Engine using DX12 or Vulkan.

The samples also illustrate how to take the data directly from the video memory without CPU roundtrip and processing it using non-engine graphics API.

cuda.jpg

The difference in GPU -> CPU texture transfer performance made via CUDA 12.3 and by the Engine are shown in the table below (tested on our working configurations). Average performance gain with CUDA comprised x10 to x24 depending on the viewport resolution.

cuda_engine_comparison.png

You can check the results on your PC just by launching the new CUDATextureTransfer sample and enabling the Profiler.

The list of samples includes:

  • CUDAMeshDynamic: vertices of a shared dynamic mesh are processed on GPU using CUDA.
  • CUDAStructuredBufferWrite: particles in a shared structured buffer are updated on GPU using CUDA, and rasterized manually using Unigine Material with Compute Shader.
  • CUDATextureTransfer: a shared texture is processed with CUDA and copied from video memory to RAM into Unigine Image.
  • CUDATextureWrite: a shared texture is processed with CUDA and displayed on the Unigine Object as a texture on a cube.

In-App Video Streams Playback

Hardware decoding of low-latency video streams from online-sources in your applications built on the basis of UNIGINE Sim SDK edition is now available with a new UnigineVideoTexture plugin which you can download from the Add-On Store.

texture_streaming_plugin.png

The plugin currently supports DirectX 11 GAPI and Windows 10+ operating systems and enables you to stream video from VP9-encoded online RTSP/RTP sources to a UNIGINE texture (sound data is ignored). This texture can be used in any material and applied to various objects in your scene (e.g. to output video to a background TV-panel in a virtual studio or create a multi-camera surveillance system).

This is not a generic solution for in-app video decoding and has a limited scope of applications.

videotexture.gif

The plugin package also contains a sample scene with textures to which you can stream your video and a guide on how to start your own stream for quick testing.

Other Engine Improvements

  • Fixed an issue with SystemProxyQt class resulting in window canvas becoming white after calling EngineWindow::minimize() (Viewer demo, ViewportQt sample, and Qt-Based project template affected). Minimized, Maximized, and Restored window event handlers were added.
  • Fixed detection of collision between particles and physical shapes at angles of 90 degrees and less.
  • Fixed a crash of QT-based projects on shutdown when the Fast Shutdown option is enabled.
  • Fixed an issue with ignoring the specified gui_path when creating the EngineWindow.
  • Fixed an issue resulting in crashes and freezes on loading NodeReferences that contain a Navigation Mesh.
  • Fixed an issue with flickering of Mesh Clutter objects (added as children of the Landscape Terrain object) having the Intersection option enabled in case the camera is outside their bounds.
  • Fixed an issue resulting in an exception thrown in case of using a ParameterFile in a C# component (a check for the Unigine.File type added when creating a component from a property).
  • Fixed a crash on AMD RX 6800 (DX11) when enabling Field Shoreline after creating the Shoreline texture.
  • Fixed rendering on lens flares for LightWorld / LightOmni / LightProj sources on DirectX12.
  • Fixed an issue with rendering an ObjectText in case its pivot is beyond the camera's viewing frustum.
  • Fixed visual artifacts related to texture cache.

Simplified Scene Import from Unity

unity2unigine_sm.jpg

Switching technologies is a major decision, primarily because of the time required to replicate your project in a new environment. The transition from Unity to UNIGINE is now significantly easier thanks to a new tool developed by one of our community enthusiasts. This tool facilitates the automatic transfer of entire scene hierarchies, which includes:

  • Skinned and Static Meshes: Transfers all meshes along with their Levels of Detail (LODs).
  • Material Assignments: Applies all materials to objects, including all utilized textures.
  • Physics Settings: Integrates physics configurations such as RigidBody, primitive and convex colliders, and collision matrices.
  • Prefabs and C# Components: Migrates prefabs and C# components attached to objects.

While this tool handles the bulk of the mechanical transfer, manual intervention is still necessary for fine-tuning parameters and migrating custom code to UNIGINE. The tool's developer promises additional features in future updates to further streamline the process. This enhancement not only saves time but also minimizes the challenges associated with switching development environments, allowing you to leverage UNIGINE's powerful features with less effort.

The tool includes two plugins:

  • Unity Editor Plugin (Unigine Exporter) that exports your Unity scene to a JSON file (get from Unity Asset Store).
  • UNIGINE Editor Plugin (Unity Importer) that takes this JSON file and generates a similar scene in UNIGINE (get from UNIGINE Add-On Store).

UnigineEditor

editor_chinese_sm.jpg

Dependency Tracking for Runtime-Nodes

Sometimes it might be useful to track dependencies between runtime-nodes - nodes that currently exist in the world opened in UnigineEditor, including the ones that are stored only in RAM and have not been saved to a file (*.world / *.node) on the disk. It can help avoid accidental removal of nodes somehow used by others, as well as to analyze / validate the logic of node interactions (e.g., to check if the right nodes are used in components, etc.).

node_dependencies.png

Now to find all runtime nodes that use the selected node or group of nodes, right-click on them in the World Nodes Hierarchy and choose Show World Nodes Using This One. Please refer to this article for more details.

Better Surface Profiler

The Surface Profiler has become more convenient now enabling you to monitor all surfaces in the current world rather than only the ones seen in the viewport. Just select the new mode From World in the Location dropdown.

surface_profiler_sm.jpg

Other UnigineEditor Improvements

  • Fixed saving of the Particles Field Mask value eliminating an issue with resetting a default value for this option after loading a Particle System from a NodeReference.
  • Fixed issues with baking masks of the Landscape Terrain and editing them in Landscape Paint Mode.
  • Fixed an issue with applying changes to graph-based materials after replacing some assets via Replace Asset Links, such materials are now reloaded automatically.
  • The VR Viewport is now available in the Editor when running it with VR support (-vr_app argument).
  • Fixed incorrect baking of emission data into a lightmap for one-sided materials.
  • Fixed a crash on changing the size of the Materials window and switching a State in filters.
  • Fixed an Editor crash on reimporting an asset after it has been deleted (Debug binaries).
  • Fixed brush editing of the Terrain Global object in Terrain Paint Mode.
  • Fixed a crash on saving a track in the Tracker tool.
  • Fixed a crash on applying a Filter by Mask in the Content Profiler tool.
  • Fixed crashes on working in the Texture Paint Mode related to state refresh (e.g., on creating a child material for ObjectMeshSkinned, etc.).
  • Fixed an issue with assigning a newly created texture in the Texture Paint Mode preventing the texture from being edited.
  • Fixed an issue with increased release time for brushes after releasing the left mouse button when painting on compressed textures.
  • Fixed saving the Mask Terrain parameter value for a Mesh Clutter eliminating an issue with resetting the mask to None on selecting the node after reloading the world.
  • Fixed an issue with selecting the Base option for the Detail UV mapping in the Material settings.
  • Fixed a crash after disabling the Frame-Based option for RagDoll body bones.
  • Fixed an issue with inability to set the joint parameter values.
  • Fixed a crash on replacing a mesh of a Dynamic Mesh object with the one having less surfaces (Debug binaries).
  • Fixed issues with changing GUIDs of components and IDs of nodes inside a NodeReference after editing it.
  • Fixed an issue with brush editing of an ObjectTerrainGlobal on Vulkan and DirectX12
  • Fixed an issue with flickering of objects in the viewport when working in Material Editor.
  • Fixed an issue with dragging a texture from the Asset Browser to the Material Editor area resulting in cache errors.
  • Fixed an issue with incorrect displaying of compression values on opening a .sworm project as well as displaying the amount of memory required for terrain generation in the Sandworm tool.
  • The Cluster Editor tool has been upgraded fixing all issues related to releasing RAM resources resulting in excessive memory consumption and crashes when painting in the Cluster Paint Mode with the Single Object option selected.
  • Fixed a number of DPI Scaling issues resulting in incorrect interface rendering on Windows and Linux.
  • Editor Localization - UnigineEditor interface now supports Chinese, German, and Russian, more languages to follow.
  • Fixed errors in the Editor console at startup (Community edition).
  • Updated Rendering Debug items according to current naming of buffers.
  • Fixed an issue resulting in a failure to grab an image by the VideoGrabber tool after changing the image bit depth.
  • Package assets are now imported in a specific order eliminating Material Graph loading and generation errors.
  • Fixed an issue with auto-enabling a copy of a disabled node upon pasting it.
  • Fixed an issue with saving Editor config files in certain cases resulting in failures to apply configurations or recreate missing config-files.
  • Fixed a crash on an attempt to edit a spline in a WorldSplineGraph.
  • The Scale manipulator is no longer available for WorldSplineGraph segments.

Image Generator Updates

This release also brings a number of updates and fixes for the IG Application Template extending its functionality, making it more stable and easier to use. The IG Configuration file (ig_config.xml) can now be stored outside the data folder, enabling you to share the same configuration between different projects.

Extended DIS Connector

We have extended support of the DIS (Distributed Interactive Simulation) protocol - an IEEE standard for real-time platform-level communication between different simulations across multiple host computers. The API of the DISConnector class has been updated now enabling you to:

  • initialize DISConnector with a custom user connection as well as shut the DISConnector down without stopping this custom connection.
  • manage App, Site, and Exercise IDs on the fly.
  • send custom user packets.
  • set your own custom filtering for packets and entities.

For more details see API Migration Guide.

Geo Coordinates in Editor

When working with models of the real world in your applications built using georeferenced terrain, like the ones you make in UNIGINE using the IG Template, it is natural to place objects by their geo-coordinates (Latitude, Longitude, Altitude) not just (X, Y, Z). This feature is now available in the Editor along with visualization of the geodetic origin in case the Geodetic plugin is loaded.

geo_coordinates_fin_sm.jpg

Free Learning Course Updates

unigine_learn.jpg

Our free learning introductory course on UNIGINE has been updated to the latest UNIGINE 2.18.1 SDK! The updated add-on is available on our Add-On Store. The C++ version of the course is on the way - stay tuned!

This course is designed for use with the free UNIGINE Community SDK and available for all - no registration required!

Ready to Get Started? Sign up for free Community SDK, go to https://learn.unigine.com/ now and embark on your UNIGINE learning adventure!

Documentation

Added a set of new ultrashort HowTo quick tip videos in English, Chinese, and Russian:

2.19+ Work In Progress

Version 2.18.1 primarily focuses on stabilization, paving the way for the upcoming features in the 2.19 branch which are nearing completion. Here's what you can anticipate:

  • A multi-threaded renderer that significantly enhances CPU performance
  • An upgraded character animation system
  • Major optimizations to reduce RAM usage
  • Asynchronous node loading for improved efficiency
  • Faster engine startup times
  • Integration with .NET 8
  • Support for OpenXR
  • Simplified cloud deployment
  • Plus, many more features to come!

Thank you for reading, and don't miss the updates as we keep working to make UNIGINE even greater!

  • Like 6
Link to comment

Known Issues

  • An application freezes when running on Linux (Wayland) with Nvidia GPU using Vulkan graphics API.
  • Post effects are not applied in the scriptable_00.world sample provided with Unigine SDK when interacting with checkboxes in the sample interface.
  • An application crashes at startup when running on Linux (Wayland) with AMD GPU.
  • Fragment shader compilation for the render_outline pass fails when hovering over interactive objects in Superposition launched with OpenGL.
  • The IsEmpty() method of the UGUID class in the C# API always returns true.
  • The getDVec2() method may lead to a crash when called on a Variable object.
  • An application crashes at startup with SRAA enabled, when the video_debug option is set to 2 (DirectX12 and Vulkan).
  • A VR-application crashes at startup, when the video_debug option is set to 2 (Vulkan + AMD).
Link to comment

NICE! that Unity importer looks pretty helpful, thanks for that.
Edit: i can not find anything related to unigine exporter on Unity's asset store or Unity on on unigine's add-on store. Am i missing something?
The only similar thing i found was a JSON exporter from a user called "Nick Janssen" but it is pretty old and it says nothing about unigine

https://assetstore.unity.com/packages/tools/three-js-json-exporter-40550

Edited by Miguel-Alejandria
Link to comment

Hi @Miguel-Alejandria!

Sorry, the plugin on Unity Asset Store is still under moderation... took more time than I expected... But meanwhile you can get necessary files on github:

https://github.com/JamieCo499/UnityExporter4Unigine

## Installation
- Copy the `Assets/UnityExporter` to your own Unity project, where your source scene to be exported is located


## Usage
- Open the Scene you want to export
- Go to `UnityToJSON/Export to Json` and select target path
- Use Unigine plugin to import resulting `.json` (see Unity Importer on Unigine Store )

You can send your feedback to me directly, hope it's helpful!

Edited by jamieco
Link to comment

There seems to be something strange with the downloadable version of the 2.18.1 Sim SDK for Windows (UNIGINE_Sim_Windows_2.18.1.zip): Launching the editor displays the previous version number (2.18.0.1), but built on April 19th:

image.png.a919024a3ce977c1641ef164a4bb7141.png

The C++ libraries appear to be the latest version, as they contain the expected API changes, and the console logs mention DLSS, so I'm guessing everything is technically fine?

(As an aside, I'm downloading the SDK via the browser to see if there's any difference.)

Link to comment
×
×
  • Create New...