Jump to content

UNIGINE 2.15 Beta


photo

Recommended Posts

Key Changes

  • Visual material graph editor.
  • New Water System.
  • Advanced data compression for Landscape Terrain.
  • Sandworm tool upgrade.
  • Improved IG high-level weather system.
  • UnigineEditor: updated Brush tools, new Asset Browser, and other improvements.
  • Mars demo.

This release brings you a new Material Graph Editor, Water system improvements, a huge Sandworm upgrade with distributed computing included, a high-level weather system, and more functionality for IG, along with rendering improvements and a lot more.

Visual Material Graph Editor

One of the major features of 2.15 - the new node-based Material Editor enables you to create your own materials visually without writing a single line of code. 

7PHEVNFOSaCo-NZYDx_Zr-lEWU-6OWGMEFvjuwh5

 

We did our best to combine all the benefits from the worlds of code-based and node-based programming.

anim_sm.gif

Here are the toughest challenges we’ve faced:

  • Balancing between the list of features, performance, and convenience.
  • Final graphs should not look like a spaghetti bowl. It should be possible to assemble easy-to-read graphs.
  • Graph compactness. We did our best to find ways of minimizing the number of graph nodes while keeping the same functionality.
  • Automatic type conversion wherever possible. Otherwise, it will be too complicated for artists. 
  • Graphs saving speed. Users should not wait longer than a couple of seconds after clicking Save.
  • System robustness and reliability. In case of malfunction of any node or assembling some invalid logic, the graph must be opened and displayed the same way you saw it before the errors have occurred, with broken nodes highlighted with red.
  • Replacing the legacy ubermaterial-based pipeline should not result in any reduction of functionality or convenience when creating and importing materials. It should enable us to deprecate the mesh_base and maintain a single system and workflow instead of maintaining two.
  • Compactness of the Material Editor UI. Part of the functions was intentionally wrapped into context menus so that the user wouldn’t have to move the mouse cursor across the screen to use another function.
  • The feature must be production-ready - this one is the toughest!

A brief list of features includes:

  • Ability to create your own base materials (.mgraph) and use them as directly assigned to objects or as parent materials for hundreds of other materials to avoid reassembling the material graph over and over again. The Materials hierarchy window will help you.
  • Ability to create your own custom graph nodes using other nodes (Subgraphs), or using your code. When you change the contents of a Subgraph, all materials using it will be updated as well.
  • Ability to switch between material types (there are four available at the moment: Opaque PBR, Alpha Test PBR, Transparent PBR, Transparent Unlit).
  • Optional toggling of performance-affecting features on and off. 
  • Ability to construct the final material’s UI, you can add various parameters and even combine them into groups for convenience.
  • Connector - a special “collapsed” mode of a graph node when it occupies less space and can be attached right to an input of another graph node.
  • Expression - a special node enabling you to write simple arithmetic operations, but the main thing is that you can use it as a swizzle in combination with the ability to change the number of data components. Be sure you’ll like it!
  • Ability to write code in a special Function node, here you can implement even multiple functions calling each other.
  • You can drag-n-drop textures from the Asset Browser or directly from your file manager, and they will be automatically imported with the corresponding nodes added to the graph.
  • Loops - a complex, but very cool feature enabling you to repeat an arbitrary sequence of actions multiple times. We have analyzed multiple existing implementations of graph loops and invented a new one that is almost on par with loops in code. Why not write loops in code then? Because using a graph makes implementation of complex things inside a loop much easier than doing the same in code.
  • When working with complex or large graphs, you may end up with your wires are all over the place crisscrossing each other and you may want more visual clarity. That's when portals come into play. You can connect a wire to a Portal In node at one location and then place a Portal Out node at any other location you need and take what you've supplied to Portal In from a Portal Out (like you dug a tunnel for your wire under the node graph).

anim_sm.gif

anim_sm.gif

anim_sm.gif

anim_sm.gif

anim_sm.gif

anim_sm.gif

anim.gif

The Superposition demo, along with the CSharp Third Person Platformer sample, and default C# Project Template were switched to graph-based materials so you can check them out in action.

 

We have also added the following features that are not directly related to the Material Graph Editor but are also very important

  • When importing geometry you can choose whether to create graph-based materials, or use the old workflow and create a child material of the mesh_base.
  • You can reparent a material from the mesh_base to a graph-based material, and if the names of parameters are the same even the values will be set for them automatically. That’s how we migrate our projects from the mesh_base to graph-based materials. The easiest way to do it is via the Ctrl+P hotkey.
  • In case you want any child material of a graph-based material to become unique and unrelated to its current parent, you can right-click it and choose Convert To Unique Graph in the context menu.

        WH71kSHIXXEKt4SuxvmxvfqeadcNmtR6Yuv1v57p

Materials System Refactoring

Implementation of the long-awaited Material Graph has required a major refactoring of UNIGINE’s Materials system. And we have used this opportunity to make it more flexible, straightforward, and easier to use as well, bringing you even more benefits.

 

Simpler Materials Customization

We have simplified the process of creating custom user materials or extending the functionality of existing ones. Up to 2.15 in order to tweak the mesh_base material a little bit (e.g., add some UV animation or an additional texture, or otherwise use any custom shader) you had to make a copy of the whole mesh_base and add your custom code to it (which actually is a fork!). In this case, any changes made to this material in each subsequent SDK release associated with adding new functionality or some internal refactoring would require you to track these changes and update your custom material manually.

Well, things have become a lot simpler. Creation of custom user materials is now available in the following ways:

  • Using the Material Graph: by assembling what you need in the visual editor
  • Using Abstract Materials (see below): by inheriting a base material from an existing abstract prototype (or your own custom prototype) and adding the desired functions to it.

Other undocumented ways of materials customization (e.g. old-way manual copying and modification) are to be supported manually at your own risk.

Abstract Materials

To simplify shaders programming and to hide the implementation complexity of various features we have added Abstract Materials, like abstract classes in object-oriented programming they serve as a template definition of certain parameters and functionality. An abstract material itself cannot be assigned to objects, it is used to inherit other abstract and base materials from it, extending its functionality, which gives you a lot of flexibility.

When inheriting from an abstract material you can override any values or add some other components to the child material: When the child material implements the shader with the same name, the source code of the parent and the child shader is merged (the parent shader precedes the child one).

You can create your own custom abstract material or use the ones provided "out of the box" Mesh Opaque/Transparent/Unlit with or without tessellation to create a custom base material tweaking the standard mesh_base

yah5XiPzUk26PQbVnyUF_JS-3MDalJNbaj5HgdpC

The basic set of abstract materials to inherit from that is currently available in 2.15 covers only Mesh objects, but in the nearest upcoming releases, we plan to cover Decals, Volumetrics, and other types of objects as well.

Updated UUSL API & Rearranged Files 

We have separated the Engine’s internal shader functionality from shaders API available to customers, restructuring and moving all the related code to separate header files (like constants.h, gbuffer.h, matrix.h, etc.). We’ve put these files for you to data/core/materials/shaders/api.

 

This fact enables us to prevent shaders API from changing each release and ensure that all functions will be timely and properly documented. There were a lot of key changes made during the refactoring process, and the new UUSL documentation is planned to be prepared in the nearest future.

You can now create a new shader via the context menu right in the Asset Browser.

gOHdtQi3XqFn472EtBbvGvYPz3ixDli4UbPqtiTq

It is enough to include a single common.h header to use the whole functionality.

Post Materials Removed

In 2.15 we’ve removed post materials. They are no longer needed, since you can use Scriptable Materials instead, as they provide extended functionality and flexibility, along with a better structure.

Old post materials from core\materials\default\post were removed, you will find their scriptable versions converted to ULON in the core\materials\base\post\ folder. 

The process of migration of other XML base materials to ULON base materials is in progress and is planned to be completed in 2.16.


 

Water System Improvements

Based on the feedback from our simulation industry customers, we have improved wave management for the Global Water object giving you precise control over the wave spectrum. Unique characteristics of each wave system can be set independently through spectral parameters, wave direction, length, and amplitude, and the shape factor of waves (as all the data is now available on the CPU side). You can create multiple waves and wave groups (from largest to smallest) with convenient access to every parameter and an ability to control them via API at run time (e.g. processing Weather Control packets from IOS, etc.). This functionality is available in a new Manual mode where you create your own individual waves and have full control over them via API.

In the framework of refactoring we have gathered all the parameters of the Global Water object in one place, moving most of the settings that were previously stored in the water_global_base material to the object and adding a number of new ones, and improved naming a bit. Controls in UI were rearranged to make it more intuitive and straightforward.

1.png

The important thing here is that new capabilities of the updated Global Water object come without unnecessary overcomplication. So, for those of you who simply want it to look plausible and realistic enough, without having to tweak a lot of sliders and combo boxes, there is an automatic wave generation mode called Beauforts and based on the Beaufort scale (from calm - 0, to hurricane - 12, just like it was before). Please be aware that Beaufort presets for various sea states are now available as separate nodes in the Create menu; old presets based on materials inherited from water_global_base were removed.

Beaufort = 3

beaufort_3.png

Beaufort = 6

beaufort_6.png

There is a sort of semi-automatic Layers mode enabling you to create layers (via the Editor or code) for which waves are generated randomly based on a set of parameters.

More render settings for water are now available for adjustment, including the group of tessellation parameters that are now controlled globally.

Intersection detection for Global Water has become up to tens of times faster in certain cases, offering you the ability to adjust the accuracy of detecting intersections and fetching water level height values at specific points. This ability gives you room for optimization, as when high accuracy is unnecessary, you can reduce quality to an acceptable level and save performance.

anim_sm.gif

The Oil Platform demo as well as all Water samples in the Art Samples suite now contain the updated Global Water object.

For more information please refer to the updated article describing the Water Global object.

Advanced Landscape Terrain Data Compression

Now you can compress landscape map files that you import into your project to significantly reduce their size.

frame_84.png

The Compression tool allows you to select a lossless or lossy compression profile for your textures as well as to set up your own Custom profile.

We recommend using a UNIGINE-developed lossless compression method providing better compression results for 2D and 3D textures than LZ4 and Zlib without quality reduction.

K5wN34mr7fODNa5pxs_u6BKNrcXhsWsc9SkIaqk5

Compression method options:

  • Our Method —  recommended.
  • Zlib — for high compression ratio (can provide up to 2 times higher compression ratio, but takes up to 20 times longer).
  • LZ4 — temporary option, planned to be removed in the upcoming releases.

frame_9.png

Analytical Fade 

A new Analytical Fade option has become available for Landscape Layer Maps along their perimeter, for smooth blending without any additional textures.  You can enable this fading option for the whole layer as well as for each data type (Albedo, Heights, and Masks) separately.

Sandworm Tool Upgrade

We continue working on Sandworm to make it an ideal terrain generation tool. For this release, we've fixed numerous bugs and introduced distributed computing — a possibility to generate terrains using the united power of your machine crew. So if your terrain takes a long time to be generated (more than an hour), you can speed up the process.

xW8-Lt_WWGjEYN_mZ-CK4fRlprCiVZUekLvxI3Pk

The concept is to use several computers united into a network, one of which is Master and assigns tasks, and the others are Workers that perform portions of work (processing of source data) assigned to them. UNIGINE Editor with the Sandworm tool and a terrain project should be open on Master only, while Workers run a single console application. Source files (geodata) and common cache shall be stored in a shared folder. If a Worker still has available resources, additional processes may be run on it and participate in terrain generation immediately, i. e., without restarting the generation process. Master creates the asset based on the result.

 

We are also proud to introduce the updated building generation feature: advanced assignment of wall and roof materials with more elaborate randomization. Wall and roof materials can be randomized with a predefined degree of probability; roof materials can also be applied to four different types of roofs.

m766zn3Ani1R8CbhFz5BouzyyDsOM7tO-xB0WlFj

 

The following new features were added as well:

  • Terrain generation in the headless mode (no additional licenses are required).
  • Possibility to define the export area per layer for offline sources.
  • Automatic 2.14->2.15 migration for .sworm assets.
  • A separate set of source layers for objects/assets supporting multi-filtering (one item can contain several filters).
  • Export Area mode that allows working with the Export Area only.

  • Keyboard-editing of Export Area and Layer coordinates.
  • Double-clicking an attribute in the table adds it to the value cell. Rearranged the filtering approach — made AND/OR operations possible within the same filter.

The list of other changes is as follows:

  • Fixed an issue with non-responsive behavior at generating vector data if object parameters refer to non-existent GUID.
  • Fixed the Mask naming for ObjectLandscapeTerrain.
  • Fixed incorrect density calculation displayed in the layer properties.
  • Fixed generation of buildings.
  • Fixed issues with adding and deleting the Export Area points.
  • Fixed issues with the creation of insets for layers with a higher data density.

More Tonemappers

We have extended the set of tonemappers Filmic, several Reinhard variations, ACES, and a combination of the last two. So you can choose the one that fits your project's requirements best, giving the desired look. You can control tone mapping via the Render -> Color Correction section of the Settings window.

VT6mMJcYj3czwLiSGl8iKf9HrpwcC2APsInX9_jP

In case you want to enable ACES tonemapper with commonly used settings simply reset all parameters to default values via the corresponding button next to each of them.

ACES

_OErGN3GsNkjW7-wjbgBJOdahW-YBQBlL80rJocn

Reinhard

24G9D4uC_HiGpebFfVxHW6W4C5iWpa8BijEvd07o

 

 

New Diffuse BRDF

Having studied a lot of various diffuse BDRF models we've decided that we need to implement our own, as none of the existing ones provides an acceptable visual result for us.  

comparison_1.png

comparison.png

 The main differences of the new BRDF model from the previous one are as follows:

  • Support for multiple scattering (diffuse color is more or less saturated depending on the view angle).
  • Support for the Opposition Surge effect, looking like a distinct bright spot on a surface illuminated from directly behind the observer (when looking at it in the direction parallel to light rays).
  • The majority of new diffuse BRDF models have a too strong rim light in case of maximum roughness values. This becomes most noticeable on the planes having normal maps with a very sharp relief, leading to an effect of unnatural gloss at some angles. Our model is not free from this effect as well, but the gradient looks smoother and more natural.

FMOD Support

UNIGINE now supports FMOD - a real-time adaptive audio engine enabling you to make music and sound effects that adapt to your application logic creating an even more immersive experience. FMOD simplifies the process of creating sound behaviors, with a comprehensive set of features for dealing with any scenario. It enables you to dynamically decode, mix, and output audio on any device (including custom ones, thanks to extensible outputs) with all major file formats and hardware-optimized formats supported. Dive into creative real-time mixing with 3D audio support and a built-in suite of DSP effects (with an ability to add custom effects and generators via plugins). Unlimited depth, sends, sub-mixes, and sidechaining give complete control over audio routing.

FMOD functionality in UNIGINE is available in C++ and C# via the FMOD plugin (currently for Windows platform only, compatibility is limited to the latest FMOD version 2.02.04). Please note that you need a license from FMOD to use it - refer to their website for available options.

For more information please refer to the FMOD plugin article. And don't forget to check out new FMOD Core and FMOD Studio integration samples in the SDK Browser: Samples -> 3rd Party -> Sounds.

Extended Mixed Reality Support for Varjo XR-3

We have made a number of changes to simplify implementation of Mixed Reality applications and improve your experience with human-eye resolution industrial-grade Varjo VR and XR headsets. We have added support for chroma keying, so you can change environments quickly, along with depth testing enabling you to composite and sort real and virtual worlds together by utilizing the depth-sensing capabilities of XR-3 and XR-1. Tracking of static or dynamic real-world objects using the video pass-through cameras via markers is also available now. With Alpha Blend capabilities you can blend your virtual environment with the real world enabling efficient collaboration in both.

The C++ VR Sample has been updated to showcase new functionality. 

For more information about the related API changes please refer to the API Migration Guide.

MathLib Changes

The Engine’s mathematical library (MathLib) has been divided into two separate implementations for C++ and C# APIs to make them both faster and more efficient with more SSE optimizations, more convenience, and a lot of methods added. The C# version of MathLib has been remade completely and now supports more of the C# language-specific features. This along with some other factors leads to some small discrepancies in the libraries’ features.

Other Engine Improvements

  • Added a new onFileSystemInitialized() callback right after File System initialization, so you can use it, for example, to dynamically add new mounting points during the initialization stage while displaying your boot screen.
  • Fixed an issue with World Occuders failing to prevent occluded objects from rendering in case of setting low Distance values.
  • Fixed an issue with Video Grabber saving images to HDR formats with the loss of data (.exr).
  • Added an ability to change the application icon for your projects.
  • Expanded BootConfig API.
  • Added a new getVisibleIntersection() method to the World class both taking into account the distance from the camera, LODs, and other "visual" aspects, the getIntersection() method now ignores the "visual" component enabling you to catch objects hidden by visibility distance (for example if an object LOD is hidden by visibility distance, but the object is within the frustum the intersection shall be detected). For more information, please refer to the API Migration Guide.
  • Fixed an issue with an incorrect additional detail mask assignment for details of the Landscape Terrain object using an Additional Mask in case there is at least one detail that does not use an Additional Mask.
  • Fixed an issue with Light Planar Probes rendering objects with LODs incorrectly.
  • Engine initialization has changed for more information please refer to the API Migration Guide.
  • Fixed an issue with finding intersections with static meshes at the edges of polygons.
  • Fixed a crash on saving an AppProjection configuration.
  • Fixed an issue in clouds shading sometimes leading to shading artefacts in case several World Lights with different scattering types (Moon and Sun) are used.
  • Fixed memory leaks in array-of-structure property parameters.
  • Fixed an Engine crash on Mesh Clutter regeneration.
  • C++ components can now be safely unloaded on the fly while the world is still loaded (e.g. when reloading plugins).
  • Fixed a crash on shrinking the size of an array variable in a C++ component via ComponentVariableArray::resize().
  • WorldIntersection::getInstance() now returns correct indices of intersected Mesh Cluster instances regardless of the number of meshes in the cluster.
  • Marshalling functionality of the Wrapper class is now available, enabling you to use Engine's marshallers instead of writing your own, this can be useful when using C++ libraries in your C# projects.
  • Restored the logic of guessing file extension for the FileSystem ::LoadPackage() method.
  • Changed C++ and C# API for Engine initialization, for more information please refer to the API Migration Guide.

UnigineEditor

 

Editor Modes

To improve user experience in world building and resolve hotkey conflicts between different tools we have redesigned the UI for existing editor modes (Object, as well as Landscape and Clutter Mask Paint).

11XWvwDba5OeFkdUCErEvYOBBdo3_MAavK1xU3w7

Accessing the corresponding tools has become more convenient and intuitive as simply switching between modes (available via hotkeys as well). UI tips and quick-access creators provide guidance to help new users get up and running quickly.

We have also made some restyling to the toolbar and other UI elements making all icons clearly seen at different resolutions, and the elements themselves more intuitive and convenient to use.

 

New Cluster Brush Editor

We have completed the first iteration of cluster editing mode. The first instrument implemented is the mesh placement brush. Apart from using mask textures, you can now scatter objects anywhere in the world using brushes.

Several meshes/objects can be scattered simultaneously with an ability to enable/disable drawing for each separate object. Each object stores its own scattering settings.

There are several brushes available: increase opacity, decrease opacity, replace opacity, and eraser.

The tool is still under development but a minimum set of functions is already available to be used in your projects.

Improved Clutter Brushes

Brush tool updates make painting on masks for Grass, Clutters, and Clusters more convenient and intuitive with an accurate current brush position. Objects are now generated on the fly while you draw, all objects using the same mask are updated at once. The updated tool becomes available after selecting Clutter Mask Paint Mode in the Modes dropdown.

thXuR8kgyh00tSWVZflT2nH3ro9r6IlvU4sskiGx

 

Asset Browser Improvements

KY6akyyz1MRtY8q5INlOwfx2y140lM0Rw99zkEOq

We have redesigned the Asset Browser to make it more flexible and convenient.

The preview panel has been moved to the Parameters window saving space and improving consistency.

4lXkftAvFjelZIUz0oZn4tGfKgMXy98Nc_cjxGtC

New functionality has been added at the top of the window, which has become context-dependent now, unnecessary UI elements are hidden depending on the current Asset Browser layout. Each of the two panels has its own zoom factor for convenience.

A filter for asset types similar to the node types filter in the World Nodes window is now available enabling you to reduce chaos and concentrate on the desired asset types.

Search scope is now limited to the selected folder in the hierarchy. After selecting an asset in the search results and clearing the search query in the field the current folder will automatically change to the one containing the selected asset (similar to the logic of the World Nodes window).

You can quickly expand/collapse folders or show/hide assets in the folder tree via the corresponding buttons at the top. While the two new arrow buttons there make browsing folder history convenient.

Adding assets, folders, and even search results to favorites (per-project) has become available, search scope will be reset to global though.

BCCm4deCYV0qEFMhrl203GpAgnwcdJC0CzJnB_a9

You can simplify the layout keeping only the folder view and using it as the World Nodes hierarchy, or use the old familiar layout if you prefer.

Advanced Import of Materials from FBX-Assets

When importing an FBX asset, UNIGINE’s Import System now detects if a transparency mask is used and automatically creates an Alpha Test material with the Two Sided mode activated. In most cases, when artists import materials with transparency, they actually work with vegetation that requires Alpha Test + Two Sided combination rather than simply Alpha Blend. This feature works with both types of materials graph-based and inherited from the mesh_base

When importing FBX models, appropriate presets are automatically selected in import parameters for textures used in imported materials based on the slot to which these textures are assigned. For example, if a texture is assigned to the NormalMap slot, the Normal preset shall be selected for it, automatically applying the appropriate compression type. The set of textures that can be imported from FBX-assets now includes emission.

The dictionary of postfixes for texture import presets has been extended now including a number of variations corresponding to each texture type instead of using a single prefix.

Tg84lperFHEgXz9CqJ3n6DvBDiBk-u1UFoSjGIZU

Other UnigineEditor Improvements

  • You can now check out asset dependencies for materials and properties right from the Materials and Properties hierarchy windows.
  • We have rearranged Settings for your convenience with Tonemapper and White Balance controls moved from Camera Effects to the Color Correction section. The Postprocess section of the Settings window has been removed with its parameters moved to the following sections: Wireframe Color (Wireframe Color picker), Transparent (Refraction sliders), Camera Effects (Sharpen Intensity), SSShadows Shafts (Shadow Shafts sliders).

        yN70E8Mz101eQ0Pweqh98dmSGu5LNBwTXi_2zCpy

  • Fixed an issue with UnigineEditor removing non-component C# files located in the data folder from the .csproj file when opening a project.
  • Current resolution of a Landscape asset (.lmap) is now displayed in the Parameters window of the UnigineEditor.
  • New tooltips for asset-widgets (like textures, meshes, materials) now contain a preview of an asset.

    uocUamKVKAdJWVDcAEUBuPayxaowhj91VB4dxqO8

  • When an asset is selected, its name and file size are now displayed in the Parameters window.

SMvAENg4YzJvYCUxPFTGoxPDGGyeil8nFwplYbSL

  • Added an option to automatically load the last active world on opening the Editor. You can control this option via the Auto-Open Last World checkbox in the Settings->Editor section (the state is stored in the .user config file). This option is disabled by default as in case of a faulty world it may lead to repeated Editor crashes.

2zmdrjCTnebHczjj-jvK-dcHzDVse9Ts1QITb1Hi

  • Adjusting curves in UnigineEditor has become even more convenient with new Copy and Paste operations enabling you to quickly set up similar curves. Copying a curve containing n values to the one having more values will replace only the first n ones.

    zOj3RE_5YBOg7EpY4TPWAY0y_BMnevw0fPkIvu8G

  • The Editor can now work in the background mode, when you need this functionality simply check Keep Running In Background in Settings->Editor.

  • Fixed issues with multiple rebuilding of a C# dotnet-project after deleting the .runtimes folder or saving an empty component.

  • Adding nodes to the hierarchy has become faster, improving Editor performance and UX for large scenes containing a lot of objects.

  • The number of currently selected assets is now displayed in the Asset tab of the Parameters window.    Dhdm1z0OkdjLTeHyz_Om16x882qDg5xxSQPnHDoC

  • Fixed an issue on performing Undo operation after assigning a new material to a Landscape Terrain detail leading to empty assignment, now the previous state is restored.

  • Fixed an issue with incorrect camera focusing on a node located far away from the origin in double-precision projects.

  • The FBXImporter plugin now writes relative paths to meshes in the generated .node files. Support for emission textures has been added as well.

  • Fixed an issue with infinite playback of an audio file selected in the Asset Browser.

  • Fixed an issue with resetting the size of thumbnails in Open/Save dialogs, now the dialogs use the last selected size.

 

Image Generator Improvements

 

High-Level Weather System

Introducing a new high-level weather system enabling you to manage global and regional layered weather both in UnigineEditor and via API. You can create an unlimited number of regions, both rectangular and arbitrary-form, add multiple layers to them and control each of them separately. Configure and adjust visibility, pressure, temperature, humidity, cloud coverage (with all existing types of clouds supported), precipitation, wind, and other parameters per layer, set up region positions, thickness, altitude, and transition bands for layers, etc.

Improved simulation of lightnings now enables you to generate as many of them as you need at desired locations at run time via API with an ability to subscribe to related callbacks.

For more information on setting up environment in IG please follow this link.

Convenient Control Via UnigineEditor

A new IG Editor Plugin has been added with a set of windows enabling you to configure geodetic and date-time parameters as well as to control weather right in the UnigineEditor in a convenient way. There is a lot more you can now see and adjust via the UnigineEditor, from creating weather regions with rain and snow to changing aircraft strobe light programs via curves. Other updates are on the way, stay tuned for upcoming releases.

kID_P44UwXzuilzBOFl2hcJwsmyFTFLlok4JviMR

C# API

IG functionality is now available for C# developers as well, with some slight insignificant discrepancies. The C# IG template application is also at your disposal, simply select it when creating a new project in SDK Browser.

The list of other improvements includes:

  • Fixed warming of particle systems on Slaves ensuring consistent particles behavior across all PCs.

  • Fixed Slave crashes on loading a database via the console command on the Master (without a Host application).

 

Editor Plugins (Experimental)

 

The ability to extend the functionality of the UnigineEditor was added in 2.10. We’re now upgrading the UnigineEditor Plugin System and improving public API, to make this instrument simple and more convenient so that you could create your own plugins to customize the Editor for your project-specific needs, e.g., add new menus, windows, toolbar commands, sub-modes, define how properties are displayed, etc.

2t5PJ-KuvKwbIadoKX-UDWwH4dG9gI1j17w2cilW

Creating Editor plugins has become easier in 2.15 with SDK Browser integration

and two project templates (Engine GUI Window and Materials) that can be used as a basis. 

To start developing your first plugin for UnigineEditor simply check the Editor Plugin Template option when creating a new project in the SDK Browser. This will add all necessary files and create a separate project for the plugin that you can build in your IDE and test right in the Editor.

KmgucMCKRiEPsWXwrFjxM-qq4QOSpQ_7RmlqtTfQ

Some of our ongoing projects already implement Editor extensions using the plugins system and current Editor API including the IG Editor Plugin (described above).

Some API changes were made for this release, others will follow to bring you the production-ready С++ API in 2.16.

Demos, Add-Ons, and Samples

New Mars Demo

(Not included in 2.15 Beta)

Introducing Mars - a new demo project in which 1 million square kilometers of the Mars surface is recreated. You can drive the rover around the planet and view the Gale Crater using a 20x scopes support!

ImKsJPWh73l4JIaQb4YhuxugUm6mMfgOLKkxBk1Hmars_0.png

 

  • This demo showcases features of the Landscape Terrain system. No static meshes involved, only a terrain object. Features:

  • Highest geometry and texture detailing possible (up to 1 millimeter per pixel).

  • 1000 x 1000 km area size.

  • 8 x 8 km high-detailed zone (0.25 m / pixel mask density, 1 mm / pixel for detailed 4K textures).

  • Dynamic craters (100 x 100 x 25 m) can be placed in real-time anywhere.

  • Rover tracks as another demonstration of real-time modification of terrain surface.

  • Up to 20x scopes.

Updated CraneRope Sample

The CraneRope sample was rewritten to use a Rope Body with a set of optimizations to stabilize rope behavior. You can now use real-world masses in kilograms for the load to be lifted. For your convenience a set of controls was added:

  • Keyboard keys for grabbing and dropping the load.

  • Rope length Keyboard keys for grabbing and dropping the load.

  • Debug Visualizer toggle key.

  • Load weight slider.

Vegetation Add-On

 

The Vegetation add-on was again extended with a set of small plants and a new pine making the total count of vegetation species in the add-on reach 40 types, most of them offering you from 2 to 20 variations.

O_Kb29sSY0KC-o52WL-pzXzyLsN2MRu7Z-KhiRlm

Documentation

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

 

We have made efforts to resolve problems with indexing old versions of documentation by popular search engines in order to remove outdated information from search results. The current stable release version of the docs now can always be found at https://developer.unigine.com/en/docs/latest (version number is shown in the version selector at the top of the page). Old versions are available via their numbers as it was before.

Other Documentation Changes

Updated version of documentation is available as future.

 

Work In Progress

Round Earth Geo Plugin

 

The runtime plugin is designed to implement online streaming of terrain portions based on camera position transformed into geocoordinates. Depending on the distance from the surface, data are more or less detailed. The plugin will be available as a part of an experimental build released together with 2.15.

New In-App GUI

Current GUI implementation has a number of weak points and limitations. A new GUI system implemented using the component-based approach is to replace the current one and will be much more flexible and easier to use. Simplified widget transformation and scaling, improved intersection testing with advanced flexible control, stylesheets, better layout based on components (horizontal, vertical, grid, or panel), visual and logic components for widgets for advanced customization to fit the needs of any project. Since releasing an experimental build in mid-September, we have made some changes here.

 

 

The most important thing is that SDL is now executed in a separate thread and cannot cause blocking of the Engine's thread. This means dragging and docking windows along with changing their sizes without affecting the update of logic. Another thing done is full support for OpenGL and Linux. Even more extended window customization is now available (only for the Engine's widgets at the moment), including the sizes of the window title and borders, additional custom user elements in window titles. A lot of things can be changed for windows and groups, from icons to window titles and background colors. The main window has become dockable too. And an ability to control sizes of all nested groups and windows via API has been implemented.

We continue to work hard to bring you this exciting GUI update in 2.16.

 

Offscreen Rendering

We continue our efforts on implementing offscreen rendering mode, making it possible to run UNIGINE Engine in a cloud and use powerful servers, for example, to generate photorealistic datasets for deep learning and verification of AI algorithms for UAV, automotive, and other industries. Part of the job is done at the moment, and what you can see below is a demonstration of images generated by the Engine in headless mode and displayed via a web browser.

 

DirectX 12, Vulkan, and Consoles

 

We have a DirectX 12 version of the engine working as an internal branch already. The performance is comparable or higher than in DirectX 11, and we keep pushing for this. First, we test this version with internal projects, later next year it will be available as a production version for all customers.

lX1rj3HGCHfEtkAFq7RrDWzDRCPgSFNzWsEPgtbI

The engine is being ported to game consoles as well. The Xbox Series X looks almost feature-complete, the PlayStation 5 version is in the early stages.

Vulkan version is considered for the next versions as well, utilizing the current progress with the low-level graphical APIs.

 

 

  • Like 5
Link to comment

Known Issues

  • Resetting surface selection on disabling a selected surface.
  • The Overwrite Assets option in the FBX Import options does not update a .mgraph material if it was modified after the first import.
  • UnigineEditor crash on modifying a Landscape Layer Map with brushes.
  • Incorrect preview rendered in Material Graph Editor on OpenGL.
  • Issues with updating the type of the SampleTexture graph node after changing the input texture type.
  • UnigineEditor freezes on importing certain assets.
  • Resetting focused area in the Material Graph Editor on switching focus to other UnigineEditor windows and then switching back.
  • Issues with changing material graph name via the Materials hierarchy window.
  • The Cleaner tool mistakenly removes graph-based materials in case their parent material is not used.
  • The Preview widget changes its size and flickers on changing selection in the Asset Browser.
Link to comment

Hi, thank you for this beta! This should help us wait for the final polished version :)

A few quick questions with the new Material Graph. Some things have changed since the experimental build and the documentation also does not reflect the current state, so I don't know whether the doc or the beta is not final.

- The Final and Material node don't show the sphere preview
- There is no way to set the Material Mask! (there is in fact a MaterialMask node, but nowhere to connect it to, and no MaterialMask input in the Material node)
- TextureCurve is gone?
- Can't find how to merge/blend two materials
- how to connectTwoSided, or Overlap, etc to a Surface Material parameter? (just like Albedo color for example)
- it's possible to drag a "parameter group" to the node area. What is it for? (there is single red output)
- crashed when adding a subgraph
- the subgraph is a good idea, but not very easy to use (having to select a file is neither simple or fast)
- can we convert part of a graph into a subgraph?
- is there a node that would allow to fill its single  ouput depending on a value in a range (eg: input A is float, if 0<A<x1 then Out1, elseif A<x2 then Out2 elseif A<x3 then Out3 etc) (easy to do in a graph, just asking if this kind of node already exists as it is very common)

Thanks!

Link to comment
9 hours ago, Amerio.Stephane said:

- crashed when adding a subgraph

Hi, does this happen on adding specific subgraph, or just randomly occurs when adding a "Sub Graph" node to graph?

Link to comment

Hi @Amerio.Stephane,

Thanks a lot for your feedback!

The documentation is currently updated, so there might be some imperfections, like missing nodes, images, etc. But the updates are on the way! New Material Graph samples for SDK are in progress and will be added in the official SDK release. The Material Graph Editor itself is currently in the stabilization phase, so bug reports (if any) are welcome.

Quote

- Can't find how to merge/blend two materials

Unfortunately material blending functionality via a single Blender-node is not available in new Material Graph implementation. Can't tell yet, whether it will be added soon or not. But you can currently blend your materials (say A and B) on a by-component base (AlbedoA+AlbedoB, EmissionA+EmissionB, etc.)

Quote

- The Final and Material node don't show the sphere preview

The preview for the selected material in 2.15 is available in the main Parameters window outside the Graph Editor. We'll add a fully-functional material preview in a separate viewport in the Material Graph Editor in the hotfix following the 2.15 release.
 

Quote

- There is no way to set the Material Mask! (there is in fact a MaterialMask node, but nowhere to connect it to, and no MaterialMask input in the Material node)

The material mask is set in the Base Options group of the Material tab in the Parameters window (so there's no need for MaterialMask input in the Material node), inside the graph you can only take it (via the MaterialMask node) and use for your purposes (check conditions via Bits* nodes, etc.).

Quote

- TextureCurve is gone?

Yes, there is no Texture Curve node at the moment. We plan to add it later (most likely in the hotfix).

Quote

- how to connectTwoSided, or Overlap, etc to a Surface Material parameter? (just like Albedo color for example)

There's no way to do so, as it is implemented as a pre-definition option when you create your graph, it is either on or off (can't be changed in the Parameters later),

Quote

- crashed when adding a subgraph

Will surely be fixed in 2.15, thanks for reporting. Could you give use a bit more details on this?

Quote

- the subgraph is a good idea, but not very easy to use (having to select a file is neither simple or fast)

UPD: New Subgraphs that you create will be automatically added to the Create context menu (planned in the hotfix).
 

Quote

- can we convert part of a graph into a subgraph?

The only way to do this at the moment is to select the desired part of the graph, copy it (Ctrl+C), create a new Subgraph in the Asset Browser, open it, and paste (Ctrl+V) the copied part to the subgraph. We'll think about making it simpler.

Quote

- is there a node that would allow to fill its single  ouput depending on a value in a range (eg: input A is float, if 0<A<x1 then Out1, elseif A<x2 then Out2 elseif A<x3 then Out3 etc) (easy to do in a graph, just asking if this kind of node already exists as it is very common)

There is such a node for checking a single range (Check Range), you can either combine these nodes, or create your own Function node implementing multiple-range check (or any other functionality).

To sum it up, there are things to be updated in the docs, and a bunch of things that will be added to the Material Graph in the hotfix after the 2.15.! So stay tuned!

Thanks!

Link to comment

Can you please elaborate (if possible to that point) more on the Offscreen Rendering.

Will it be possible to achieve a 'live realtime streaming image' like youtube livestreaming (e.g.) with a decent framerate?

Really looking forward to the release, sounds all amazing what you have achieved again.

Re. Materials: will all type of nodes now use one the base material types, or are there still distinctions for e.g. water, decals, grass aso.

Best.

Werner

Edited by werner.poetzelberger
Link to comment

Hi Werner,

Offscreen rendering on it's own have no any connections to a streaming or whatsoever, it's just an engine operation mode that will allow you to run your application on most servers with GPU installed. You already can launch engine (2.x) on servers, but you need to do an additional configuration of the environment (Linux + VirtualGL) / or apply some additional logic for DX-based apps. Proper offscreen implementation in theory should simplify deployment process to clouds / servers.

After that you need to write a streaming server that would grab frames from the engine and send it over network as raw images (as on video from post) or via some kind of proper streaming technology (like WebRTC that will do proper video compression and reduce amount of data that needs to be transferred). Right now we want focus on proper offscreen mode and maybe after on streaming stuff.

 

Quote

Re. Materials: will all type of nodes now use one the base material types, or are there still distinctions for e.g. water, decals, grass aso.

Material Editor now suitable only for meshes materials creation. But you can always create some kind of custom water material in this editor and assign it to simple plane mesh, so it's not limited to the materials of buildings or characters. We will eventually add more materials types to the graph, but not all. For example, LandscapeTerrain material is too complex and it will not perform well, so it would remain in it's current state (manually written UUSL code).

Thanks!

  • Thanks 1

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

Link to comment
6 hours ago, vvvaseckiy said:

Hi, does this happen on adding specific subgraph, or just randomly occurs when adding a "Sub Graph" node to graph?

Random, I'm afraid :( Or maybe I just didn't see any specific action.

1 hour ago, silent said:

After that you need to write a streaming server that would grab frames from the engine and send it over network as raw images (as on video from post) or via some kind of proper streaming technology (like WebRTC that will do proper video compression and reduce amount of data that needs to be transferred). Right now we want focus on proper offscreen mode and maybe after on streaming stuff.

Indeed the headless rendering mode is a GREAT addition. This will help us deploy to low-cost desktop! Anyway, I feel it would be quite necessary to deliver at the same time a working example/demo/sample showing how to integrate it practically: how to setup a Windows/Linux headless and connect to it from a Windows/Linux (app/code/etc, so it is easy to setup and deploy).

6 hours ago, fox said:

The material mask is set in the Base Options group of the Material tab in the Parameters window

Yes thank you! I overlooked this "Base Options" as I thought this was the materials paramleters, missing completely it's collapsed by default. I would suggest to add a line separator below it so it's more clear that it is a section by its own.

 

Q: There are already some subgraphs demoed, but no explanation how to connect them. I'm eager to test them, especially TAA noise and Interior Mapping!

Q: It would be great it a double click on a subgraph would open it (or show the readonly version of it for core subgraphs).

Q: When opening a "Select Asset" window (for eg. to pick a texture) the editor freeze for a very long time! I can't do anything for a few minutes! It looks like it's trying to generate the preview for the all resources in the main thread.


 

I take this opportunity to thank you for some nice additions:
- the *collapsible* material preview, with a selectable shape!
- SDL moved to a non blocking thread! 
- IG with C# support!
Thanks!

Link to comment
  • binstream featured this topic
Quote

a working example/demo/sample showing how to integrate it practically: how to setup a Windows/Linux headless and connect to it from a Windows/Linux (app/code/etc, so it is easy to setup and deploy).

That would be nice indeed, but the practical part is very domain specific. For simple desktop virtualization a lot of hypervisors already can be used and it's quite easy to organize a "thin clients but with GPUs" kind of setup in the office. Our main goal is to provide a good and stable headless mode (as simple as -video_app dx11 -video_headless 1), the practical approach would require a lot more efforts and developers time, I'm afraid. Maybe a very basic sample with streaming would be also included later.

 

Quote

Q: There are already some subgraphs demoed, but no explanation how to connect them. I'm eager to test them, especially TAA noise and Interior Mapping!

With 2.15 release we will introduce new separate demo with all the cool shader graph nodes examples, stay tuned :)

 

Quote

Q: It would be great it a double click on a subgraph would open it (or show the readonly version of it for core subgraphs).

Yeah, we do think so and this feature will be added after the 2.15 release (more likely in the first 2.15 maintenance update).

 

Quote

Q: When opening a "Select Asset" window (for eg. to pick a texture) the editor freeze for a very long time! I can't do anything for a few minutes! It looks like it's trying to generate the preview for the all resources in the main thread.

That's actually quite strange. Can you tell us reproduction steps? The lag itself is expected when there are no thumbnails exists, but not for several minutes. Please make sure that Windows Defender is not scanning your project folder at the same time.

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

Link to comment
4 hours ago, silent said:

Maybe a very basic sample with streaming would be also included later.

Even something trivially simple would be great as a quickstarter (and to show the possibilities to always-dubious managers, sigh).

4 hours ago, silent said:

The lag itself is expected when there are no thumbnails exists, but not for several minutes. Please make sure that Windows Defender is not scanning your project folder at the same time.

You might be right, I have almost no lag on another computer.

 

Q: Still on the material nodes: I managed to have 3 different "SampleTexture:Default" nodes. When creating a new one, I always get the middle one. I don't know how the 3rd one was created. I got the 1st one after playing a bit with its sampling mode (double click). For the 1st one, notice the blue connector doesn't have the correct "texture" blue. What is going on here??? (shouldn't they always look the same when no connection exists)

image.png.e85df4274888811d5940a1fbe3bb0a95.png

 

Q: Testing the new C# IG. Is it normal that both IG and Syncker plugins are listed in the command line? I thought Syncker was automatically loaded with IG and no longer needed with IG.

Q: Can the IG be started from the Play button in the interface? How to configure the launch parameters for this button? When I tested it, it could not load the CIGIConnector plugin (but it works from the usual launch.bat)

Q: Will we be able to use C++ plugins with a C# IG? Or is it definitively a lost cause?

Link to comment

@Amerio.Stephane

Quote

Q: Will we be able to use C++ plugins with a C# IG? Or is it definitively a lost cause?

Using C++ code from C# is quite easy (but not vice-versa), so it's definitely possible. Right now (knowing your IG usage) we can 100% say that C# will not fit your needs, since it has some limitations that C++ version does not (some callbacks are missing and HAT/HOT requests).

 

Quote

Q: Testing the new C# IG. Is it normal that both IG and Syncker plugins are listed in the command line? I thought Syncker was automatically loaded with IG and no longer needed with IG.

That's initial C# IG release, so some small things are still needs to be polished. That particular one is quite easy to fix. For real project you would anyway need to manually adjust all the starting parameters.

 

Quote

Q: Can the IG be started from the Play button in the interface? How to configure the launch parameters for this button? When I tested it, it could not load the CIGIConnector plugin (but it works from the usual launch.bat)

Do you mean Editor interface? In that case you need to simply adjust your command line so it would match the bat file (at least it should be as easy as that). Alternative way to slightly adjust the code:

// before:
if (!Unigine.Plugins.IG.CIGI.Connector.IsLoaded)
	return;

// after:
if (!Unigine.Plugins.IG.CIGI.Connector.IsLoaded)
	Engine.AddPlugin("СIGIConnector");

Thanks!

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

Link to comment
14 hours ago, Amerio.Stephane said:

Q: Still on the material nodes: I managed to have 3 different "SampleTexture:Default" nodes. When creating a new one, I always get the middle one. I don't know how the 3rd one was created. I got the 1st one after playing a bit with its sampling mode (double click). For the 1st one, notice the blue connector doesn't have the correct "texture" blue. What is going on here??? (shouldn't they always look the same when no connection exists)

image.png.e85df4274888811d5940a1fbe3bb0a95.png

The first sampler with only single input and single output may appear when instead of texture input you will use incorrect different node type (like Slider).
Third and second are some kind default samplers for 2D textures.

More likely this issue with different samplers displaying is related to the actual sampler state is not being reset after input has been disconnected. We need more time to understand what's goin on here :)

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

Link to comment

Q: The new ObjectWaterGlobal does not allow to change its MaterialMask?

Q: The new ObjectWaterGlobal does not support Decals?

Q: The new ObjectWaterGlobal does not allow to change its IntersectionMask?

Q: Would it be possible to add an ig_config option so the ObjectWaterGlobal would be considered as Terrain for HAT/HOT queries?

Q: How do you control the Beaufort and waves direction with CIGI and the new ObjectWaterGlobal?

Link to comment
1 hour ago, Amerio.Stephane said:

Q: The new ObjectWaterGlobal does not allow to change its MaterialMask?

Q: The new ObjectWaterGlobal does not support Decals?

Q: The new ObjectWaterGlobal does not allow to change its IntersectionMask?

The new water should have the same functionality as before (decals are working as before).

Don't forget to check the Surfaces tab for Intersections and material masks:

image.png

 

1 hour ago, Amerio.Stephane said:

Q: Would it be possible to add an ig_config option so the ObjectWaterGlobal would be considered as Terrain for HAT/HOT queries?

That's possible by adjusting intersection masks (just as it was in 2.14.x and before).

 

1 hour ago, Amerio.Stephane said:

Q: How do you control the Beaufort and waves direction with CIGI and the new ObjectWaterGlobal?

Yep, such possibility will be added in 2.15 release (implementing this behavior right now).

Thanks!

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

Link to comment
On 12/2/2021 at 7:20 PM, Ugly1-1 said:

In the C# FMOD examples the Ambience parameters set by the slider values need to multiplied by 0.01f like in the C++ examples.

Will be fixed in release, thanks for noticing that! :)

@Amerio.Stephane Also we did some improvements with subgraphs:

  •  now you can drag and drop subgraphs from asset browser 
  •  and use it immediately in graph after creation

image.png 

  • Like 2

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

Link to comment

Hi,

Suggestions:

- It would be great if you would add in the material graph editor the possibility to visually group nodes and label them, such like this:

loop_small.png

Even if the "grouping" is only visual and not an actual group (ie even if it's just a drawing of a box and a text in the background) that would be great to help document the material.

 

- When editing a Color(float3/4), a double-click on the sphere should pop up a color selector, not the XYZ fields. This is very inconvenient.

- Some node aligning or grid-snapping would be nice to have

- Straight connection are sometimes hard to read, especially "outputs" when they are going backward and go through the node itself. Some curved connection or very simplistic auto-routing might be more legible.

- Moving a collapsed node will break all its connections. This is extremely annoying. Maybe we should have instead a key modifier to move-and-break-connections, like: click+drag = move and keep connections, click+alt+drag = move and break connections, click+ctrl+drag = duplicate node

- The lack of undo/redo is really lacking now

- "Branch" nodes only show the "false" part of the condition in the sphere preview. As both the True and False parts are always evaluated, should we have a preview for both? (maybe two spheres side by side, or a drop-down menu to select witch part we want to preview)

- please, tool-tips on connection points and nodes, with link to the doc on F1 would be super great (even more so as this is a new feature).

- I already love this tool :)

Thanks!

 

Edited by Amerio.Stephane
Link to comment

Hi Stephane,

Thanks for your feedback. All the points are valid, but we seems can't reproduce the following one:

Quote

- Moving a collapsed node will break all its connections. This is extremely annoying. Maybe we should have instead a key modifier to move-and-break-connections, like: click+drag = move and keep connections, click+alt+drag = move and break connections, click+ctrl+drag = duplicate node

Do you have maybe a short video / screenshots of this behavior?

 

Quote

- When editing a Color(float3/4), a double-click on the sphere should pop up a color selector, not the XYZ fields. This is very inconvenient.

This already fixed in our internal builds, will be shipped with 2.15.x hotfix update.

Thanks!

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

Link to comment
5 hours ago, silent said:

Do you have maybe a short video / screenshots of this behavior?

Just create a new Material graph, collapse one of the Float parameter connected to the material node (like Roughness), and then try to move it away: the link will break.

It looks like it's intended, but I feel it would actually only make sense for swizzle operators. For input parameters, it is especially annoying.

Link to comment
×
×
  • Create New...