---
title: "UNIGINE 2.4.1: Stabilization, Interactive BIM Demo"
version: "2.4.1"
release_date: 2017-03-01
lang: en
slug: "unigine2.4.1"
entry_id: 132
author: "fox@unigine.com"
source: "20170301-unigine-2.4.1/index.xml"
source_url: "https://developer.unigine.com/devlog/20170301-unigine-2.4.1"
---

# UNIGINE 2.4.1: Stabilization, Interactive BIM Demo

## Key Changes

- Optimized ObjectTerrainGlobal.
- ObjectCloudLayer improvements.
- Landscape tool optimizations.
- Improved API for geo-referenced vector data manipulations.
- Overall engine improvements and bugfixes.
- Added interactive features into Oil Refinery demo.
- New C# integration samples.

This is primarily a stabilization release, all users are strongly recommended to update.

**Video (YouTube):** https://www.youtube.com/watch?v=XykbLnLQZUs

## Oil Refinery Demo

Oil Refinery demo got a lot of interactive features to showcase BIM (Building Information Model) capabilities of the engine.

- An interactive personnel training usecase: a sequence of operations required to start a diesel generator.
- Displaying various types of metadata (statistics, telemetry data, etc.) bound to certain buildings and facilities enables to control various parameters in real time.
- Visualization of construction stages can be useful for overall construction process planning.
- A day-night cycle provides an opportunity to check all lighting systems of the enterprise.
- Video sequences can be used to make high-quality presentations of the project.

![](https://developer.unigine.com/devlog/20170301-unigine-2.4.1/oil_refinery0.jpg)

![](https://developer.unigine.com/devlog/20170301-unigine-2.4.1/oil_refinery1.jpg)

![](https://developer.unigine.com/devlog/20170301-unigine-2.4.1/oil_refinery2.jpg)

General features of the demo:

- **360 000** square meters territory.
- Over **45M** polygons.
- Over **19000** geometry surfaces.
- Over **1300** light sources.
- Over **100** unique models.
- A set of modes making it possible to explore every corner of the oil refinery in various aspects.
- Dynamic sky with volumetric clouds and tweakable day-night cycle.
- Adjustable weather and wind speed.
- Scalable quality settings.
- VR support (Oculus Rift and HTC Vive).

## ObjectTerrainGlobal

- Optimized tiles loading.
- Fixed smoothing when loading tiles.
- Fixed shadows rendering.
- Fixed artefacts occurring when filtration was enabled.
- Fixed bug with ObjectTerrainGlobal intersection check if no patches were created.
- Fixed crash in ObjectTerrainGlobal on video_restart.
- Fixed rendering when “No imagery data” was enabled.

## Landscape Tool

- Improved performance due to generation of normals along with elevation.
- Added validation of the GPU compression.
- Added saving the GDAL info into assets, which provides faster assets opening and prevents opening of the file descriptors for every source.
- Increased RAM limit option to 20-70%.
- Added the GPU compression to assets.
- Added the UNG compression.
- Fixed memory leaks during generation.
- Fixed clean up of the data when generating a new landscape.
- Fixed values of estimated generation time.

## Geodetics

- Added a [DatasetRasterPosResolver](https://developer.unigine.com/en/docs/2.4.1/api/library/geodetics/class.datasetrasterposresolver) class that performs conversion between raster (X, Y) and geodetic (latitude, longitude) coordinates.
- Added GeodeticPivot::mapMeshFlatToEllipsoid and GeodeticPivot::mapMeshEllipsoidToFlat methods that:
    - Map a flat mesh by using the local coordinates (X, Y) as position on the flat plane and Z as an altitude to the ellipsoid and vice versa.
    - Work with Mesh class which can be lately passed to any related node or used directly.
    - Return position on the ellipsoid or flat plane where the node is to be placed.
- Old updateTopology / clearTopology methods from DecalMesh and ObjectMeshStatic nodes have been removed.
- Added GeodeticPivot::mapFlatToGeodetic and GeodeticPivot::mapGeodeticToFlat methods that:
    - Map geodetic latitude, longitude and altitude coordinates to the flat plane coordinates according to pivot's origin latitude, longitude and altitude and vice versa.
    - Use new ellipsoid math.
- Added correct curving of ObjectGrass and ObjectMeshClutter.
- Added orientation flag for ObjectGrass, ObjectMeshClutter and WorldClutter.
- Updated GeodeticPivot migration script.
- Removed the ellipsoid mode from legacy UnigineEditor and experimental UnigineEditor2.
- Old ObjectTerrain and ObjectSky now use the new math.
- Fixed mapped mesh bounds causing wrong intersection and visibility checks.
- Fixed engine crash due to the invalid GeodeticPivot pointer.
- Fixed reflections on the curved surfaces.
- Fixed lighting of deferred objects if ObjectCloudLayer and GeodeticPivot were added to the scene.

## Other Engine Improvements

- Added support for ZLC1/ZLC2 textures.
- Refactored mesh instancing for ObjectMeshStatic, ObjectMeshDynamic, ObjectMeshCluster and ObjectMeshClutter:
    - Increased DirectX 11 instance count (256 instances per draw call).
    - OpenGL instance count remained the same (41 instances per draw call).
    - Removed NUM_INSTANCES shader define from UUSL, now engine will automatically set RENDER_MESH_NUM_INSTANCES shader definition.
- Fixed ObjectMeshClutter intersections.
- The slash at the end of the path specification in the Dir class is no longer required.
- Reduced memory consumption of FieldShoreline and FieldHeight texture buffers.
- Fixed ObjectWaterGlobal visibility distance (the correct value is 400+ km).
- Fixed planar reflections on ObjectWaterGlobal and ObjectWaterMesh.
- Fixed artefacts on lighting through the semi-transparent nodes on AMD.
- Fixed work of normal maps.
- Fixed playback of animations generated from the FBX file without geometry.
- Fixed double precision support for macOS causing shader compilation errors (requires GL_ARB_gpu_shader_fp64 extension support).
- Fixed passing of shader definitions and reduced the number of shader allocations.
- Fixed projection of the mesh decals.
- ObjectCloudLayer bugfixes:
    - Fixed sorting when curving several layers.
    - Fixed incorrect lighting at specific angles.
    - Fixed overexposure.
- Fixed writing to the velocity buffer.

## API

- Added the Visualizer::clear method that clears the internal buffer filled after calling any of Visualizer::render\* methods.
- Added the “unique” flag to DecalMesh::setMesh and ObjectMeshStatic::setMesh. It allows overriding a shared mesh resource or creating a new unique resource.
- Added grab(), release() and isOwner() methods to the PackageUng class.

The complete list of API changes is available in the [API Migration Guide](https://developer.unigine.com/en/docs/future/migration/migration_api).

## C# Integration Samples

- Restored D3D11SharpAppForm and GLTKAppForm samples (integration of the engine to the Windows Forms).
- Added new D3D11SharpWPF and GLTKSharpWPF samples (integration of the engine to the WPF - Windows Presentation Foundation).

## UnigineEditor

- Added the “Combine by LODs” option to the FBX import. It provides settings for custom LODs combination.
- Updated OpenFlight Import plugin:
    - Increased import speed due to skipping the recurrent DXT textures compression.
    - Added support for semi-transparent materials.
    - Added default specular texture.
    - Added additional relative paths for textures search.
    - Disabled “Instance material” option by default.
- Added play and stop of WorldTransformPath node animation to Unigine Tracker.
- Fixed creation of extra clones when several nodes are selected.
- Fixed incorrect hierarchy of the cloned nodes.

## Experimental UnigineEditor2

- Fixed work with Starter and Professional builds.
- Fixed work in the Windows 7 builds.
- Fixed bugs with assets renaming.

## Documentation

Added C++ tutorials on physics:

- [Creating a Car with Suspension Joints](https://developer.unigine.com/en/docs/2.4.1/code/uniginescript/usage/car_suspension_joints/)
- [Creating a Simple Mechanism Using Joints](https://developer.unigine.com/en/docs/2.4.1/code/uniginescript/usage/simple_mechanism_joints/)
- [Creating Pylons and Wires Using Ropes](https://developer.unigine.com/en/docs/2.4.1/code/uniginescript/usage/ropes_creating_pylons_and_wires/)
- [Enabling Selective Surface-Based Collision](https://developer.unigine.com/en/docs/2.4.1/code/uniginescript/usage/enabling_collision/)
- [Creating and Attaching a Cloth](https://developer.unigine.com/en/docs/2.4.1/code/uniginescript/usage/cloth_particle_joint/)
