CIGI Support, Better Support for Geodata, Game Framework
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 byCogSim 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 ofWGS84, 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:
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.
- 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:
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.
The framework files are located indata/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.
- 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 tonoise_3d, parameter noise_scale tonoise_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 orRender 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 forObjectMeshCluster, 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).
Flattened particles can be used, for example, to simulate the waves caused by the helicopter rotors:
- Added deterministic physics mode:engine.physics.setStable(), disabled by default.
- New functions, setCollision() andgetCollision(), 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.
- New functions, setOffset() and getOffset() have been added to theWorldLayer, 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 theLayer, Switcher and Expression tabs of theWorldLayer, WorldSwitcher and WorldExpression objects correspondingly in UnigineEditor.
- New functions, setTargetTypes() andsetExcludeTypes(), 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.
- 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 andworld_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 theObjectGrass, 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.
- 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.
- 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.
- 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 to1.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 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.
In the Meantime...
P.S.: a lot of UNIGINE team members will be available in the booth #307 at I/ITSEC conference next week, contact us via email@example.com to make an appointment.