Development log: April 11, 2012

Introducing Unigine::Tracker

Valley demo preview

Render:

  • Added mesh_overlay_base material (useful for creating procedural rust or moss on objects).
  • Optimized assigning of materials to object surfaces.
  • Fixed video playback in 3D stereo mode under DX11.
  • Added 'MaxShadowSplit' option for surfaces to skip rendering of high-detail shadow splits from LightWorld. (It is useful for small objects like stones, etc.)
  • Fixed crash on render_manager_reload console command.
  • Environment cube map texture is not in SRGB format from now on.
  • Added the following modes for terrain detail materials: "skip" (not rendered), "overlay" (the old blended one) and "overlap" (without blending, the spread of such material can be additionally tweaked using "Value" and "Threshold" parameters). Overlap terrain material cannot be used together with triplanar mapping.
  • Additional noise transformation parameter for sky volume clouds.
  • Improved performance of dynamic vertex/index buffers on open-source drivers in Linux.
  • Support of vertical synchronization in Linux.
  • Renderer checks for EXT_texture_compression_s3tc extension availability on startup (a Mesa driver doesn't support it due to the legal issues).
  • A mask for ObjectGrass, ObjectMeshClutter and WorldClutter is now editable in real-time.
  • Fade color for fade post-process is now a normal color that is blended by the alpha component: zero alpha value means no fading, while the alpha value of one results in a solid-color screen.
  • Increased the default values for Shadow bias and Slope parameters for all light sources.
  • Added separate diffuse and specular color multipliers.
  • Improved OpenGL ES initialization on iOS.
  • Added support of iPad 3.
  • Added support of hardware shadow maps (cast from LightProj and LightWorld sources) on mobile platforms.
  • Added a wind direction vector common for all vegetation (grass and trees).
  • Implemented OpenGL ES support in Linux.
  • New way to generate procedural textures directly on the GPU. It allows for simulation of various visual effects; see new samples in data/samples/shaders: fire_00, water_00, bombing_00.
  • Added a separate emission_color multiplier.
  • Improved compatibility with a new NVIDIA OpenGL driver.
  • Added 1/4, 1/2 and full (relative to the screen height) reflection map sizes for reflective materials.
  • Added mesh_lut_base material with baked lighting (highly efficient for mobile devices).
  • Added post_filter_wet post-process materials (for the effect of water trickling down the surfaces).

Valley demo preview

UnigineScript:

  • Correct ExternClass variables casting on inter-script calls.
  • Added inter-script calls sample: systems/system_00.
  • Added more samples on WorldExpression usage: worlds/expression_02, worlds/expression_03.
  • Configurable splash screens in core/scripts/system.h.
  • "using" keyword searches for a given namespace through all nested namespaces up to the global one instead of searching only in the global scope.
  • The number of available namespaces is increased to 65536.
  • WorldExpression calls __constructor__() and __destructor__() functions on initialization and shutdown (it can be used for proper creation and deletion of created resources).
  • EPSILON and NULL definitions are removed from Unigine::Skinner blocks.
  • Widgets::Dialog is created in the external GUI, if it's available.
  • Improved interaction of Widgets::Line and Widgets::Track.
  • Added Widgets::Time class for time manipulation.
  • Added Widgets::DialogMaterial, DialogProperty, DialogNode dialogs.
  • Improved implementation of engine.world.isNode() and other similar functions: now they can receive both the object identifier and the object pointer.

GUI:

  • ObjectGui and ObjectGuiMesh take into the account asymmetric frustum when calculating mouse coordinates.
  • Default iFPS value for WidgetSpriteViewport and WidgetSpriteNode is changed to 0 (so it is updated at the rendering frame rate rather than a lowered one).
  • Fixed infinite update of WidgetSpriteViewport when the iFPS value is low.
  • Fixed issue with vertical flipping for WidgetSpriteMaterial widget.
  • Fixed gradient texture calculation algorithm for Flash movies.
  • Added Widget::set[get]MouseCursor() functions for correct switching of the cursor between multiple GUI interfaces.
  • Added Widget::getParentGui() function to access a parent GUI object.
  • Fixed crashing when the scroll space in WidgetComboBox was very small.
  • Fixed texture and text arrangement for WidgetTabBox, WidgetListBox and WidgetTreeBox.

C++ API:

  • Fixed crash on multiple Unigine::removeExtern*() invocations with the same argument.
  • Added ArrayMap::Iterator class to enumerate all elements.
  • Added Variable::getTypeInfo() function which describes variable content in details.

UnigineEditor:

  • Added Tracker system (see details below).
  • Added mask editor for ObjectGrass, ObjectMeshClutter and WorldClutter.
  • Added 'Create mask' button for ObjectGrass, ObjectMeshClutter and WorldClutter objects.
  • Added a random seed for WorldCluster generator.
  • Added custom terrain brushes.
  • Automatic compression of terrain coarse textures when the source textures are placed in the "uncompressed" folder.
  • Fixed issue with the terrain lightmap grabber.
  • Added PlayerPersecutor node (it is not movable until a target is assigned for it).
  • Removed "Activate" button in PlayerDummy node. To test the camera view, open Camera window and switch to the selected player.
  • Added basic LUT texture editor (Tools -> LUT) to generate textures with baked lighting.
  • Added new icons for different nodes.
  • Changed the default world settings.

Other:

  • Added new vegetation samples optimized for flight simulators (samples/materials/leaf_02).
  • Added a city rendering sample that shows how to use occluders for optimized rendering (samples/stress/occluder_03).
  • Node::set[get]Data is renamed into Node::set[get]Variable. Old "data" is a simple string (stored in world and save files) now.
  • Changed user data path for Mac OS X projects: home_path + "Library/Application Support/" + project_name.
  • ObjectGrass, ObjectParticles, ObjectMeshCluster, ObjectMeshClutter and WorldClutter can be stored inside NodeDummy and still intersect with the parent geometry on the generation stage.
  • Fixed wrong bounding space of NavigationMesh after the world is loaded.
  • Fixed pathfinding route issues inside of a NavigationMesh.
  • Added Maya 2012 plugins.
  • Migration to new Xcode and iOS 5.1.
  • All empty XML nodes are automatically removed from the world files.

Tracker

Tracker is a keyframe-based tool for creating sequences animated over time. It is used for adding dynamic gameplay elements or making in-game cinematic cutscenes. With Tracker you can:

  • Easily create key frames for all nodes in the world, as well as in-game cameras and render settings.
  • Set up day-night shift and weather conditions change.
  • Switch between the cameras, change field-of-view on the fly and play sounds for creating stunning cinematics.
  • Animate interactive objects in the game, for example, lights, doors and platforms.
  • Apply post-processing effects such as depth of field, HDR, motion blur and color filtering. All these effects can be fine-tuned for each camera view.
  • And much more.

Tracker

Moreover, Tracker interface supports for saving and loading of created tracks, custom loop ranges, key cloning and snapping, as well as playback speed control. After the node has been manipulated in the editor, creating a key is as easy as a single mouse click.

Read more in the documentation: UnigineScript / High-Level Scripts / Unigine::Tracker.

Valley demo preview

Valley is an interactive demo that demonstrates optimized rendering of terrain with landscapes varying from grassy vales to snowy mountains. It comes complete with various vegetation (trees, bushes, different plants, grass) and rocks on mountain sides.

The preview version also features weather animations created with Tracker system:

  • Day-night cycle with various weather conditions (cloudiness, wind, rain) is controlled in 'day_cycle_mixed' track. It combines all tracks listed below.
  • Positions of sun and moon on the horizon are set in 'sun_rotation' and 'moon_rotation' tracks.
  • Change of light conditions to create sunny and cloudy weather (animated light parameters, scattering, fog) are set in 'day_cycle_sunny' and 'day_cycle_cloudy' tracks.
  • Rain (rain particles across the screen, splashes on the ground, scattering for a downpour) is controlled in 'rain_control' track.
  • Wet surfaces post-process (render_filter_wet material) is controlled in 'rain_wet_surface_control' track.
  • Wind (the speed and direction of wind, trees sway animation) is set in 'wind_force_control' track.
  • Depth of field effect (focal distance change, different amount of blur) is controlled in 'dof_f2' and 'dof_f8' tracks.

Wet material

The preview is available for engine licensees only.

First-person shooter prototype

A Shooter project is a single-player first-person shooter that can be used to get your own prototype up and running extremely quickly. If features all aspects essential for this type of core mechanics, so you can focus on implementing and testing of custom features, as well as creating new game levels. A Shooter project can be found under data/prototypes/shooter folder.