Jump to content

UNIGINE 2.3: Round Earth, Shoreline, New DoF and GI, HTC Vive Support


photo

Recommended Posts

Key Changes

  • Round Earth according to geo-coordinates
  • Completely revamped Landscape tool, improved its usability (experimental)
  • Updated terrain materials: metalness workflow, no limit on the number of layers and materials
  • HTC Vive support
  • Metalness workflow by default
  • Reworked depth of field (DoF) effect
  • Configurable TAA
  • Improved support for screen-space raytraced reflections
  • Implemented GGX mipmaps
  • Global illumination effect by box projection for EnvironmentProbe
  • Bow/stern ship wake waves
  • Shoreline with physics interaction
  • Improved underwater rendering: added caustics and light shafts
  • Experimental new editor with completely new UI and integrated assets browser
  • API improvements: C# mathlib, better callbacks, topology methods, and more
  • New video tutorials

curved_sm.jpg

 

Round Earth

 

UNIGINE 2 Sim now lets you create round (ellipsoid) 3D Earth: objects can be placed in geo-coordinates (longitude / latitude / altitude) and visualized correctly even for high-altitude in-atmosphere flight. We also added support for high-res terrain insets that are bent according the ellipsoid model.

This enables precisely synchronized scenarios for flight simulation or similar tasks (continent-wide road network planning, precise weapon simulation, etc). And the power of UNIGINE's 64-bit coordinates precision is now used to its full extent.

You can create a completely curved world, and object physics behavior will be correct (however, it is important to make sure that the gravity vector is directed correctly in different points).

To bend object geometry, create a GeodeticPivot node, make your objects its children, specify settings and click the Make Curve button. At the moment, the GeodeticPivot node works with the following node types:

  • ObjectTerrain
  • ObjectWaterGlobal
  • ObjectSky
  • ObjectMeshStatic
  • DecalMesh
  • ObjectMeshClutter
  • ObjectGrass
  • WorldClutter

There are built-in WGS84, GRS80, GRS67, Airy 1830 and International 1924 reference ellipsoids and you can easily add custom geodetic datums (or another planet reference ellipsoid datums). You would only need to specify the semi-major axis, and the flattening coefficient. Yes, that simple.

Our plans for the next releases are:

  • Low-res template of the entire planet Earth
  • Seamless atmosphere-to-space rendering transition
  • Support for the rest of the object types

 

Updated Terrain Materials

 

Terrain material system has been switched to metalness workflow. There's no limit on the number of layers and materials anymore. We reworked the material system and got rid of index textures.

Terrain materials hierarchy became more clear:

  • Terrain Base specifies the base relief of the terrain.
  • Layers are used to group materials and specify their masks.
  • Materials are used for terrain visual representation.

terrain_material_structure_sm.png

Mask Base logic has been changed to Detail material logic: detail materials use the mask of the "parent" material.

Additional changes are:

 

Experimental Landscape Tool

 

Huge terrains are one of the UNIGINE's key features, so in order to streamline workflow and improve productivity of teams creating them we have completely rewritten the Landscape tool. This experimental tool is available in Sim edition only. Currently it features the following:

  • Support for multiple data layers aligned by geo-coordinates
  • Direct loading of standard file formats: GeoTIFF, DEM, JP2 and many more
  • Easy-to-use user interface
  • Performance-optimized terrain generation
  • Support for curved world model

landscape_sm.jpg

 

Next iterations of the Landscape tool are going to introduce procedural rules system, which will be used to procedurally refine / generate content based on geo-data (both raster and vector). Also, non-geo data support is planned for 2.4.

Old Landscape plugin for UnigineEditor is still available as well, until the new tool will gain all of its features.

 

HTC Vive support

 

AppVive plugin provides support for HTC Vive virtual reality hardware. By using engine.vive API methods, you can implement your own VR applications with HTC Vive support.

 

htc_vive_sm.jpg

 

Example project is provided in the Samples (Samples -> UnigineScript -> App -> app_vive_00) section of Unigine SDK Browser.

 

Metalness Workflow by Default

 

Metalness workflow materials properties are, compared to specular workflow, much closer to the real-world ones. Being based on the real, physical behavior it is thus somewhat easier for content authors to understand. Most of the advanced digital texture creation tools (3D-Coat, Substance Painter, etc.) are switching to metalness workflow these days.

We decided to switch to metalness as well and made a huge internal change in the renderer and shaders with this release. Specular workflow is still supported, but metalness is used by default from now on. Because of that change, UUSL now provides a new GBuffer structure that supports both specular and metalness workflows, as well as methods to convert specular GBuffer to metalness.

 

Improved Screen-Space Raytraced Reflections

 

In this release we restored SSR support with better visual quality.

 

ssr_off_sm.jpg

 

ssr_on_sm.jpg

 

Improved GGX Mipmaps

 

We added GGX mips for EnvironmentProbe cubemaps: when you grab the cubemap texture via the EnvironmentProbe node interface, the engine automatically creates GGX mip cubemaps. GGX mips have better quality and meet all the requirements of physically-based rendering.

It doesn't work for EnvironmentProbe's dynamic reflections.

 

ggx_off_sm.jpg

 

ggx_on_sm.jpg

 

To use this feature in your existing projects, you should re-grab all the cubemap textures for your EnvironmentProbes.

 

Parallax Depth Cutout

 

Introduced parallax depth cutout technique that improves parallax mapping quality.
It's visually great: you can see how a mere texture plane looks almost like real geometry. Objects with parallax depth cutout option enabled connect extremely smoothly with the real mesh objects (see the picture below).

Also, this technique improves the SSAO calculation on surfaces with parallax maps.

 

parallax_depth_cutout_sm.jpg

 

 

New Depth of Field Effect

 

DoF effect has been completely reworked in order to achieve photorealistic effect:

  • Enabled Bokeh effect by default. Two more physically correct Bokeh shapes are available: circle and ring
  • Improved transitions between in-focus and out-of-focus parts of the image
  • Simplified effect settings
  • Added chromatic aberration support
  • Added visualizer: Rendering -> Buffers -> DoF mask

dof_sm.jpg

 

dof_mask_sm.jpg

 

An example can be found in the Samples demo (Camera Effects section).

Added DOF-related console commands for fine tuning: render_dof_resolution, render_dof_quality, render_dof_bokeh_mode, render_dof_increased_accuracy, render_dof_focus_improvement.

Additional bokeh shapes are slated for future releases.

 

Configurable TAA

 

Added flexible TAA settings that enable fine-tuning TAA for different scenes types (Render Settings -> TAA in UnigineEditor).

Those settings let you:

  • Control the number of frames for velocity buffer. That reduces the blurring in dynamic scenes with a lot of moving objects
  • Clamp the color of the current and previous frame. The image becomes more sharp.
  • Fix the flickering of bright thin wires, ropes and lines in dark scenes
  • Control the AA detail level.

The respective console commands are render_taa_velocity_clamping, render_taa_color_clamping, render_taa_fix_flicker.

 

GI by Box Projection

 

The fact that EnvironmentProbe in UNIGINE 2 can define environment lighting enables reusing it for Global Illumination effects too. In addition to the traditional method of projecting a cubemap onto a sphere, we also provide an optional box projection method (formally, projection onto a cuboid). That works (much) better with indoor scenes (where the rooms tend to be boxes), or box-shaped outdoor scenes (think of a back alley between buildings). Corners are specially treated, too: objects closer to corners are more glossy, that is both more physically correct, and helps fight artifacts.

 

 

Note that the effect is mostly visible next to the walls. Moving objects can cast GI light bounces, too; for that you need to enable "dynamic" flag in the EnvironmentProbe (otherwise moving objects will just be accepting the GI bounces from the environment). It is also recommended to use this feature together with SSR to achieve better visual results.

 

Water Improvements

 

Ship Wake Effects

 

New FieldHeight node with particle systems can provide an effect of a stern wave (when moving vessels leave a long trail on the water) and a so-called bow wave in front of vessels.

 

bow_stern_waves_sm.jpg

 

FieldHeight object uses its own height map texture to change global water heights. You can create a new FieldHeight object either in UnigineEditor (Create -> Effects -> Field Height), or programmatically by using the FieldHeight class. render_field_height_resolution console command controls the FieldHeight height texture resolution.

Oil Platform demo provides an example of both stern and bow waves.

 

 

Shoreline

 

By using FieldShoreline, you can create nice swash zones, where waves smoothly fade out right next to the shore. It also adds an effect of wet sand and wet objects on the shore: stones, litter, etc.

You can create a FieldShoreline node via UnigineEditor (Create -> Effects -> Field Shoreline) or programmatically by using the FieldShoreline class. The resolution of FieldShoreline texture can be set by the render_field_shoreline_resolution console command. Also you can enable / disable wetness effect by using render_water_shoreline_wetness console command.

 

shoreline1_sm.jpg

 

shoreline2_sm.jpg

 

Examples can be found in Port Angeles demo and in the Samples (Water section) demo.

 

 

Underwater Improvements

 

Underwater scenes are now somewhat more realistic, with the advent of the following two changes:

sunshafts_sm.jpg

 

caustics_sm.jpg

 

 

Decal Improvements

  • Added 3D texture for detail state of decal_base material: you can set transformation of the 3D texture now
  • Added world align mode for decals (decal-independent UV for projection)
  • Added alpha blending mode for decals (detail and base alpha multiplication)
  • Added water decals option: decals can be projected onto the water surface (you should enable the water decal option in decal_base material)
  • Added screen projection state to decal_base material (mesh decals are projected onto each surface behind the mesh)
  • Restored parallax support for decal_base material

Other Renderer Improvements

  • Restored support for orthographic projection camera
  • Added inverse depth (inverse Z buffer) support instead of logarithmic
  • Renamed base_transform to uv_transform material parameter
  • Removed deferred transparent pass: all transparent objects are rendered in the forward pass now
  • Added support for the forward transparent pass for LightEnvironmentProbe
  • Fixed GGX model
  • Added parallax for decals and shadows
  • Added colored specular highlights for light sources
  • Added Quad Buffered Stereo support for AppProjection
  • Added render_water_opacity_depth console command for water soft interaction (for particles). This command also activates the DoF effect for water
  • Renamed Decal Mask to Material Mask
  • Moved Alpha Test option to Transparency options
  • Added RG11B10F support, it can provide noticeable performance boost for interior scenes (disabled by default)
  • Added *_sh postfix for shader textures (similar to *_alb or other texture postfixes)
  • Added new console commands to control the per-object light source count limit in the forward rendering material: render_world_lights_per_forward_object, render_omni_lights_per_forward_object, render_proj_lights_per_forward_object, render_env_probes_per_forward_object
  • Added a per-material option to disable post-effects (SSAO, SSR, SSS, DOF, Motion Blur, Sun shafts) in materials' State tab.
  • Added triangle blur for render_blur material
  • Added disable_soft_shadows parameter to particles_base material
  • Added jitter transparency state to mesh_base material (alpha test is performed by using noise)
  • Added MaxWarmingTime parameter for Particle Systems
  • Replaced render_shader_define console variable by render_defines console command
  • Added render_textures_max_resolution console command to control max resolution of the textures.
  • Fixed velocity calculations for multi-window rendering (AppWall, AppProjection, etc.)
  • Added support for QuadBuffered stereo in AppProjection
  • Fixed object shaking in WidgetSpriteViewport
  • Various bugfixes

Experimental New Editor

 

There were a lot of UnigineEditor improvement requests, we heard you, and our Tools Team has been working on a shiny new version for a few months now. Today, we're proud to announce that the core internal subsystems are all done, we have started working on the GUI, and the experimental new editor build is now immediately available to customers starting with the 2.3 release.

Key features:

  • Completely rewritten from scratch in C++ (faster, better architecture)
  • Greatly improved usability
  • Qt-based interface (native widget look and feel)
  • Deep integration with the asset browser
  • Hot loading into the running engine instance is back! (editor2_load / editor2_quit console commands)
  • Customizable UI layout with dockable panels
  • Extensible by plugins

editor2_sm.jpg

 

Please bear in mind that this isn't yet a production-ready version, but rather an early technical preview. To try it out, check Options -> Use Editor2 (experimental) in the SDK Browser. Production version will be released along with SDK 2.4.

 

FBX Export Improvements

  • Added support for object dynamic meshes
  • Added support for vertex colors
  • Added enabling / disabling dialog option for exporting lights, cameras, normal maps
  • Other minor bugfixes

Improved API

 

C++ callbacks changes: declarations more strict from now on. For example, old callback declaration could look like:

virtual void setEnterCallback(CallbackBase *func) const = 0;
virtual void setLeaveCallback(CallbackBase *func) const = 0;

And the respective new one is:

virtual void setEnterCallback(Unigine::CallbackBase1< Ptr<Body> > * func) = 0;
virtual void setLeaveCallback(Unigine::CallbackBase1< Ptr<Body> > * func) = 0;

So as you see, the callbacks are now (partially) type-safe.

 

Other API improvements and changes:

  • Fixed C# API set*Callbacks
  • Fixed PhysicalTrigger "Leave" callback behavior
  • Added all the missing methods to C# API MathLib
  • Added convenient math constants to C++ / C# API:
    • vec2::ZERO, vec2::ONE, vec2::EPS, vec2::INF (and the same for dvec2, vec3/dvec3, vec3/dvec4)
    • vec3::UP, vec3::DOWN, vec3::FORWARD, vec3::BACK, vec3::RIGHT, vec3::LEFT (and the same for dvec3)
    • hvec2::ZERO, hvec2::ONE (and the same for hvec3, hvec4, ivec2, ivec3, ivec4, bvec4)
    • mat2::ZERO, mat2::ONE, mat2::IDENTITY (and the same for mat3, mat4, dmat4)
    • quat::ZERO, quat::IDENTITY
    Old vec2_zero-style constants are marked as deprecated and will be removed in the further releases.
  • Added new methods for mat4 / dmat4 to C++ / C# API: getUp(), getDown(), getForward(), getBack(), getRight(), getLeft()
  • Added new MathLib functions:
    • getAngle() to return non-negative convex angle (non-reflex) within 0 < a < 180
    • getAngle() to return convex angle (non-reflex) (can be negative)
    • rotateTowards() to rotate quat / vec3 about some max angle
  • Renamed C++ UnigineUtils.h to UnigineSort.h
  • Added new UnigineUtils.h which contains different helper functions
  • Added Camera::getDirectionFromScreen() method to C++ API (similar to UnigineScript's getPlayerMouseDirection() from utils.h)
  • Fixed Viewport::renderNodeImage2D() incorrect behavior
  • Added VIEWPORT_SKIP_FORMAT_RG11B10 flag for RG11B10 rendering control
  • Added a local_space flag to Viewport::renderImageCube() method:
    camera angle is now accounted for when local_space==true
  • Added flat/curved topology-related methods to Node class (supported by ObjectMeshStatic / DecalMesh / ObjectTerrain nodes):
  • Added flat/curved topology-related functions to ObjectTerrain
  • Added new ObjectParticles methods: getBoundBoxParticles(), getBoundBoxSimulation()
  • Added new FileSystem methods: addDirectory(), reloadPackage()
  • Added Stream::getType() method with available type STREAM_BLOB | STREAM_FILE | STREAM_SOCKET | STREAM_USER values
  • Added new property methods and flags for LightEnvironmentProbe
  • Added Geometry class functions to work with geometry
  • Updated Node class functions
  • Updated Player class functions
  • Updated Camera class functions
  • Updated DOF methods in the Render class

The complete list of API changes is available in the API Migration Guide.

 

UUSL Additions

  • Added checkMask() method to check if the given bits are all set in a bitmask
  • Added isOrtho() method to check whether the camera's projection is orthographic or not
  • Added INIT_TEXTURE_INT() for int texture initialization
  • Added loadGBufferVelocity() and loadGBufferMaterialMask() methods to GBuffer.
  • Changed TEXTURE_2D_CUBIC() function arguments
  • Added new constant masks
  • Added new shader parameters: s_material_mask, s_sky_up, s_sky_altitude, s_sky_transform
  • Added component-wise min/max functions to UUSL
    • maxFloat2() / maxFloat3() / maxFloat4() support up to four arguments
    • minFloat2() / minFloat3() / minFloat4() support up to four arguments
  • Added uint32 to half2 decompression function floatDecompressHalf1616()
  • Added geodetic-related functions:
    • struct GeodeticTopology, basic GPU-side curved geometry topology storage
    • geodeticTopologyDefault() constructor
    • geodeticTopologyCalculateUV() to calculate topology texture UV coordinates
    • geodeticTopologyCalculateCurved() to fetch curved data from topology texture
    • geodeticMul4() to apply transformation to curved point
    • geodeticBasis() to build transformation based on curved data
  • Added support for unpackHalf2x16 (for OS X) from GLSL 4.2 standard

Miscellaneous

  • Added support for images larger than 2 GB.
  • Added support for absolute paths in state_save / state_restore
  • Updated Oculus SDK to 1.6
  • Fixed crashes under Linux / Mac OS X platform on shutdown
  • Various bugfixes and minor improvements

Documentation

 

Documentation improvements never cease to stop, and the following changes have been made based on your feedback:

Offline documentation is now available via the Knowledge section in the UNIGINE SDK Browser. You can download multiple different versions, as necessary.

 

offline_docs_sm.png

  • Like 1
Link to comment

Known Issues
 
Engine (2.3, ver-2.3-6a8d10c):

  • OpenGL + Multiple Envitonment Probes option + Alpha blend = artifacts on some nVidia GPUs (Kepler architecture) with a latest driver.
  • Xml parsing methods getDMat4Data()getDMat4Arg() are not working.
  • Terrains are not working on Mac OS X SDKs (OpenGL Invalid error).

Editor (2.3, ver-2.3-6a8d10c):

  • Enabled Plays.TV from AMD will result in Editor instability. Solution: uninstall plays.tv completely.
  • Console::get_variable(): can't find "render_bokeh" variable warnings when switching between Final Image (F2) and other rendernig modes.

Add-ons / Plugins:

  • SimLights add-on sample is not migrated (no rabbit lights available in sim_lights_00 world). Fixed in add-on version 2.3.1.

SDK Browser (1.7.x):

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

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

Link to comment

Congratulations for the realease. Sincerely, in my humble opinion, Unigine has THE BEST water system for a game engine. Don't give up. B)

 

Updating one project to this release it crashed when trying to set a material parameter expression:

mat.setParameterExpression(mat.findParameter("base_transform"), format(base_transform_template, d*0.25f, s*0.05f, s*0.05f));

it has been solved by replacing "base_transform" by "uv_transform"

mat.setParameterExpression(mat.findParameter("uv_transform"), format(base_transform_template, d*0.25f, s*0.05f, s*0.05f));

I didn't found this information in documentation, is this correct?

Link to comment

honya

 

You can use engine.utils.convertNodesToMesh(Mesh, Nodes[0]) instead. Something like that:

Node nodes_to_convert[0];
Mesh mesh = new Mesh();

Node mb = engine.editor.getNodeByName("material_ball");
nodes_to_convert.append(mb);

engine.utils.convertNodesToMesh(mesh, nodes_to_convert);
mesh.save("test.mesh");

We will add this information to the documentation ASAP.

 

Thanks!

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

Link to comment

Hi

 

Please help me how to run editor2 from command line.

I tried to run it as a plugin, but no success.

 

                                                       Thanks

Link to comment

Hi

 

Please help me how to run editor2 from command line.

I tried to run it as a plugin, but no success.

 

                                                       Thanks

 

 

hello

If you want to run editor2 from command line for custom project, you can use next steps for example:

 

0. create custom project in sdk browser

1. copy folder editor2 from <sdk browser storage path>/sdks/professional_windows_2.3/data to <your_project_path>/data

2. copy libs Editor2_*.dll from <sdk browser storage path>/sdks/professional_windows_2.3/lib to <your_project_path>/bin

3. run engine (main_x64 for example) with next parameter -extern_plugin Editor2

Link to comment
×
×
  • Create New...