This page has been translated automatically.
Recent news:
Table of contents:

UNIGINE 2.19.1: Upscalers in VR, USD Import, Animation Preview, Stabilization

Key Changes

  • Import from USD data format
  • Upscalers (DLSS and FSR) support in VR
  • Animation preview in the Editor
  • OpenXR handtracking and Linux support
  • WebStreaming plugin improvements
  • Performance optimizations: faster hashmaps
  • ImGUI Integration and sample plugin for UnigineEditor
  • New SpiderVision samples
  • Account registration in SDK Browser
  • Unigine Learning Course in C++

USD Import and Export

Universal Scene Description (*.usd format) is an open-source, hierarchical scene description format designed to be a universal interchange format for 3D content creation workflows. It is widely used in the film, animation, and VFX industries to streamline production pipelines and facilitate collaboration between artists and studios. USD support allows efficient and accurate exchange of 3D data across many 3D applications.

USD Kitchen Set, courtesy of Pixar Animation Studios.

In addition to exporting your scene data to USD format introduced in 2.19, this release also brings you USD import (usda, usdc, and usdz file extensions) currently supporting the following scene components:

  • Textures (with automatic UNIGINE shading texture conversion)
  • Materials
  • Meshes and primitives (sphere, box, etc.)
  • Skinned geometry, skeletons, and animations
  • Blend Shapes (Morph Targets)
  • Lights
  • Cameras

The USD Export plugin for UnigineEditor has been renamed to USD Exchanger and it is available for all SDK editions from now on. For more information on using the plugin please refer to this article.

Hashmap Optimizations

Hash Map is a powerful data structure that has a broad application, especially when fast lookup time is needed. Yet, if we don't pay attention to details, it can get suboptimal. We have made some refactoring and optimization regarding Hash Maps and Hash Sets for this release. They both now store data linearly similar to vectors, which improves performance and reduces memory consumption.

We've also kept the previous hash map implementation for backward compatibility and some specific cases, it is called BucketHashMap. For more details please see the API Migration Guide.

Video Streaming Improvements

Back in 2.19 we introduced the WebStreaming plugin enabling you to broadcast audio data and video frames rendered by a UNIGINE application via WebRTC. Apart from some optimizations and improvements this release brings you an ability to stream an image from any existing camera to a separate web-browser instance. This enables you to switch between different cameras in the scene, have different views transferred to different client devices (including mobile ones) and even have several different views in separate web-browser instances on a single client device.

SSRTGI Improvements

We continue improving our Screen-Space Ray-Traced Global Illumination technology known as SSRTGI, making it look even more photorealistic. The ray distribution across the hemisphere for the entire effect has been reworked. The accumulation and application of SSGI have also been revised. Gamma correction has been fixed for SSAO when writing to the buffer, as well as for SSAO visualization during rendering debug.

Additionally, SSAO overlay on reflections has been removed to make them appear more natural.

Other Rendering Improvements

A pack of different rendering improvements is also expected including the following:

  • Optimized surface culling for Projected and Omni light sources (transparent materials) giving a x10 boost for Projected and x2 for Omni lights.
  • Added the ability to adjust shadow distances and near clipping attenuation for Omni and Projected light sources.
  • Fixed an issue with the impact of distant static objects on the velocity buffer.
  • Fixed an issue with camera movement affecting animation speed of animated materials.
  • Fixed visual artefacts from vegetation occurring when the Leaves Offset parameter is greater than 0.
  • Decals now support Ambient Occlusion rendering. The feature is available in the Material Graph Editor via the Ambient Occlusion and Opacity Ambient Occlusion outputs of the Decal PBR material.
  • Fixed flickering of grass impostor objects with Animation and Depth Map options enabled, and Stem Noise values greater than 1.
  • Fixed an issue with Projected light sources and IES Profiles causing shader compilation errors.
  • Fixed an issue with the FSR upscaler resulting in excessive noise.
  • Fixed an issue with rendering of shadows and caustics from World light sources on the surface of the Global Water object.
  • Fixed incorrect haze rendering when the Gradient Mode is set to Short/Long Distance Range.
  • Fixed an issue with Scattering LUT textures, lighting and post-effects being affected when changing the global Textures Quality setting.
  • Fixed a visual artefact from the World light source after reloading a world associated with streaming of Sun/Moon scattering textures.
  • Added the ability to enable/disable temporal filtering for the Subsurface Scattering effect. You can control it via the Subsurface Scattering settings in UnigineEditor (or render_sssss_taa via console).
  • Fixed an issue with incorrect streaming of detail textures for the Landscape Terrain object.
  • Fixed an issue with clearing 3D textures on Vulkan resulting in artefacts when baking lighting to Voxel Probes.
  • Fixed visual artefacts in case of insufficient GPU memory (Vulkan GAPI).
  • GUI render optimizations made it approximately 2 times faster.
  • Fixed FSR tearing artefacts in the bottom part of the screen.
  • Fixed an issue with FFP rendering causing visual artefacts on AMD and Intel GPUs.
  • Added bicubic filtering and sRGB correction for cubemaps, removing visual artefacts in reflections.

OpenXR Support Progress

We are continuing the OpenXR integration process, with Hand Tracking support (XR_EXT_hand_tracking) added in this release. Additionally, OpenXR support is now available for our Linux users. The currently supported version is OpenXR 1.1.

OpenXR support for eye tracking, mixed reality as well as foveated rendering is on the way and to be expected in future releases.

The list of currently supported extensions includes:

XR_OCULUS_audio_device_guid
XR_FB_color_space
XR_FB_display_refresh_rate
XR_KHR_visibility_mask
XR_KHR_binding_modification
XR_EXT_dpad_binding
XR_EXT_local_floor
XR_EXT_palm_pose
XR_EXT_hand_tracking
XR_EXT_hand_interaction
XR_EXT_hand_joints_motion_range
XR_EXT_hand_tracking_data_source
XR_EXT_debug_utils

Upscalers in VR

Upscalers like NVIDIA DLSS 3 (Deep Learning Super Sampling) and AMD FSR 2.2 (Fidelity FX Super Resolution) that we added in 2.18.1 play a crucial role by reducing the pixel load for higher resolutions, freeing up resources and maintaining acceptable performance.

This release makes them available in VR as well providing a noticeable performance boost.

SpiderVision Plugin Updates

We keep on improving the SpiderVision plugin extending its functionality along with overall stabilization. The following updates are included in this release:

  • Added undo/redo functions.
  • Improved multiselection in the Projection Setup widgets (blendzone, mask, and warp settings).
  • Added the possibility to set a window as the main window.
  • Added tooltips for UI elements.
  • Added a missing Borderless window type to API.

End of DirectX 11 Support Is Coming

This release is the last one to support DirectX 11. Starting from 2.18 DirectX 12 is regarded as the primary rendering API on Windows. Following the end of OpenGL support, in UNIGINE 2.20 we are phasing out the legacy DirectX 11 renderer from the engine to facilitate faster transition to new features, such as hardware raytracing, bindless textures, and a lot more.

Other Engine Improvements

  • Fixed an issue with applying the Texture Streaming Density Multiplier for inherited materials.
  • Fixed an issue with DX12 microprofile causing a hang on shutting down the Engine with the Fast Shutdown option disabled.
  • Extended profiler info for light sources now displaying the number of sources seen in the viewport for each type, as well as reflections for them.
  • Fixed an issue with copying a mesh having a baked lightmap and cancelling the copy operation via Undo causing generation of a new lightmap.
  • Fixed behavior of the Total GPU counter for AMD GPUs.
  • Fixed a crash on baking lightmaps for large meshes containing several surfaces (number of Bounces = 1).
  • Fixed "Can`t open .cache file" errors on opening a project having no pre-generated shader cache.
  • Fixed an issue with rendering shadows from Omni and Projected lights for meshes with Static Lighting Mode in case there are meshes with a different Lighting Mode in the viewport.
  • Fixed a crash related to SpatialTreeNode::getIntersection() sometimes occurring when adding nodes to the world.
  • Fixed an issue in some cases causing data streaming lags on Vulkan.
  • Fixed an 'Assertion failed!' issue related to multithreaded shadows rendering sometimes causing an Engine crash.
  • Added Depth Reprojection Back to the Rendering Debug buffer.
  • Fixed an issue with incorrect bounds calculation for Extern objects in multithreaded mode causing random switching of shadows.
  • Added the ability to set the currently selected tab of the EngineWindowGroup via the setCurrentTab() method.
  • Added a flexible modifier for the Linear Damping parameter of the ObjectParticles (LinearDampingOverTimeModifier).
  • Fixed a WindowManager issue with incorrect stretching of windows after maximizing or restoring them from the hidden state.
  • Fixed an issue related to texture allocation in some cases causing errors and crashes when using a Text object with rich text formatting.
  • Fixed a crash on transferring a StructuredBuffer.
  • Fixed the Billboard mode of the Gui object.
  • Fixed an issue with animations replacement in the Tracker tool.
  • Fixed crashes and other problems occurring on dynamically mounting and unmounting additional data folders.
  • Fixed the 'Use of undeclared identifier' error that occurred on enabling the Auxiliary option for the gui_base material.
  • Fixed a crash on baking Environment Probes and shadows from light sources when the Profiler is enabled (DirectX 12).
  • Added the ability to disable Fatal dialog messages and logging errors instead (e.g., when running console tools like RuntimesGenerator or BuildTool). You can control this feature via API or via the -dialog_fatal_enabled console command.
  • Fixed a crash after deleting a node located inside a Physical Trigger and triggering the Leave event.
  • Fixed readings of the Profiler's RAM Meshes Static counter with an additional Loaded memory amount displayed in the MeshRender info (render_streaming_meshes_info).
  • Fixed an issue with updating graph-based material parameters and textures on changing states sometimes resulting in a crash.
  • Added the ability to play animations from a predefined start time to a predefined end time. This feature is available via the new "TimeFrom/TimeTo" parameters of the AnimationPlayback node (AnimationPlayback class via API).
  • Added average time values calculated for all time-related Profiler parameters.
  • Fixed an issue with incorrect rotation of Environment Probes with Box and Sphere projection and Realtime Update enabled.
  • Fixed an issue with recreating the material parameter buffer on changing states sometimes causing visual artefacts and incorrect rendering of some material features.
  • Fixed incorrect reloading of cached nodes causing streaming issues after remounting data folders.
  • Added force feedback support for wheel controllers providing tactile feedback to the user to create a greater sense of immersion (simulated crash damage, "road feel") and to increase the challenge of driving well.
  • Various UI improvements such as correct table formatting and text wrapping, fixed an issue with the <br/> tag, correct usage of the CDATA tag, image positioning, application of DPI scale to the image, and more.
  • Fixed incorrect positioning (position reset to origin) of a Dynamic Mesh with a Fracture body assigned on reloading a world.
  • Fixed an issue with the widget's 'Released' event (EventReleased) always returning 0 instead of the mask identifying currently released mouse buttons. The signature of the JoyPovMotion event has been fixed as well.
  • Added the ability to ignore decals when baking Global Illumination (lightmaps and probes) via the new Cast Baked Global Illumination option.
  • Fixed an issue with the Node.GetVariable() method always returning a zero-value int variable instead of the actual one in C# API.
  • Added support for custom texture to C++ and C# ImGui samples.
  • Fixed an issue with writing incorrect data to the Information Lost buffer for Skinned Meshes.
  • Fixed incorrect zero-size bound checks sometimes resulting in node icons disappearing in the viewport.
  • Fixed issues with adding nodes with Lifetime = Engine to the world after reloading.
  • Fixed the out-of-bound access on updating a material assigned to a Skinned Mesh object with a lost mesh sometimes resulting in crashes when removing a Skinned Mesh and then a material that was assigned to it.
  • Fixed an issue with incorrect streaming of meshes having a mesh_base material assigned with the Terrain Lerp option enabled.
  • Reloading of NodeReferences has become more stable to prevent crashes and unexpected behavior.
  • Fixed multithreading-related issues with planar reflections on water and surfaces making them disappear.
  • Fixed a crash on an attempt to enable any Panorama viewport mode (debug binaries).

UnigineEditor

Editor API Changes

We have made a number of changes to the public UnigineEditor API to extend its functionality, making it clearer and easier to use.

The ViewportManager class has been refactored with the creation of the new ViewportWindow class. All related methods have been moved from ViewportManager to ViewportWindow.

The following 2 headers were added to public UnigineEditor API:

  • UnigineObjectMode.h - offering you a convenient interface to control UnigineEditor's placement tools available in the toolbar when the Object Mode is activated - you can check this in your code via the ObjectMode::isEnabled() method.
  • UnigineShortcutManager.h - offering you a convenient interface to create and manage all shortcuts (hotkeys and combinations) as well as shortcut contexts that you usually see in Windows -> Settings -> Hotkeys. This header contains the following new classes: ShortcutManager, ShortcutContext, and Shortcut.

For more information on the new classes please refer to UnigineEditor API documentation.

Animation Preview

Animation preview is now available in the Editor, just like other asset previews, making it easier to check the content and select the desired animation.

Previously, to view an animation, you had to assign it to a Skinned Mesh object in the scene. Now, you can simply select your *.anim asset in the Asset Browser and preview it directly in the Parameters tab. Here, you can view the bone hierarchy, check joint behavior and axes, and get an overview of all the animations available for a character. You can also apply the animation to another character. Additionally, you can prevent the mesh from shifting by checking the Fix Root Bone in Origin option.

ImGui Integration and Sample Plugin

Dear ImGui is a bloat-free graphical user interface library for C++ enabling fast iterations and empowering programmers to develop content creation tools and visualization / debug tools quickly and efficiently. It has been used by a number of our customers, and there have been plenty of questions asked and answers provided. So, for this release we decided to implement and deliver an integration sample showcasing the most commonly used and frequently asked things regarding Editor plugins based on Dear ImGui.

This sample is available on the Add-On Store as ImGuiSamplesPlugin and covers multiple basic cases encountered by users when making their own Editor plugins.

The plugin creates its own window in UnigineEditor, this window has three tabs, each with a separate sample:

  • Spline Editor - demonstrates how to use the Editor's Undo/Redo system via API, work with remappable hotkeys (Windows -> Settings -> Hotkeys), and implement custom visualization, using spline editing as an example.
  • Editor (Immediate Mode) - demonstrates how to work with the Editor and Engine's widgets in immediate mode (in ImGui-like style) using the EditorImmediate class. Programming in this mode is simple, but it has a number of limitations. This mode is recommended for prototyping or simple plugins. At the center of the scene there are 4 connected points that form a polygon, each of the points can be moved using manipulators. The current position of each point (X, Y, Z) is updated each frame in the widget at the top-left corner of the viewport.

  • Components - demonstrates how to work with C++ components right in the Editor: in-Editor generation and assignment of C++ Components to nodes enabling immediate execution of components' logic with the ability to adjust component parameters right in the Editor!

Material Graph Editor Updates

  • Added the ability to pan the graph workspace on dragging with the right mouse button pressed.
  • Fixed a crash on saving a material graph containing a Function node.
  • Fixed an issue with switching graph node selection on saving the material graph.
  • Alpha Test Accounting now works for graph-based materials as well.
  • Fixed console errors on adding the Screen Space Subsurface Scattering node to a graph.
  • Double-clicking in an empty area of the graph workspace will display the Node creation menu.
  • Added a new Screen Coord Before Upscale node to resolve the issue with incorrect positioning of post-effects on the screen. Use this node for fetch sampling instead of Screen Coord.
  • The issue with artifacts caused by changing of the vertex offset/position on Vulkan (looking similar to Z-fighting) can now be fixed by disabling the Vulkan Vertex Shader Optimizations option in the Compilation Settings.

  • On selecting a portal input or output, a dashed line will now show traces to linked ports of other Portal nodes.

  • The following new nodes were added:
    Screen Coord Before Upscale
    Upscale Factor

See Content Migration Guide for more details on changes in graph-based materials.

Other UnigineEditor Improvements

The list of Editor improvements making it more stable and convenient includes:

  • In case of a crash the Editor will automatically save dump files to the bin folder and notify you prompting to open the last saved crash dump file in File Browser (currently implemented for Windows only). The additional -editor_dump_full_process_memory flag enables dumping the whole process memory. Dumps are written in cyclic mode to avoid excessive disk space consumption (maximum 5 dump files).
  • Fixed an issue with importing textures from FBX files.
  • Fixed an issue with updating the state of lightmaps baked for light sources inside NodeReferences, causing loss of new baked textures on reloading a world without prompting to save them.
  • Pressing the F hotkey (Focus On Selected Node) while hovering the mouse cursor over the World Nodes window will set the focus on the last selected node in the hierarchy.
  • Added the ability to copy and paste Surface Parameters to multiple similar meshes selected (having the same number of surfaces) at once.
  • Fixed a crash on opening Microprofile performance data in a web browser.
  • Fixed a crash on disabling a World light source while having the World Shadow Casters visualizer enabled.
  • Fixed an issue with incorrect placements of a node at the world's origin (zero coordinates) when dragging a node asset from the Asset Browser to any location in the Editor viewport.
  • Fixed a crash on deleting a node via deleteLater() by an Editor plugin.
  • Fixed an issue with incorrect rectangular selection of nodes in the viewport.
  • Fixed an issue with shifting shadows baked for light sources inside NodeReferences after reloading a saved world.
  • Parameters of the Project Build Tool are now automatically saved whenever you change any of them.
  • Fixed an issue with Project Build Tool failing to generate a final project build in console mode on Linux.
  • Fixed an issue with incorrect snapping by grid along all axes when moving a node along just one axis in case the Coordinate System is set to World.
  • Fixed a crash on clicking thumbnails in the Asset Browser, that are not loaded yet.
  • Fixed a crash on quick selection change in the Asset Browser with actively refreshed Parameters and Materials Hierarchy windows.
  • Fixed a crash on deleting assets via the "Select Asset" dialog window.
  • Fixed an issue with restoring internal property GUIDs of C# components assigned to nodes resulting in broken links to С# components after launching the project via the Play button and reloading the world.
  • Fixed an issue with repeated cloning of child nodes.
  • Fixed an issue with inability to lock the Parameters window in case a component of an FBX-container is selected in the Asset Browser.
  • Fixed an issue with a growing number of body rope polygons on saving a world after running a physics preview in the Editor.
  • Fixed crashes on an attempt to convert a WorldSplineGraph node to a *.mesh file as well as on an attempt to assign a Static Mesh to a WorldSplineGraph.
  • Debug materials in the Texture Paint mode are now applied properly for textures with different numbers of channels.
  • Fixed a number of issues with creation of new textures in the Texture Paint mode, texture conversion issues, and incorrect texture format detection in texture preview due to unsupported channel/depth combinations (only supported options will be displayed and used).
  • Fixed an issue with resizing a material preview.

IG Updates

  • Fixed an issue with loading a state with a weather region and clouds via the IG Host.
  • Fixed an issue in CIGI with selecting another type when choosing a non-existent type. This behavior can now be controlled with the Entity::setAutoTypeMatchEnabled() function, which is enabled for DIS entities and disabled for CIGI.
  • Fixed incorrect wind direction for rain/snow CPU particles (WeatherLayerPrecipitation).
  • Added a new debug mode IG::Manager::DEBUG_MODE_INTERPOLATION_INFO that displays the interpolation timer parameters and states on the screen. Displaying of these data can also be enabled by the console command ig_debug_interpolation.
  • Fixed the issue with interpolation failure on connecting the extraslave.
  • Added the IG::Manager::reloadGeodetics() method that forces a runtime update of georeferencing, which is useful for on-the-fly projection changes.
  • Fixed a crash associated with handling meteo callbacks in the IG Editor Plugin.
  • Fixed an issue with incorrect Node ID generation for MeshSkinned nodes in Syncker, which in some cases caused crashes.

Registration in SDK Browser

New user account registration has become simpler and can now be completed right in SDK Browser (without visiting the developers portal).

Demos and Samples

Robot Arm Sample

This sample demonstrates how to create a physics-based robot arm with a kinematic chain including 6 links (1 fixed and 5 movable) connected via hinge joints (JointHinge). Each joint has a motor with its rotation controlled via a pair of keys. The end effector is a magnetic gripper that enables you to pick up, handle, and drop objects surrounding the arm. You can use this sample as a template to create any type of robotic arm with the required DoF number for any use case, and connect a control system instead of keyboard inputs to manipulate the arm. This sample has been added to both C++ Samples and C# Samples suites.

Additionally we've made some rearrangements in these sample suites:

C# Component Samples

  • Added a new Complex Solutions group and moved Arcade Sample and Robot Arm samples to it.
  • Moved the Character Controller sample to the Cameras group.

C++ Samples

  • The Tracked Vehicle group has been renamed to Complex Solutions and now contains Non-physical Tracks, Physical Tracks, and Robot Arm samples.
  • The Network group: added two new samples Simple Http Response and Image Http Response demonstrating the corresponding servers; renamed the Image Http sample to Image Http Request, and the Simple Http sample to Simple Http Request.

UNIGINE Learning Course C++

Our free online UNIGINE Learning Course that we first made in C# is now available for C++ developers as well. The structure of the course is the same as for C#, covering basic aspects plus many other advanced and very interesting topics including animations and physics, lighting, materials creation, adding sounds and music, GUI creation, optimization basics, video recording, and a lot more.

Upon successfully completing the course, you'll not only gain practical experience but also enrich your portfolio with four exciting projects:

  • ArchViz: Create an immersive interior scene with interactive objects.
  • FPS: Dive into the world of first-person shooters with a simple yet engaging project.
  • Race: Put your creativity to the test by crafting an arcade-style cross-country racing game.
  • VR: Step into the realm of virtual reality with a project designed for VR headsets.

No registration required! 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:

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

- Your UNIGINE Team

Build: ()