UNIGINE 2.8: Improved Data Streaming, Cached Shadows, Refactored Editor, Better Vegetation
- Redesigned asynchronous data streaming to reduce performance spikes.
- Improved utilization of multiple CPU cores throughout the engine.
- UnigineEditor’s transformation: standalone application, made faster, more stable and extensible after a major refactoring, with a number of improvements.
- Cached shadows optimization: performance boost, more flexibility.
- Refactored bit masks.
- Better reflections with additive blending and occlusion clipping.
- Interleaved rendering mode for lights.
- Various vegetation improvements.
- More informative Performance Profiler.
- Major IG Template update: DIS support, more CIGI packets, multithreading and optimizations.
More features have been optimized for multicore processors in this release to fully take advantage of all the extra computing power that a PC platform provides wherever possible, from asynchronous data streaming to processing network packets.
Rendering improvements continue to push the boundaries of visual realism in our virtual worlds, in this release we've significantly improved the look of vegetation, shadows and reflections.
A huge pack of various performance optimizations including cached shadows, asynchronous data streaming have contributed to overall engine performance improvement and reduction of spikes.
Notice: UNIGINE 2.8 SDK requires SDK Browser version 1.9.13 or later.
Improved Asynchronous Data Streaming
Nobody likes spikes, they can be annoying in an entertainment application, and are totally unacceptable for simulators. We have completely revamped asynchronous data streaming system taking the advantages of multithreading to reduce spikes caused by loading of graphic resources. Geometry and texture streaming is performed in a separate thread.
Streaming system uses texture cache composed of minimized copies generated for all textures with user-defined resolution and stored in the data/.cache_textures folder (file structure is the same as for .runtimes). These copies are used instead of the originals while they are loaded.
Caching of all textures is supported (2D textures with or without mipmaps, cubemaps, 3D textures, etc.), so even a 1GB 3D texture used in your scene won’t cause a spike anymore.
If a cached copy was not found for a texture, it will be generated and added on the fly.
Texture cache is loaded at the Engine’s startup and always stays in the memory after loading.
All related settings (render budget, memory limits, texture cache resolution, etc.) can be adjusted via the Streaming section of the Settings window (Windows -> Settings -> Render - > Streaming), they are also available via console commands and API.
You can enable force loading of all resources when necessary (e.g. to generate a preview for a node or grab a frame sequence).
All render_manager_* console commands were renamed to render_streaming_*.
Please note, that streaming system requires a GPU driver with multithreading support. Settings and workflow for OpenGL and DirectX differ, for more information on streaming configuration please refer to the Asynchronous Data Streaming article.
Cached Shadows Optimization
Dynamic lighting ensures that all shadows from moving light sources cast by moving objects are rendered correctly. This approach implies that geometry of your scene is rendered one more time each frame to calculate shadows for each Projected light (or six more times — for each Omni). Using multiple dynamic lights in the scene and calculating shadows for them on the fly may cause a performance drop, especially when the scene contains complex geometry with lots of polygons. It can be a terrible waste of resources, when most objects and lights are static.
This release brings a solution - the Cached Shadows feature enabling you to replace dynamic shadows and use baked ones for everything static, thus reducing load and significantly improving performance. You can switch Omni, Projected, and World light sources to static mode (shadows for them are precomputed and stored in depth textures).
The World light source works in a similar way, but it uses shadow cascades. In Dynamic mode, shadow cascades are built dynamically relative to the camera's position, while in Static they are baked and have their area defined by the light source's position. This mode of the World light is suitable as a performance optimization technique for small-area ArchViz projects where shadow cascades can be divided into 2 sections: walkable area with high-resolution shadows (as they're observed closely) and non-walkable area with low-resolution shadows (as they're observed from a distance). Please note that changing the time of day is not available in Static mode, as shadow cascades are baked.
The mechanism of cached shadows offers you a lot of flexibility - depending on your needs, you can choose to render baked shadows only or combine rendering of both baked and dynamic shadows.
Please note that as light source modes have changed, the following conversion shall be performed while migrating your project:
- Realtime light source -> Dynamic light source;
- Mixed light source -> Dynamic light source;
- Baked light source -> Static light source with the Static shadow mode enabled.
For more information please watch our new video tutorial on Cached Shadows:
Information on the new technique is also available in the updated Lights Optimization article. A new sample illustrating the mechanism can be found in the Samples demo package included in the SDK.
More Shadows Improvements
But we didn't stop with bringing you an option to optimize rendering of shadows, we moved beyond improving overall performance and quality of shadows which made low-resolution shadows even faster and high-resolution ones even smoother.
Other shadows rendering improvements include:
- A multiplier for the depth of light penetration into materials enabling you to control how deep the light goes through translucent objects shifting the shadow. The multiplier is called Translucent Depth and can be found in the Shadows section of the Settings window (Settings -> Render -> Shadows).
- The ultra high 16K resolution now available for shadow maps enables you to bring even more details to the scene. But keep in mind video memory consumption as such textures take a lot of it.
- A separate Distance Scale multiplier for shadows for more flexibility in optimizing your scenes.
Performance Profiling Improvements
Monitoring your application’s performance has become more efficient and convenient with a set of Performance Profiler’s updates:
- Added a new GPU load counter.
- Improved mesh memory consumption counter.
- The Textures counter value now includes screen buffers.
- The Triangles counter is split into three sections: shadows, geometry, and total.
- Added an ability to show/hide Profiler’s charts via the show_profiler_charts console command.
- Number of primitives is displayed for OpenGL.
- Improved number formatting.
We also added the GPU Microprofile to public API enabling you to get more information on your GPU-related operations. To add a new GPU-related counter just set the second parameter of the beginMicro function to 1:
Added a new frame rate stabilization feature that can be used to avoid significant FPS fluctuations making the frame rate smoother and driver's behavior more predictable, but for a performance cost (it may cause up to 30% FPS reduction). All necessary parameters are available for adjustment in the Screen section of the Settings window (Settings -> Render -> Screen). You can also control FPS Stabilization via API or a group of render_fps_stabilization console commands.
Vegetation is a crucial factor that can make or break the overall look of a virtual landscape if we’re not talking about Mars of course. In this release we added even more features making it possible to create true-to-life outdoor environments delivering a highly immersive experience.
Depth Texture for Impostors
Impostors now have a depth texture which drastically improves their look making it very hard to tell them from original models! Corresponding parameters were added to all impostor materials.
And of course this feature is now supported by the Impostors Creator tool.
Improved Subsurface Scattering
Subsurface Scattering (SSS) is one of the major contributors to the look of leaves and grass blades, so a number of improvements were made for this effect:
- Back (relative to the light source) sides of thin objects (such as leaves and grass blades) now look more realistic as the anisotropy and multiple scattering effects are taken into account when calculating SSS color and intensity making them brighter.
- Shadows from the light sources now smoothly dissolve inside materials. The degree of smoothness is determined by the SSS Intensity value.
- Screen-Space Shadows now work with SSS correctly similar to ordinary shadows drastically improving the look of foliage when viewed from both up close or far away. In the latter case this option coupled with improved impostors is especially efficient providing a real looking environment at a lower cost.
- Added an ability so specify a color to be used for translucent objects globally. When the light shines on one side of a translucent object, the other side is partially illuminated with this color. You can use it to change translucence color for vegetation making it look more realistic. You can change Translucent Color via the SSS section of the Settings window (Windows -> Settings -> Render - > SSS). As for per-material translucence color, we plan to make it available in one of our upcoming releases.
New mesh_base Options
Added a new Vegetation Velocity option to the mesh_base material to control writing to the velocity buffer that can be used to improve TAA and Motion Blur result when necessary. In other cases you can disable this option to gain performance (as objects with this option enabled have positions of all their vertices calculated twice).
A new Rotate Normals to Camera option was added to the mesh_base material enabling you to ignore geometry normals and orient them towards the camera. This is very useful for vegetation as it makes the fact that leaves and grass blades are composed of polygons less noticeable.
Another new thing in the mesh_base material is that the logic of the Angle Fade option has changed, now it does not require the Vegetation option to be enabled for materials with the Alpha Test preset enabled. You can use it for tree crowns to make them look less low polygonal due to clipping of polygons having their normals oriented away from the camera.
Interleaved Lights Rendering
Rendering lights is one of the most consuming parts: the more light sources are used in your scene the heavier is their impact on performance.The situation gets worse if we have to render the scene in 4K+, as the number of UHD-capable devices grows, and higher rendering resolutions are becoming embraced more broadly.
Introducing new Interleaved Rendering mode for lights. In this mode lighting is rendered during the deferred pass in half resolution (1/4 of all pixels) with subsequent reconstruction of neighboring pixels using the data from previous frames, making it possible to reduce rendering load. The effect is cumulative and works best with TAA enabled. We also recommend to use this mode when Supersampling is enabled to reduce the load, while keeping the image quality high.
This mode is recommended for relatively static scenes which contain a lot of light sources and do not have a lot of reflective surfaces (as reflections represent a weak spot of the interleaved reconstruction). Please note, that enabling interleaved lights rendering for a scene with a small number of light sources (e.g. a flight simulator scene with a single world light) may cause a performance drop.
It should also be noted however, that this mode requires a high framerate (60+ FPS), otherwise anti-aliasing quality reduces and ghosting effect becomes more pronounced.
You can enable interleaved rendering for lights and adjust its parameters via the Lights section of the Settings window, it is also available via API and a set of render_lights_interleaved* console commands.
For more information on configuring and useing interleaved rendering mode for lights please refer to the Interleaved Lights Rendering article.
Improved Microfiber Effect
Velvet and satin fabrics, as well az fuzzy fruits or leaves of saintpaulia, even a peach fuzz on a face now look even more realistic due to the improved microfiber effect simulating thousands of fibers reflecting the light in different ways. We have developed our own BRDF model, taking such PBR parameters as metalness, roughness, specular, and albedo into account, light direction also matters, so simulation became more physically correct.
Occluded Reflections Clipping
In certain cases reflections baked into environment probes might be clearly seen in areas where they actually shouldn’t, resulting in various artefacts that ruin the total look of your scene. This can be especially noticeable when you place environment probes in irregular shaped (non-squared) rooms.
Introducing a new feature that enables clipping of reflections occluded by obstacles (located in shadowed areas relative to the light source). This feature can be enabled for an environment probe via the Cutout By Shadow option and uses a depth texture grabbed for it to determine reflections that should be visible. A set of additional parameters can be used for fine tuning.
For more information on clipping occluded reflections, please refer to the Environment Probe article.
Additive Blending for Environment Probes
Environment Probe lights now support additive blending mode. This option offers more flexibility in reflections control. You can use it to blend reflections of several environment probes together and control them separately.
Please note, that environment probes with additive blending enabled cannot be used as insets to add reflections details (e.g. creating a small high-detail environment probe inside a large low-detail one). Such probes do not replace each other, as they are blended instead.
A sample showcasing this feature was added to the Samples suite.
Mirrors, a glass calm of a swimming pool or a lake as well as other reflective surfaces shall benefit from the improved quality of planar reflections, as they now support Temporal Anti-Aliasing (TAA).
Moreover, the cost of rendering planar reflections can now be reduced with the new Distance Scale parameter added to the mesh_base material. It enables you to choose between rendering high-poly or low-poly LODs in reflections in order to gain performance while keeping an acceptable image quality. So, you have more flexibility in optimizing performance of reflections in your scenes.
Multi-Scattered Specular Reflections
Imitation of multi-scattered specular reflections on rough surfaces, that has become available in this release, brings the final look of reflections even closer to reality making it brighter and more saturated, in accordance with the law of conservation of energy.
This release also brings the following fixes related to reflections:
- Fixed rendering of planar reflections for global water object having planar reflections enabled on OpenGL.
- Fixed an issue with clipping objects in planar reflections when occluders are enabled.
- Fixed an issue with Viewport Mask being ignored by planar reflections.
Added an ability to take diagonally neighboring pixels into account in the process of color clamping for TAA, to improve anti-aliasing quality, you can toggle this option via the corresponding checkbox in Settings -> Render -> Antialiasing.
Other Rendering Improvements
- Added an ability to control the maximum number of back buffer frames that a driver is allowed to queue for rendering (latency) to reduce spikes in application logic caused by driver-managed GPU load optimization. By reducing latency value you can raise priority of responding to user input. Increasing the value might be required in other cases (high GPU load, VSYNC usage) to queue more frames of data, it is also beneficial for applications with no user input (e.g., video playback). You can control latency via the render_latency console command or via API.
- Added a new Normal Substitute option for details in the mesh_base material to control whether detail normal map is to be blended with the base normal map or overlap it.
- Water rendering fixes:
- Fixed an issue with visible foam and caustics underwater inside a FieldSpacer near its boundaries.
- Fixed an issue with FieldSpacers ignored by an ObjectWaterGlobal when camera's far clipping plane distance is not equal to 10000.
- Fixed an issue with underwater fog visible inside a FieldSpacer when viewed in overwater mode.
- Fixed rendering of WaterGlobal and WaterMesh objects in cases of disable haze and haze distance set to 0.
- Fixed disabling auxiliary buffer rendering for global water.
- Fixed color correction for the decal_particles material in case of procedural rendering of particles into a decal.
- Fixed an issue with freezing emission of particles when adding a noise to the particle system.
- Fixed rendering of cross and bloom effects for custom culling mode for pixels that are not visible in VR (render_stereo_hidden_area 2).
- Fixed shader errors on enabling the SSDirt effect (Nvidia + OpenGL).
- Fixed an issue with incorrect generation of textures for grass-impostors by the Impostors Creator tool.
- Viewport and Shadow masks of surfaces are now taken into account when creating impostors for ObjectMeshClutter using the Impostors Creator tool.
- Fixed incorrect mesh culling after changing orientation and re-importing an FBX-model.
- Fixed scattering LUT shader preventing the Moon from fading out too fast when the angle between sun and moon is smaller than 90 degrees.
- Removed cubemap blurring artefacts for the Sky object.
- Improved calculation of shadow visibility distance for clusters.
- Fixed an issue with shader cache regeneration for Windows + AMD + OpenGL API.
- Fixed exposure for left and right eyes when the hidden area mode is enabled in VR.
- Fixed crash on modifying terrain heights under objects (grass, clutter, etc.) with terrain alignment (intersection) enabled.
Bit Masking Usability
Bit masking, is a powerful and flexible mechanism offered by UNIGINE to apply or enable certain effects or features to objects selectively. We have made it simpler and more intuitive with the upgraded Bitmask dialog. Now you don’t have to write down numerous hexadecimal values or sets of bits when configuring masks in your scenes, just tag desired bits with names that make sense and use them throughout all masks of the same type.
Moreover, you don’t always have to open the Bitmask dialog to check out mask configuration, as the mask widget displays the names of bits that are set.
A couple more changes were made to bit masks for the sake of consistency:
- Light Mask was renamed to Shadow Mask
- Reflection Mask was renamed to Reflection Viewport Mask
To give you more information on bit masks in UNIGINE and how to use them to improve your project’s performance we added a new video tutorial:
The following set of improvements and fixes was introduced to the Property System to ensure overall stability and improve performance:
- Optimized property removal operation.
- Fixed an issue with resetting node parameter values of properties assigned to nodes inside a Node Layer.
- Fixed an issue with resetting parameters inside array of structures to defaults on re-importing a property.
- Fixed firing of callbacks on assigning a new property to a node.
- Fixed resetting values of elements of property parameter arrays to defaults.
- Fixed property reparenting issues when editing *.prop-files manually.
- Fixed issues with overridden structure arrays as well as refreshing parameter tooltips and titles of a property when making changes to its parent.
- Fixed conditions for manual properties.
- Fixed an assertion on setting the manual state of the property to 1.
Other Engine Improvements
- Improved utilization of multiple CPU cores.
- Switched from SSE2 to SSE4.1 instruction set extension, minimum system requirements were updated.
- Fixed an issue with incorrect setting of surfaces when combining skinned mesh animations with using LODs, as well as other issues with skinned mesh instances. These fixes required changing the logic of working with skinned mesh animations. All new projects shall use new logic by default, with an option to keep legacy workflow, controlled via the skinned_legacy_mode console command (this option shall be enabled for old projects after migration). More detailed information on all related changes is provided in the API Migration Guide.
- Added an ability to control baking of object surfaces to voxel and environment probes as well as casting shadows from environment probes. The corresponding options were added to surface parameters in the UnigineEditor and can also be controlled via API.
- Improved GUID generation algorithm for large file sets ( > 500 000 files in a project).
- Improved GPU detection algorithms.
- Fixed resetting of node/surface selection when selecting files in the Asset Browser. Now, if you select a node or a surface and then select an asset in the Asset Browser (for example, a material to drag and drop to the selected node), the node/surface shall remain selected.
- Improved standard data containers:
- Added ReverseIterator for Vector
- Added Vector::removeOneFast
- Added BiMap fast search for key and value
- Refactored Map and Set
- Fixed an issue with shifting MeshStatic objects relative to a curved terrain after reloading the world.
- Fixed an issue with the INDEPENDENT_SIZE_WINDOW flag causing the window to ignore resizing and keep its initial width and height.
- Fixed an issue with non-uniform grass distribution for an ObjectGrass using a mask.
- Fixed double precision plugins loading via the -plugin_path option.
- Fixed loading of string-type console variables from .world and .render files.
- Fixed refreshing Microprofile info on first web-browser launch.
- Added the following aliases for the -video_app startup command-line option:
- gl - for opengl
- dx - for direct3d11
- Fixed GUID-related methods of the engine.filesystem class for UnigineScript.
- Added an ability to choose a GPU to be used by specifying its number via the -video_adapter startup command-line option (available for DirectX only).
- Fixed stack overflow errors caused by App calls in case of running on a configuration with two or more displays having different screen resolutions.
- Fixed crash on the Engine startup with App* plugins for OpenGL.
- Fixed crash on changing window size for OpenGL.
- New folders created for new custom terrain LODs in mounted directories are now displayed correctly in the Asset Browser.
- Fixed assets update after terrain regeneration on Linux.
- Rebuilt GDAL library for Linux to fix compilation error.
- Fixed issues with incorrect mouse position when using the AppWall plugin in case of two-row wall configurations.
We believe that proper tools are essential for any kind of creative process, so we continue our relentless pursuit of performance, efficiency, convenience and stability. UnigineEditor has grown from an engine plugin to a full-scale standalone application. After a major refactoring it became faster, more convenient to use and easier to extend. Clear modular structure with a clearly defined initialization sequence represents a strong basis we prepared for extensions and customization to be implemented by both our users and ourselves in the nearest future. The next step is to provide public API for the editor, so customers would be able to introduce their own plugins to the editor.
While working with a project, you create, copy, move, inherit, rename, and delete assets. As a result, an enormous amount of unnecessary files can be created.
Introducing the Cleaner, a tool enabling you to optimize your project and save disk space by deleting assets that are not used anywhere and won’t later be used in the final build. Cleaner also checks for lost assets, the ones referenced to by GUID but not available in the project.
Cleaner may save up to 30% disk space for an average project, and will definitely help you keep your project neat and tidy.
But don't be too quick to click Delete All for all assets detected by the Cleaner as you may destroy your project irrevocably! Proper cleanup requires proper analysis, so do it carefully and don't forget to read the Cleaner Tool article for more information.
Texture Conversion in the Asset Browser (Experimental)
Texture assets of various types can be used in your project. But are they even optimized, or do they waste precious megabytes? When developing a project artists often simply drop numerous textures to the Asset Browser without thinking of their size (e.g. heavy TGA textures), as a result your project’s repository can grow to a huge size. Later on they might want to optimize their textures, but changing asset’s type (when converting it with a 3rd party DCC tool) means changing its GUID, which requires a lot of other related changes.
A new Texture Conversion feature available in the Asset Browser will help! It does not change asset GUIDs on conversion preserving all necessary links and can convert any texture asset used in your project to one of the available formats.
Ignore Option for guids.db
Sometimes, in case of teamwork development, an invalid guids.db file may be committed to the repository (due to an incorrect merge or otherwise) causing errors when working with UnigineEditor. So, we added an ability to ignore the guids.db file by the Engine via the -skip_guidsdb command line argument. In this case the Engine searches for GUIDs among all .meta files inside the data folder and all mounted external directories and packages. UnigineEditor uses this argument by default to avoid errors, and always re-generates the guids.db file to ensure its validity.
Other Editor Improvements
The list of other Editor improvements includes the following:
- Improved node manipulators.
- The Rendering Debug Panel has been extended and now offers more capabilities for fast visual debugging via the following rendering buffers added: Diffuse Lighting, Diffuse Lights, Ambient Light, SSGI, Reflections, Highlights, Cubemaps, SSR.
- Fixed export of nested Node References to FBX.
- Fixed loading of camera settings from a world file in case of missing script file.
- Fixed crash on changing a mount point’s path.
- Fixed an issue with assigning a material to a disabled surface.
- Fixed an issue with saving physical masks for PhysicalWater, PhysicalWind, PhysicalForce, PhysicalNoise, and PhysicalTrigger.
- A default target node is now created for each new Persecutor Player.
- Fixed import of textures with "_m" postfix.
- Added arithmetic operations for spinbox fields. To use an operation right-click in the field and choose required operation in the Maths group of the context menu, enter a value and click Apply.
- Fixed an issue with unallowed cloning of nodes when the Engine Viewport is active.
- Fixed an issue with saving the state of the Engine Viewport to the editor2.cfg file.
- Fixed "Asset is invalid" errors generated by the Asset Manager during the validation stage in case of mounting a folder containing properties.
- World, Property and Material hierarchies can be expanded in a single click via the new Expand All button.
- Now it is possible to bake the hierarchy of the selected node to a mesh cluster.
- Fixed Max Warming Time slider in the list of Particle System parameters.
- Fixed spin boxes in the Color Selection dialog, now you can adjust alpha values by clicking the arrows icon next to the corresponding field and dragging up and down.
- Fixed incorrect gamma value for EXR-files generated by the Video Grabber.
- Fixed crash on deleting material hierarchy.
- Fixed an issue with adding new parameters to Tracker after toggling some of the existing ones on and off.
- Fixed an issue with re-importing assets modified externally (Linux).
- Fixed improper selection of meshes after reimporting the source .FBX model.
- Fixed an issue with assigning materials to imported models in IGS format, as well as issues related to importing models in FBX and STL formats.
- Fixed a crash with selecting node after changing its physics (joint, shape) parameters and disabling physics simulation.
- Fixed an issue with resetting mesh coordinates on selection, in case the scene contains a GeodeticPivot object.
- Fixed incorrect undo behavior when reverting a slider position change action.
- Easy selection of all node’s children is now available via the Select Child Nodes item of the context menu in the World Hierarchy window.
- Creating user’s folders with reserved names (e.g. core, scripts, editor2) in the root of the data or a mounted folder is now forbidden, if such a folder is created via Explorer it won't be displayed in the Asset Browser. Inside subfolders of the data folder, no name restrictions are applied and such folders will be displayed by the Asset Browser properly.
- Fixed issues with editing mask of a grass object.
- Fixed incorrect behavior of animated UV transform of a material when changing the Angle parameter.
- Fixed an issue with preview for sounds becoming unavailable after opening a world.
- Fixed an issue with incorrect scene rendering in the Scene Viewport on Iris 580 Pro GPU.
- Enable/disable checkboxes for nodes and surfaces now support multi-selection: to disable a group of surfaces, select them and uncheck one of them.
- You can now easily find runtime files for any asset by right-clicking it and choosing Show Runtime in Explorer in the context menu.
- Various rendering features can now be controlled right from the Settings window.
- Fixed issues with grabbing the cursor by the active Engine Viewport when adding a new object to the scene.
- Fixed persistent GUI activity after the Engine Viewport loses focus.
- Fixed an issue with inability to change node’s position in the Editor after grabbing a video sequence based on a track, specifying its movement, created in the Tracker Tool.
- You can now rename a node by slow double-clicking it in the World hierarchy. Fast double-click is used to focus on a node as it was before.
- All floating-point numbers are now displayed with 5 decimal places.
- Materials assigned to selected object(s) are automatically selected in the Materials Hierarchy.
- You can use Ctrl button to invert snapping controls (Grid, Angle, and Scale).
- Improved UI for PlayerSpectator and PlayerActor.
- Removed transformation lock for cameras.
The IG (Image Generator) Application template, our plug-n-play component for professional distributed simulation systems, continues to grow and build up its functionality. Along with overall performance improvements, particularly due to extended use of multithreading, and stabilization, the list of supported communication protocols has expanded: Distributed Interactive Simulation (DIS) is now supported (basic level is implemented using the KDIS library v2.9.0, DIS_VERSION 7).
The complete set of updates includes the following:
- User-defined CIGI packets are now supported.
- Implemented global water control with CIGI Maritime Surface Conditions Control packets supported.
- Ocean clamping for entities is now supported.
- Line-of-Sight (LOS) requests now support material masks enabling you to include or exclude various environmental and cultural features from consideration for LOS segment testing.
Improved Height Above Terrain (HAT)/Height Of Terrain (HOT) requests now also support masks. You can specify an intersection mask to define what is to be treated by the IG as terrain. This can be useful, for example, when a runway or road is represented by a mesh object. In such a case you simply set a certain mask via:
ig_manager->setTerrainIntersectionMask( mask );
and then set this mask for all meshes you want to be considered as a reference level for HAT/HOT. HAT/HOT errors for curved terrain were fixed.
- Implemented CIGI Symbology packets support (except for Symbol Clone) enabling you to create and manage Head-Up Displays (HUD). Dashed lines are not supported at the moment.
- Now you can define arbitrary collision volumes (not just boxes and circles) inside an entity. Simply create a model with a physical body and collision shape assigned and add the following line to entity definition section in the ig_config.xml file:
<volume_definition id="1" shape="shape_num">path_to_node</volume_definition>
- Added View synchronization.
- CIGI Connector plugin is now executed in a separate thread.
- Added internal Syncker initialization.
- Added an ability to set CIGI packet size in the configuration file (ig_config.xml).
- Fixed crashes on receiving invalid packets.
- Syncker synchronization masks are now supported.
- Fixed brightness accuracy of stars represented by billboards generated using the FK5 celestial catalog.
- Added tooltips for most of the properties used so that you have all necessary information at your fingertips.
- Updated the IG Template section of the documentation.
The Syncker multi-channel rendering system has also extended its use of multithreading and has got a number of optimizations resulting in overall performance improvement enabling you to add even more to that.
When you add a node to Syncker, all its parameters (states, materials, transformation, etc.) are synchronized by default. But what if the only thing we need is node’s state (e.g. if it is enabled or disabled)? Synchronization of other parameters in this case is a waste of precious resources, that we’d like to avoid. Introducing synchronization masks - a flexible mechanism enabling you to optimize load by defining what is to be synchronized. When adding/creating a node you can specify a flag defining which parameters are to be synchronized (states, transformations, etc.).
The system has also become more robust with a set of bug fixes and improvements including the following:
- Added FieldAnimation, FieldHeight, and ObjectParticles to synchronization.
- Sending and receiving UDP/TCP packets has moved to a separate thread.
- Removed synchronization of camera modelview matrices.
- Fixed various interpolation errors.
- Fixed issues related to collisions of node IDs on master and slaves. Node IDs on slaves can only be obtained via the getSlaveNodeID() method.
- Fixed errors related to invalid hierarchy of nodes on slaves.
- Fixed issues with nested NodeReferences.
- Added Microprofile integration enabling you to monitor performance, detect bottlenecks and eliminate them.
- New added displays, projectors, and projection screens will have a corresponding index added to their name automatically.
- Fixed an issue with additional Syncker Debug and Color Selection windows displayed in the warped Engine Viewport, now they are opened as separate windows and can be moved independently.
- Simplified modification and migration of app_projection.cfg and *.proj files by changed binary format to XML.
- The Tab key can be used to change focus between the UI elements in the Projections Configurator.
- Settings loaded from a *.proj file are applied to the currently selected projection.
- Improved C++ and UnigineScript API: all functions of the Projections Configurator are available via code.
- The getBorders() method was replaced by the getBorderBlend().
- Added an ability to reset Brightness values and Mask parameters for corners to defaults by clicking the corresponding parameter name.
New Content Samples
The following content samples were added to the Samples demo package:
- Cached shadows.
- Projecting particles using decals.
- Using particles with skinned meshes.
- Using fields, decals and particle systems to create effects on water surface.
- Clipping occluded reflections using Environment Probe's Cutout By Shadow option.
- Additive blending of Environment Probes.
Updated Oil Refinery Demo
We revised the logic system in our Oil Refinery demo to give you more freedom. It showcases generation of custom training missions and testing scenarios using a pre-fabricated set of logic components and any available assets. Now you can generate your own missions just the same way.
The scope of activities ensured by the logic covers all basic actions required during the training: turn on and off equipment, open and close doors, inspect equipment to check the status, or add missing items. Assets are made interactive to be involved into activities.
Your missions can have two modes: training and testing. In the training mode, a player, being guided by interactive hints, follows the list of activities, mentioned on the clipboard in the inventory. The testing mode provides for failures and allows simulating negative consequences of faults to add more credibility.
In addition, you can create as many emergency situations as you want using various combinations of the available logic components.
Planet and Terrain Progress
We're on the home straight with all run-time functionality of the updated terrain system and full round earth solution completed. The only thing left before we can bring these features to you is to finish the tool set and make it efficient and easy to use. That's exactly what our Tools team is currently focused on. But our recent estimates have indicated that in order to include these features in 2.8 we'd have to put off the release date. That would be unfair, as a lot of improvements would have to be kept unavailable. So we decided to release them as 2.8 in time and include both new developed objects with proper set of tools polished to perfection in 2.9 ASAP.
You've asked us many times recently to grant access to our documentation so that you could learn more. Check it out, we've made our documentation public and freely available, no authentication required! Read, learn, get your free trial, and decide for yourself whether UNIGINE fits your project's requirements.
You can also learn a lot from our video tutorials, by the way we've added new ones recently:
- Updated the IG Template section.
- Added an article on Cleaner Tool.
- Added an article on Callbacks.
- Added an article on Asynchronous Data Streaming.
- Added an article on Interleaved Lights Rendering.
- Updated the article on Bit Masking.
- Updated the article on Performance Profiler.
- Updated articles on materials in the Materials section.
- The complete list of API changes is available in the API Migration Guide.
- The complete list of Console command changes is available in the Console Migration Guide.