Jump to content

Unigine SDK 2013-11-27: CIGI Support, Better Support for Geodata, Game Framework


photo

Recommended Posts

CIGI Protocol Support

Common Image Generator Interface (CIGI) protocol has been fully implemented into UNIGINE. This interface is a standard way for a host device to communicate with an image generator (IG) in the simulation industry, especially for professional flight simulators.

 

The implementation supports all common functionality of CIGI (versions 3.0, 3.1, 3.2, and 3.3) and can also work in both active (master) and passive (slave, if the host address is NULL) modes. In order to use CIGI, activate the corresponding engine plugin (CigiClient) and take a look at data/samples/plugins/cigi_client_00 sample.

 

Here is the 6-channel rescue helicopter simulator powered by UNIGINE, working via CIGI in 60 Hz mode (the Bell 206 cockpit is provided by CogSim Technologies):

 

 

This simulator will be installed in the UNIGINE booth #307 at I/ITSEC conference next week (Orlando, December 2-5).

 

Better Support for Geodata

Added support for conversion of WGS84, ECF and NED coordinate systems into Cartesian one. This enables easier usage of real-world GIS data (both vector and raster ones) in UNIGINE-powered projects.

 

To use the converter, include the following script: data/core/scripts/geodetic.h (see source/tools/Interpreter/scripts/core/geodetic.usc sample for more details). The getDelta() function calculates the offset between geodetec and Cartesian heights.

 

Here are some updated screenshots from our rescue helicopter simulator, that uses real geodata:

 

131126_w2x13_sm.jpg

 

131126_w2x33_sm.jpg

 

Introducing Game Framework

A game creation process becomes easier, as we have implemented a highly-customizable Game Framework. It covers three fundamental concepts of the game: Level, Entity, and Game.

Features:
  • Automatic link between Entity and Node.
  • Automatic link between Level and World.
  • Initialization of Entity parameters with Property file.
  • Object management for Entities.
  • Global Game context across all Levels.
  • Events handling system.
  • Scheduling of the periodic call of a function, with support for automatic time spreading over several frames.
  • Optimal updating of Entities.

Here is the execution sequence for the framework:

 

131126_framework_sequence_sm.jpg

 

There is a special UnigineEditor plugin for Game Framework, which can be helpful to:

  • Manage Game, Levels, Entities.
  • Attach Entities to Nodes and place them in the world (by simple drag&drop operation).
  • Build the inheritance hierarchy for Entities.
  • Generate Property files for Entities.
  • Quick launch of the Game.

131126_framework_editor_sm.jpg

 

The framework files are located in data/framework, there are several usage examples in data/framework/samples, and detailed documentation in the UnigineScript / High-Level Systems / Game Framework section of the reference manual.

 

Renderer
  • Increased FPS stability.
  • Two new options, a 2D noise and 3D noise (States tab in the editor), have been added to the mesh_leaf_base material, so you can use a 2D and 3D texture at the same time. As both of them are applied, we have two spatial noises to make leafs look much more realistic. Some manual renaming inside material files for all materials, which are inherited from mesh_leaf_base, is required, though: state noise to noise_3d, parameter noise_scale to noise_3d_scale, parameter noise_transform to noise_3d_transform
  • A new parameter, Occlusion mask, has been added to all of the materials (Common tab in the editor). If the parameter is disabled, the ambient occlusion effect would not be applied to the selected surface.
  • Added time budget control for creation of vertex buffers and textures per frame (engine.render.setBudget(), in seconds via UnigineScript or Render settings -> Common -> Render budget, FPS value via the UnigineEditor).
  • A new global console variable, render_use_stencil, has been added for single pass decals. It is needed in the case of intersecting of two or more decals to avoid the intensity increase in the area of intersection (this artifacts are present only in the light rendering passes).
  • Improved virtual camera offset for ObjectMeshCluster, ObjectMeshClutter and ObjectGrass objects.
  • Heights of clutters and grass are synchronized now.
  • Fixed crashes on rendering of non-Flash splash screens.
  • Particle systems receive environment light and can be lit by WorldLight in the ambient rendering pass.
  • Fixed rendering artifacts on iPhone 5S.
  • Added new multiple viewport sample: data/samples/render/viewport_03.
  • A new Length flattening parameter has been added to particles (Params -> Type -> Length in the ObjectParticles node settings). It flattens length particles in a range of 0-100% (before that, they always faced the camera).

131126_flattening_disabled_sm.jpg

Disabled Length Flattening

131126_flattening_enabled_sm.jpg

Enabled Length Flattening

 

Flattened particles can be used, for example, to simulate the waves caused by the helicopter rotors:

 

131126_w2x43_sm.jpg

 

Physics
  • Added deterministic physics mode: engine.physics.setStable(), disabled by default.
  • New functions, setCollision() and getCollision(), have been added to the ObjectMeshClutter object (Mesh -> Collision). If the function is set, the collision will occur only if geometry is completely generated and new geometry won't be generated by collision detection request; otherwise, the collision will occur in any case.
World
  • New functions, setOffset() and getOffset() have been added to the WorldLayer, WorldSwitcher and WorldExpression nodes. Setting this function shifts the center of the node to make world constructions more flexible. The Offset parameter can be found in the Layer, Switcher and Expression tabs of the WorldLayer, WorldSwitcher and WorldExpression objects correspondingly in UnigineEditor.
  • New functions, setTargetTypes() and setExcludeTypes(), have been added to the WorldTrigger class. You can set the nodes which will be affected by their type.
  • A NodePivot object has been updated, so now it can be edited correctly for double precision binaries.
Resource Management
  • Streaming of meshes has been added to the Filesystem along with the files and images. Meshes are prepared for intersection right after the loading without any performance stalls.
  • New console variables, world_manager_images_memory and world_manager_meshes_memory, setting the cache memory limits for world resources have been added to the World manager.
  • Render, World and Sound global managers have been updated, so they are thread-safe now.
  • Image and mesh masks of the ObjectGrass, ObjectMeshClutter and WorldClutter objects will never be preloaded during the flush() execution.
  • Creation or loading of the WorldLayer object can be controlled by the World Budget parameter.
UnigineScript
  • The interpreter restoreState() function has been updated, so the comparison operators would not be called for maps with UserClass based keys, as it is done for UserArray based keys.
  • A function, written as foo( ) (with a space), now has the correct signatures.
  • Enums can possess the value of previously specified enums: {ONE=OLD_ONE}; now.
  • A basic sleep() function is thread-safe now.
  • There is no engine crash if the stack is overflown.
  • Deletion of the Expression no longer cause crashes.
Tools
  • Landscape plugin can now initialize mesh based masks and layer nodes.
  • Fixed editing of multi-level object masks in UnigineEditor.
  • A new Mesh-to-Water script, translating a mesh into the WaterMesh object, has been added: source/tools/Interpreter/scripts/world/mesh_to_water.usc. A field mask can be set to water by the -f command line instruction.
  • A similar Mesh-to-Decal script has been added: source/tools/Interpreter/scripts/world/mesh_to_decal.usc.
  • Interface plugin creates rendering buffers under Direct3D9 and Direct3D11 only when this is required.
  • Visualization of the GPUMonitor plugin info can be controlled by show_gpu console variable.
Other
  • Memory allocation policy has been changed. The large allocation block memory has been reduced to 256 kB, so the system allocator will respond to all of the allocations bigger than this number. This reduced the memory fragmentation and optimized the memory usage. Used system allocator memory is now displayed in the performance profiler.
  • The vector allocation progression has been changed from 2.0 to 1.5, that slightly reduced memory consumption.
  • Debug plugins can now be used with release version of the engine and vice versa.
  • All of the C++ API samples are now compatible with the double precision binaries. All of the Makefiles have set debug=1 and double=0 command line instructions.
  • Material and property removing operations have been updated, so the engine no longer stops responding.
  • Editing of big size grass and clutter masks no longer causes a scene hang.
  • Field animation effect would not be multiplied by render animation settings.
  • All of the material expressions and WorldExpression nodes are now affected by external (e.g. from an engine plugin) #define directives.
  • A Windows logo key hook is now initialized only for full-screen applications.
  • Thread::getID() static function has been added into the C++ API. The function returns the unique cross-platform thread identifer, zero means the main working thread.
  • Added new sample of accessing .ung archives from the asset folder on Android: source/samples/Android/Archive.
  • Added detection for Apple iPad Air and iPad Mini 2.
Documentation
  • Documentation on Game Framework has been added.
  • Updated UnigineScript function library documentation.
  • Updated articles on Script Debugging and High-Level Scripts/Basic Utilities.
  • UnigineScript / Control Statements and Containers articles have been updated and restructured.
  • Added article on the base Interface class.
  • Documentation on the MeshImport tool has been added.
  • Upgrade Script article has been updated.
  • Console article has been updated.
  • Added documentation on C++ internals of the engine (available for full source licensees only) with a lot of class collaboration diagrams.

131126-class_collaboration_graph_sm.png

 

P.S.: a lot of UNIGINE team members will be available in the booth #307 at I/ITSEC conference next week, contact us via info@unigine.com to make an appointment. Technical support will be a bit slower this week, but we'll do our best to help you even during the expo.

 

Download links

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

 

IMPORTANT NOTE:

 

Now UNIGINE SDK comes in different packages:

  • Sim - double precision of coordinates (supports larger worlds, a bit slower), includes simulation-related plugins
  • Game - float precision of coordinates (standard one)

Both Sim and Game packages are available to old customers, it's up to you which SDK version to use.

  • Like 1
Link to comment

Thanks, this is a huge step forward to the simulation world.

 

But why not merge the game version and sim version source into one package? and I think for a source license customer, it won't have any problems building the right version of engine they needed.

 

 

and another wish, Hope we can get the helicopter scene, or a small part of that scene.

 

Again, thanks for this big update :)

Link to comment

another thing I noticed. the release version can also have the extern_info, this means under release version, we can have all the extern info. so I just tried to modify the SConscript and Interpreter.cpp/Machine.cpp to have the release version also have the script debug feature, and I found in this way, under release version of engine, the debug script function don't have much performance drop.

 

So, does this means in perhaps in some future version of engine, we can have the long anticipated visual debug of script feature?

 

And with some additional gui framework like wxwidgets when we can finally have a IDE of uniginescript?

 

LOL~~~ :lol:

Link to comment

 game framework is very cool!!

 If the Fields tab can have more parameters, 

[set_file: Tracker File]
void setTrackerFile(string tracker_file) {
    tracker_file_name = tracker_file;
}

[set_node : Target Node]
void setTargetNode(Node node) {
    target_node = node;
}

It would be better.

:)

Link to comment
  • 2 weeks later...

is there still a way to use appWall and appProjection with unigine_Game package ?

 

No, it isn't.

 

or to use standard precision with Sim?

 

Yes, it is. Full source customers need to recompile the engine with build.py --precision=float

We'll add float precision binaries on the next Sim SDK update.

Link to comment

full source license customer means who have all platform for win/linux/mac/ios/android/ps3?

 

because we only have pc platform license, so after this change, in order to use raknet with appwall plugin on both windows/mac platform, I have to download 4 packages, each of them have 1.3G, that will need total download of 5G files in order to get the source files to build our customized engine.

 

I think maybe you can strip the binaries from source package and also the whole data directory from source packages. and I really don't think any source customers will directly use the binaries from the source zip packages.

 

This will save a lot of download data for us. for example, the difference for  win/linux and mac source package are only few .mm source under mac, in order to get these few source files, I have to download another 1.3G files.

Link to comment

What we can do:

- add optional float precision builds into Sim SDK

- move heavy content (Heaven, Valley) into separate packages - they are anyway the same for all editions

- add RakNet back to Sim SDK

 

The idea behind Sim/Game separation is that use cases for these industries are different, so there should be different product packaging, features, content and even pricing model for new customers.

Link to comment

The idea behind Sim/Game separation is that use cases for these industries are different, so there should be different product packaging, features, content and even pricing model for new customers.

 

I am not that sure, that difference between sim and gaming is that big. Lots of "sim" features can be used in gaming and vice versa. Use case for each game/sim is also very different and such separation can cause more troubles than benefits. For example I have licenced one package and I need features from second...

Link to comment

I am not that sure, that difference between sim and gaming is that big. Lots of "sim" features can be used in gaming and vice versa. Use case for each game/sim is also very different and such separation can cause more troubles than benefits. For example I have licenced one package and I need features from second...

agree with that! - rather just make different pricing model for big industry customers! :D

Link to comment

at very least you can move the data/demos into a seperate package, after all, all things under this are exact same on each version of engine. and we might not need this every time.

 

and these data are very big, 950M zipped and 1.3G extracted.

 

and another thing to source customer, the sim/game version will have no difference to our source customer, because I believe every source customer will have their customization to engine. so there is no need to include the binaries into source package.

Link to comment

I would agree in general with the above comments - The way the engine is being packaged right now is a real pain and appears to have little reason behind it. Why wouldn't you package all features in a single core package and control build access to them via basic auth and accounts? Right now it just complicates the time it takes to get started with this engine.

Link to comment
  • 4 weeks later...
  • 3 months later...

I am a new hand to Unigine, the 6-channel rescue helicopter simulator is very cool.I have downloaded the sample,I am  interested in the sync of multi-computers in CIGI,I want let the sample work,after I changed the IP of computers ,I lanch it by "washington_cigi_master.bat"and"washington_cigi_slave.bat".but it did not work,What should I do??Thanks. :)

  • Like 1
Link to comment
×
×
  • Create New...