Unigine SDK 2013-06-07: Data Streaming and Terrain Improvements


photo

Recommended Posts

Terrain Improvements

  • Terrain data streaming is fully asynchronous now.
  • It's also possible to force loading of a specified terrain region via Terrain::loadHeights() function with the specified bounding box.
  • Added "progression" parameter for terrain LODs, that affects LOD switching distance: prev_distance + lod_distance * (lod_progression ^ lod_number); default value is 2.0.
  • The terrain file format has been changed as well, please use the upgrade script: utils/Upgrade/terrain.usc.

130608_w1_sm.jpg

 

Landscape Plugin for UnigineEditor

 

Landscape plugin allows to create huge seamless scenes containing virtually unlimited number of terrain objects (each one of them can be up to 16385x16385 units in size).

Each terrain in the landscape is an independent object that has all the terrain features and can be modified in the same way. Besides, there is an opportunity of applying only required tiles of textures and masks right to the whole landscape or to any specific region. The plugin also takes care about optimal compression of textures.

 

130608-landscape_plugin.png

 

File System Speedup

 

Added support for pre-cached file hierarchies: if the engine finds .ulist file in a directory, it stops scanning its contents (including nested directories) and use the list of files from the file instead. Thus the engine initialization time can be extremely reduced even with large assets database. There is a .ulist file generator available for your convenience: externs/bin/datalist.py. Don't forget to re-generate .ulist files, if you modify contents of a directory.

Added background loading of images (with unpacking): engine.filesystem.loadImage() function.

Added filesystem_clear console command to remove all loaded, but unused resources.

 

Rescue Helicopter Simulator

 

UNIGINE Engine has been using in training and simulation field for several years, so we've decided to make our own simulation demo. At ITEC 2013 in Rome we showcased the preview of a new rescue helicopter simulation.

 

130608_w3_sm.jpg

 

Features of the demo:

  • Huge open space: 262x262 km
  • Real geospatial data
  • Urban terrain simulation
  • Dynamic weather
  • Large visibility distance: 40 km
  • Supersonic camera speed
  • Extremely detailed close-up view
  • Advanced light scattering model
  • Double precision of coordinates
  • Volumetric clouds
  • Day/night cycle

130608_w2_sm.jpg

We'll publish the video teaser quite soon, so you'll be able to see the details.

 

Render

  • Performance optimization of terrain rendering.
  • The number of rendering groups has been increased to 8.
  • Improved OpenGL core profile compatibility.
  • Added support for PNG and TGA formats in Image::info() function.
  • Added "Substitute normal" option for decal_deferred_base material (if enabled, only decal normals will be used, otherwise decal normals will be combined with underlying surface ones).
  • Added "First frame" flag: it stops FPS counting and sets unlimited budget for Grass and Clutter generation.
  • Added new ObjectDynamic object: it can render any type of geometry, with support for instancing and point/line/triangle rendering modes. This type of object requires custom shaders in order to work.
  • Point/line/triangle rendering modes have been removed from ObjectMeshDynamic, use ObjectDynamic instead.
  • Begin/end indexes of multi-surface ObjectDynamic and ObjectMeshDynamic objects can be changed.
  • Render vegetation animation time can be changed via UnigineScript: engine.render.setAnimationTime().
  • Added detection of NVIDIA TITAN and Kepler-based Quadro cards.

World Management

  • Performance improvement for all engine resource managers (render, world and sound) on large (100k+) amounts of resources.
  • ObjectGrass, ObjectMeshClutter and WorldClutter objects can intersect with the parent node even if they are placed inside a node reference.
  • Added generation budget (per-object) for Grass and Clutter objects to avoid performance spikes: engine.world.setBudget() via scripts (in ms) or Render tab in UnigineEditor (in FPS). Objects with lower rendering group ID have higher priority when out of budget.
  • Performance info on resource managers is available via EngineAnalyzer now.
  • Grass and Clutter objects are checking parent terrain or mesh loading status to avoid lags on generation stage.

UnigineScript

  • Added Xml.setChildData() and Xml.getChildData() functions for convenient access to the child node data.
  • Fixed bug with incorrect scoping of "new" operator.
  • Arrays can be used as a function reference return values.

C++ API

  • Added access to ObjectDynamic.
  • Access to Node and Object surface boundings can be obtained via getBoundMin|Max|Center|Radius|... functions.
  • Added access to Render::FirstFrame and Render::CameraOffset parameters.
  • New sample with editor nodes interaction.
  • Added access to NodeDummy.
  • Added access to Node data.
  • Added access to load|saveWorld functions.
  • GLAppQt sample supports Linux and MacOS systems now.

GUI

  • Fixed incorrect initial Z-order of widgets.
  • WidgetDialogImage shows internal format info on ZLC images now.
  • Text alignment parameter for text rendering in the visualizer has been flipped in Y direction.
  • Support of point image filtration in Flash interface.
  • Added Gui.setFocusedPermanent() function: 1 - font color will be overrided with global GUI focused color, if a widget is focused; 0 - font color will be unchanged if focused.
  • Fixed bug with incorrect multiple object resizing in Flash.
  • Fixed Interface plugin bug: disappearing of the window after video mode change in Mac OS X.
  • Interface plugin can work correctly with -video_app null CLI option.

Tools

  • Added "Drop down" button in Nodes window of UnigineEditor: once pressed, all selected nodes will fall on the underlying geometry.
  • Added support for new postfixes in imagedds.py script for pre-mipmapped images: _dm, _nm, _sm, _pm, _hm, _tm, _am, _em, _lm, _mm.
  • It's possible to change mesh file for ObjectMeshClutter and ObjectMeshCluster in UnigineEditor without clearing their parameters.
  • Correct resource saving outside the data directory via UnigineEditor.
  • Added save() callback on world saving for UnigineEditor plugins.
  • Fixed bug in UnigineEditor with incorrect automatic texture compression from "uncompressed" directory.
  • Terrain editor can edit ZLC textures.
  • Added First frame parameter into Tracker.
  • Improved double precision support in Tracker transformations.
  • Double-click on a property name field (with file flag set) will open file dialog in UnigineEditor.
  • Updated icons in UnigineEditor.
  • Added export/import plugins for Maya 2012, 2013 and 2014.

Mobile

  • Refactored Android UnigineActivity classes: now it's possible to call system or Java functions with up to three different arguments and get return value of all supported data types (int, float or String).
  • Added hardware accelerometer support for Android and iOS devices.
  • Added two simple samples for custom iOS applications.

Other

  • Added configurable physics simulation budget: engine.physics.setBudget() function.
  • Fixed missing application icon in 64-bit Linux.
  • Added support for double precision for Image down-scaling.
  • Added Image::compare() function to compare regions of two images with the specified threshold.
  • Added /largeaddressaware option for 32-bit Windows builds in order to be able to allocate up to 3 GB of memory on 32-bit systems.
  • Updated .world and .node file format: please use upgrade.py script to upgrade your data.

 

Download links

All files can be found in "Downloads" section of the portal: https://developer.unigine.com/fileserver/index

  • Like 1
Link to post

So thanks,

 

I am excited to sea video teaser ASAP.

Link to post

What about access to this cool demo? Maybe you give a some downsized version? I remember about 60 gb..... Although if you were to give access to the full version, I will gladly bought her a separate hdd

  • Like 1
Link to post

The demo is still in the development, final version will be available in December.

  • Like 1
Link to post

Any hopes for PS4 or xbox one support?  Not that we are serious about either of those platforms at this point.  I'm just curious if they will be an option down the road!  Great work on everything and thanks for the Maya 2014 support! :)

Link to post

I don't know where to begin...

 

This is a  huge update. I really am impressed with the feature list that you guys implement when you take on your own projects.

 

3 thumbs up!

 

Link to post

Looks this is another great update!

 

And I have a question about ObjectDynamic. according to the info, it can support any type of mesh, but need custom shader, is that means If I want to use a special type of this object, I must create corresponding shader to each of these type, or I can still use default shader on it?

 

and another question to ObjectDynamic, With this type of mesh, can I create a mesh with more than 4 attribute? like I want to add 4 more attribute to use with vertex shader, is it also possible? because I saw the function ObjectDynamic::addVertexHalf in ObjectDynamic.cpp, it only support 4 attribute, So I have this question.

Link to post

The default shaders expect a certain vertex format (though undocumented at the moment). So if you provide the same format it should be possible to use the default shaders which would be quite nice. Most probably problem starts when you provide a changed or extended custom vertex format. In this case I would expect that you must provide your own shader implementations for proper vertex data decoding.

 

ObjectDynamic::addVertexHalf( int attribute, float[] values, int value_count ) allows you to provide a user-defined number of values per attribute (attribute = vertex entry) as far as I understand the source code.

Link to post

Thank you ulf, I won't change the first 4 attributes, I just need to extend few more attributes.

 

and it there any sample for this new ObjectDynamic?

Link to post

Thank you!

 

At the demos specs: What is meant by: Real Geospatial Data?

Do you mean, that you put in height information from DEMs? Or is there a new import format? Geotiff probably?

 

Best.

 

Werner

Link to post

Thank you!

 

At the demos specs: What is meant by: Real Geospatial Data?

Do you mean, that you put in height information from DEMs? Or is there a new import format? Geotiff probably?

 

Best.

 

Werner

 

+1

Link to post

Any hopes for PS4 or xbox one support?  Not that we are serious about either of those platforms at this point.  I'm just curious if they will be an option down the road!  Great work on everything and thanks for the Maya 2014 support! :)

 

We are working on getting access to devkits now.

Link to post

Thank you!

 

At the demos specs: What is meant by: Real Geospatial Data?

Do you mean, that you put in height information from DEMs? Or is there a new import format? Geotiff probably?

 

Best.

 

Werner

 

Geospatial data (elevation and landcover) was converted with GlobalMapper and refined with WorldMachine afterwards.

Link to post

We are working on getting access to devkits now.

 

This is awesome news!  I'm curious, since Oculus Rift is now fully supported, would that port over to PS4 and xbox one support?  I'm not sure how they plug in, but I'm curious if that would be an option.

Link to post

Geospatial data (elevation and landcover) was converted with GlobalMapper and refined with WorldMachine afterwards.

 

Thanks for the tip on using GlobalMapper, I'll give it a try.  I'm curious where you get your geospatial data from?  I've always used this: http://viewer.nationalmap.gov/viewer/.  Is there something better?

Link to post

Really happy with this update, most promising changes in a while. Small quibble would it be possible to split data into a platform agnostic download, We have some linux boxes and some windows boxes here and it's a lot of extra download for a few extra files.

Link to post

Great update :) but...

 

  • Added new ObjectDynamic object: it can render any type of geometry, with support for instancing and point/line/triangle rendering modes. This type of object requires custom shaders in order to work.
  • Point/line/triangle rendering modes have been removed from ObjectMeshDynamic, use ObjectDynamic instead.
  • Begin/end indexes of multi-surface ObjectDynamic and ObjectMeshDynamic objects can be changed.
Can you provide a sample using ObjectDynamic and OBJECT_DYNAMIC_MODE_LINES?
I'm afraid I don't understand the shaders/particles_00/01 sample and the ObjectDynamic documentation is not completed yet.
 
Thanks.
  • Like 1
Link to post
  • 2 weeks later...

 

Great update :) but...

 

Can you provide a sample using ObjectDynamic and OBJECT_DYNAMIC_MODE_LINES?
I'm afraid I don't understand the shaders/particles_00/01 sample and the ObjectDynamic documentation is not completed yet.
 
Thanks.

 

Check the lines_00 sample.

shaders.zip

Link to post