Jump to content

Unigine SDK 2014-01-31: UNIGINE Sim and C++ API improvements


photo

Recommended Posts

Introducing UNIGINE Sim

Over the years it became evident that UNIGINE is being used in two main industries: game development (about 15-20% of the customers) and "serious games" (simulation, visualization and VR). A lot of engine features are used in both directions, while some of them are purely simulation-specific. So we decided to split the product into UNIGINE Sim and UNIGINE Game: based on the same engine, these products have different sets of features and pricing schemes.

 

There is a new website dedicated to UNIGINE Sim: sim.unigine.com (available in English, Russian and Chinese).

 

140131_sim.png

 

Main differences between the SDK editions are listed in the table:      

 

Feature         Sim         Game

App3DSurround plugin + -

AppPanorama plugin + -

AppProjection plugin + -

AppQuadBuffer plugin + -

AppSeparate plugin + -

AppWall plugin + -

OpenFlight plugin + -

CigiClient plugin + -

RakNet plugin - +

Binaries with double precision of coordinates + -

Syncker multi-channel rendering system + -

 

Existing users have access to both editions, so they can decide which one is more convinent to use for them.

 

Rescue Helicopter Demo

We have completed second iteration of the UNIGINE-powered rescue helicopter demo:

 

 

The demo is available to customers for download, but it is not planned to publish it in the open access due to its significant size (about 60 GB). It was demonstrated as a part of a 6-channel simulator at I/ITSEC 2013 expo (some details below).

 

C++ API

  • Added NodeExtern and ObjectExtern, special types of custom nodes and objects created via API.
  • Added access to Light, LightOmni, LightProb, LightProj, LightSpot, LightWorld, ObjectBillboard, ObjectDummy and ObjectMeshCluster classes.
  • Added new Unigine::BoundSphere/Box/Frustum classes. All bounds-related functions have been added to these classes instead of the center/radius/min/max accessors in the Node, Object and World classes.
  • Added access to an Unigine::Physics class.
  • Added an Unigine::Visualizer class, providing access to visualizer functions.
  • Unigine::Light, Unigine::Object and Unigine::Player classes can now be passed via API.
  • Added a getID() static function to the Unigine::Thread class. It returns the unique cross-platform thread identifier (zero value means the main working thread).
  • Added a virtual get_data() function to Unigine::Plugin class. It is used for user-defined structures and data interchange between plugins.
  • Added a virtual get_name() function to Unigine::Plugin class. It is used to set a user-defined name for a plugin.
  • It is possible to inherit Unigine::Plugin inside the application to get access to engine callbacks without putting this object into a separate dynamic library.
  • An isOwner() function added to API smart pointers. If the pointer is the owner, on its deletion the object also will be deleted. Use grab() and release() functions to change ownership.
  • Vectors now have a set() function with support for multiple scalar arguments initialization.
  • Added access to the list of loaded engine plugins from scripts and C++ API.
  • An Unigine::Object base class supports surface-related functions now.
  • Improved Unigine::State class: getter functions have been added to each rendering state (getPolygonBias(), getPolygonSlope() and getShader() functions).
  • Refactored samples.
Game Framework
  • Added a set_file/get_file field type for entities, which adds an icon opening a file selection window.
  • "system_script", "extern_define", "extern_plugin" widgets moved from Editor settings to Game settings, so they are saved in the *.game file and are launched right on game initialization.
  • Added getIntersetcionObjectsEntity() and getIntersetcionNodesEntity() functions to the Level class. They provide fast and easy search for required entities within the specified area.
  • Added Shooter sample with the following features:
    • First person camera and controls
    • Simple HUD
    • AI-controlled enemies
    • Multiple levels
    • Data transfer across levels
    • Different weapons: pistol and grenades
    • Pickable items: med kits, ammo, additional lives, keys
    • Unlockable doors
    • Different levels of difficulty

140131_shooter_sm.jpg

 

Renderer
  • Added support for Oculus Rift HD.
  • Fixed volume_shaft_base material.
  • Added access to ObjectMeshSkinned skinned coordinate vertices and indices.
  • Added a getSpawnCount() function for ObjectMeshClutter and ObjectGrass objects. It returns the number of cells to be generated. If the function returns zero, the scene generation is completed.
Engine
  • Added an -extern_directory command line option for accessing resources outside the data folder.
  • Added a setID() function to Node, Body, Shape and Joint classes for manual ID control.
  • A world.addWorld() function would not clear the current world even if loading was unsuccessful.
  • Added functions which return the number of queued file system resources: engine.filesystem.getNumQueuedData/Files/Images/Meshes/Resources.
  • world.saveNode/saveNodes() functions can optionally save nodes in the binary format (disabled by default).
  • Improved pathfinding: a depth parameter added to the NavigationMesh class for better control over accuracy/speed of path calculation.
  • Added world thread counters into profiler.
  • Added access to world threaded resources information: engine.world.getNumQueuedNodes/Resources.
  • Fixed crash on the incorrect variable name in toggle and switch console commands.
  • Fixed bounding sphere calculation on double precision builds.
  • Added a NodeReference.releaseNode() method which releases the internal node of ownership so it is no longer owned by the node reference (made orphan). After being released the node should be appended to one of the scripts not to cause a memory leak.
  • Increased precision of the Bezier function on double precision builds.
  • Added support for double/float precision build configuration into Visual Studio projects.
  • Added support for Microsoft Visual Studio Express 2013.
UnigineScript
  • Added a new id() container function to Vectors and Maps. It returns the internal integer ID of the array which can be used inside a call() function for array passing.
  • Fixed namespace reflection.
  • Fixed nested ternary operators.
  • A classid() system function can now accept string type values as an argument.
  • A class_cast() system function can now accept classid() integer values as a target class argument. It provides better performance.
  • Recursive functions will work inside the ASync class safely.
  • Fixed recursive calls of functions with reference arguments.
  • Added a debugging get_memory_usage function to system functions.
  • Added a key() member function to all user-defined arrays to get a key by the element index. It can be used for both vectors and maps: for vectors it returns the index itself, for maps it returns the key (similar to the get() function returning data).
  • Added an instanceid() function, which returns unique ID of the user-defined or external class instance.
  • Added an instanceinfo() function.
GUI
  • HBox and GridBox widgets now modulate the color of their children.
  • Added a setFixed() function to VPaned and HPaned widgets. setFixed(1) means that the top (or left) split has a fixed height (or width), setFixed(2) means a fixed size for the bottom (or right) split.
  • Added background, stencil and color accessors to the high-level Unigine::Widgets::VBox/HBox/GroupBox/GridBox/EditLine/EditText classes.
Documentation
  • Added a "Last update" date tag at the bottom of every page in the documentation.
  • Updated a Programming/GUI section: added info on localization, added more examples, updated info on all widgets and containers, added description of reference and include tags.
  • Updated UnigineScript function library.
  • Updated C++ API function library.
  • Updated a Content Creation/Materials section: added examples of materials inheritance and custom materials creation.
  • Added a Programming/Material File Format article, providing an info on .mat file structure.
  • Updated a Tools/ImageDDS article: added documentation on types of the image formats, updated list of CLIs and batch operations.
  • Updated a Development for Different Platforms section: added documentation on project compilation via Xcode, updated list of options for manual and semi-automatic compilation.
  • Updated Game Framework documentation.
  • Updated a Principles of Operation/File System article: added info on .ulist files.
  • Added a Tools/Launcher article.
Other
  • Android version is now compatible with data streaming and can load assets and resources from multiple threads.
  • iOS application can work in portrait mode (it must be compiled with the set APP_PORTRAIT definition).
  • Fixed OpenAL sound cone parameters.
  • Changed default names of the sound library to libopenal.so (Linux) and libopenal.dylib (Mac OS X).
  • Added a missed Collision flag to ObjectMeshClutter in UnigineEditor.
  • Fixed billboards orientation in impostor grabbing tool.
  • Fixed Interface plugin on Mac OS X: no more black window problems.
  • Fixed incorrect behavior of Interface plugin in the fullscreen mode.
  • getTransformScale() and decomposeTransform() functions from utils.h are now compatible with double precision of coordinates.
  • Benchmarks and content-heavy demos (Crypt, Character, Passage, GI, Tessellation, Sanctuary, Tropics, Heaven, Valley, Urban Driving) are excluded from SDK installers, they are available for download as separate .ung data packages in order to reduce amount of data to download on each update.

 

Download links

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

  • Like 1
Link to comment

Nice to see some love for the C++ APIs.  I take it that the expansion is to make it a bit more feasible to make applications primarily with the C++ side of the SDK?

Link to comment

This is very confusing.

Do I need the Game Engine or the Simulation Engine?

 

We want to build a game. -> Game Engine?

But it is a kind of simulation -> Simulation Engine?

We do not need huge areas and we always keep close to the ground -> Game Engine?

We want to project on the indside of a sphere -> Simulation Engine?

We need to connect several machine by ethernet -> Game Engine?

 

So what do we need?

Link to comment

This is very confusing.

Do I need the Game Engine or the Simulation Engine?

 

We want to build a game. -> Game Engine?

But it is a kind of simulation -> Simulation Engine?

We do not need huge areas and we always keep close to the ground -> Game Engine?

We want to project on the indside of a sphere -> Simulation Engine?

We need to connect several machine by ethernet -> Game Engine?

 

So what do we need?

 

Cor, you need UNIGINE Sim.

 

Basically, UNIGINE Sim has all Game features plus some simulation-specific ones.

Link to comment

Cor, you need UNIGINE Sim.

 

Basically, UNIGINE Sim has all Game features plus some simulation-specific ones.

 

Can you explain why? what we want to create is more like a game then like a typical simulation.

Link to comment

Can you explain why? what we want to create is more like a game then like a typical simulation.

 

If you need to use some non-consumer output devices (curved screens, CAVE, etc) it's necessary to use UNIGINE Sim because it contains all the required plugins.

UNIGINE Sim has virtually all the features UNIGINE Game has, including Game Framework - so you will not be limited with it.

Link to comment

UNIGINE Sim has virtually all the features UNIGINE Game has, including Game Framework - so you will not be limited with it.

 

Then RakNet plugin should also be available in UNIGINE Sim. Above table states that RakNet-Plugin is just available in th UNIGINE Game version which would be bad 

Link to comment

Then RakNet plugin should also be available in UNIGINE Sim. Above table states that RakNet-Plugin is just available in th UNIGINE Game version which would be bad 

 

We do not plan to develop RakNet plugin further, it's in the bug fixes only mode.

RakNet isn't the best solution for simulation tasks, moreover it requires additional paid license for non-indie applications.

 

UNIGINE Sim contains Synker system for network synchronization instead.

 

If there will be some demand on it, we can easily add RakNet into Sim edition as well, however it's not recommended to use it for future projects.

Link to comment
×
×
  • Create New...