Refactored render, improved vegetation system, increased data precision in scripts
Render:
- Completely new vegetation system: trunk bending, rotation of billboard leaves, spatial noise for randomized movement of vegetation.
- Added the motion blur postprocess (takes into the account both the camera velocity and velocities of physical bodies).
- Added indirect occlusion (SSDO) to simulate real-time global illumination.
- Complete shaders refactoring (all texture samplers were shifted).
- Unified LOD system for all objects, parameters are in surface settings (visible and fade distances are removed from objects).
- Smooth transition between LODs for all meshes, 3D GUI objects and billboards basing on the screen space noise. Leaves use fading based on the to alpha test scale.
- Improved stereo 3D model: parallel axis asymmetric frustum perspective projection instead of the old toe-in projection. Now there are only two stereo 3D parameters: depth and eyes distance.
- Added mesh_terrain_base base material for mesh-based terrains.
- Slice count in volumetric clouds became tweakable (ObjectSky).
- Transparent surfaces are sorted by the the distance from the oriented bounding box (OBB).
- Unified shadow rendering for all light types into a single pass.
- Improved tesselation DIP performance.
- Eliminated deferred buffer conflicts.
- Added dedicated depth buffer with 24 bit precision, dedicated diffuse color, normals and parallax offset buffers.
- Different sets of deferred buffers are used depending on the render settings.
- Added a super-simplified rendering of lights - pure deferred shading, when geometry is drawn only once. It is activated with 'render_deferred 2' console command and can be very useful for old hardware.
- Fixed a bug by WidgetSpriteRender rendering.
- Improved ObjectVolumeBox precision.
- Fixed PolygonOffset in auxiliary and refraction passes.
- DirectCompute is not used for postprocesses, beacuse it has proven to be useless.
- Added more render profiler counters (RT*); use 'render_profiler 1' console command to activate.
- Added support of of circle and circular sector rendering into the visualizator.
- WorldClutter can be randomized with a seed.
- Global scale parameter for all distance-related render parameters, including LODs (easy quality/performance tuning).
- Fixed sRGB on diffuse texture of terrain.
- Improved parrallax occlusion mapping quiality.
- All objects can be drawn into the auxiliary buffer.
- Changed blending mode of the auxiliary buffer: now it's lerp() according to its alpha value.
- Added a sky background cubemap into the ObjectSky.
- Added a shadow offset for billboard-based grass.
- Added two more parameters for DoF.
- Fixed Direct3D9 bug of rendering random additional geometry instead of a fullscreen polygon.
- Several minor Direct3D9 bugfixes.
- Added a fast antialiasing filter, use 'render_antialiasing 1' console command to enable.
- Removed post_filter_antialiasing material.
- volume_cloud_base supports a gradient image for volume rendering.
- Improved render streaming for objects with big number of surfaces.
UnigineScript:
- Added new data types with increased precision into UnigineScript: long, double, dvec3, dvec4 (see details below).
- Support of 'long long' data type in streams.
- Support of #pragma preprocessor instruction.
- Fixed wrong 'this' statement in UnigineScript class destructor.
- Added a frame counter: engine.game.getFrame().
- Fixed NULL pointer memory leak.
- Fixed bug with incorrect deletion of user classes.
- Added Unigine::Quadrulple container.
C++ API:
- Introduced C++ plugins to the engine, that allow to load a custom library dynamically in engine runtime (see Unigine::Plugin class in C++ API documentation). To enable a plugin, use engine.addPlugin(PLUGIN) or add '-extern_plugin PLUGIN' command line option, where PLUGIN is a name of the plugin library (without a postfix and extension).
- Added sample of C++ plugins usage: source/samples/Api/Plugin.
- A set of functions for easy access to C++ API pointers without complex type casting.
- C++ API pointers can be cleared by calling clear().
Tools:
- Added global parameters for hardware tessellation into UnigineEditor.
- Added global parameters for vegetation animation into UnigineEditor.
- Added Maya 2011 plugins.
- Added tooltips to all material parameters in UnigineEditor.
- Restored ImageView tool.
Documentation:
- Added terrain tutorial into the reference manual.
- Added "Programming / Memory Management" article.
- Updated UnigineScript library documentation.
- Added articles on terrain and terrain occluder objects into the "Principles of Operation / Objects" section.
Other:
- Support of OpenCL 1.1.
- Added dumping of linear velocity for ropes and cloth.
- Fixed signal handling in Linux.
- Access to bodies of the object or its parents via nodes.
- Fixed FontRich parser in GUI.
- Added support of font spacing in GUI.
- Changed the file format of terrains. Use utils/Upgrade/terrain.py script for upgrade.
- Non-physical PlayerActor supports friction.
- Added 'clear' console command.
- File searching in a separate thread (be aware that filesystem_reload is less safe now).
- Fixed HScroll and VScroll precision bug.
- Fixed crash by loading NodeReference without a node.
- Network system now works as a C++ plugin.
- Added support of Sixaxis gamepad (new script defines are available now: HAS_JOYSTICK, HAS_XPAD360 and HAS_SIXAXIS).
Notice on double-precision data types in scripts
Long data type has L/l postfix. Long and double data types don't consume additional memory in comparison with ordinary types, while dvec3 and dvec4 are quite heavy.
There are two useful preprocessor instructions: '#pragma no_long' and '#pragma no_double' is to treat all variables in old fashion (ints and floats); '#pragma warn_long' and '#pragma warn_double' is to block script compilation if there is a long or a double variable present.
Please be aware that if you leave your scripts unrevised, memory consumption will increase, while the performance will decrease!
There are also updated in-game screenshots in
OilRush
gallery (don't mind the UI, it's still work-in-progress):
Whew, that was a huge update indeed!