Development log: February 27, 2012

Render performance improvements; ObjectMeshClutter, ObjectMeshCluster

Render:

  • Added ObjectMeshCluster. Mesh Cluster is a highly optimized way to render a great number of identical meshes with the same material in the world. These meshes are baked and managed as one object, which substantially speeds up rendering.
  • Added ObjectMeshClutter. Mesh Clutter scatters identical meshes across the world or terrain and speeds up their rendering. Meshes can not only be scaled, but also randomly scaled and oriented (but not moved), if necessary. Mesh Clutter scatters objects procedurally, and renders them only around the camera. It allows to render even a large number of meshes while keeping performance high.
  • Added ObjectBillboards object suitable for fast rendering of groups of billboards (stars, clouds and so on).
  • Fixed WorldCluster save/restore system.
  • Improved GPU detection in Mac OS X.
  • Restored gamma value control in Linux.
  • Improved support of NVIDIA 3DVision.
  • Improved support of Intel HD 3000 GPU.
  • Fixed skinned mesh instancing in Direct3D10/11.
  • Added a new mesh_layer_base material. It allows for selective blending of two materials: it operates on two sets of textures that show through according to a mask.
  • Added a new mesh_triplanar_base material. It allows to texture meshes without using UV texture coordinates. Textures are simply projected onto a mesh along three axes.
  • Added an optional material option to animate grass when 'Clutter' shape is used for it.
  • Fixed non-square mipmaps compression issue.
  • Added 'auto' value for 'video_app' console variable (the engine sets the best of available APIs).
  • Fixed disappearing of shadows in stereo 3D mode.
  • Better detection of GLX_ARB_create_context extension support (improved MESA compatibility on Linux).
  • Added vertical and horizontal flip functions for Image.
  • Safer way to restore fullscreen video mode after focus change in Windows.
  • Fixed issue with non-attached deflector position for particle systems.
  • Added 'Angle fade' option for mesh_leaf_base material to hide polygons wich are currently perpendicular to the screen plane.
  • Adjustable number of generated cells for grass and clutter objects.
  • Improved fullscreen mode setting in Linux and Mac OS X.
  • Added 'Shadow radius' parameter to terrain, grass, cluster nodes. It controls the distance outside the view frustum used to render polygons to avoid disappearing shadows. It is 0 by default ('radius' parameter in WorldCluster is now gone, please set up this one instead).
  • More configurable render_composite material: you can render non-blurred objects by mask with DOF or motion blur enabled using the Auxiliary buffer.
  • Fixed rendering of two-sided objects into deferred buffer.
  • Removed render_use_specular console variable.
  • Added 'spherical' flag for sky (the sky is a full sphere mesh instead of a hemi-sphere, if enabled).
  • Improved light scattering when used together with a background cubemap.
  • Added render_use_shadow_kernel console variable (set it to 0 to improve shadow rendering performance).
  • Improved shadows quality on 'high' shaders profile.

Terrain:

  • Per-surface control of flatness threshold for terrain.
  • Changed format of terrain files (.ter); please use utils/Upgrade/terrain.usc script for conversion (USC interpreter is required, see below).
  • Removed tesselated terrain material.
  • Optional ambient lighting for terrain which allows to disable a world light pass and render terrain in a single ambient pass. No shadows can be cast on the terrain in this case, though.
  • Fixed triplanar shading for terrain.
  • Optimized terrain shading.

GUI:

  • Added a scroll bar in WidgetComboBox.
  • Reduced TTF atlas texture size.
  • Added IME support into the Interface plugin.
  • Reduced memory consumption by widgets to a small degree.
  • Added 'dynamic' flag for WidgetSprite images that are frequently updated in runtime.
  • Faster video playback.
  • Added 'changed' callback for paned containers and WidgetScrollBox.
  • Added setMouseEnable() function to control rendering of the mouse.

Physics:

  • Fixed continuous collision response.
  • Added CCD for PhysicalTrigger, BodyParticles, BodyCloth and BodyRope.

Sound:

  • Fixed seeking on WAV files.
  • Fixed bug in libvorbis library for Mac OS X.
  • Added 'auto' value for 'sound_app' console variable (the engine sets the best available API).
  • Correct playback of short streamed sounds.

UnigineScript:

  • Stack size is increased to 2048 elements.
  • Added '#pragma no_optimize' support.
  • Support of up to 6 arguments for console commands called from a script.

Other:

  • Fixed path to cache directory.
  • Updated Xcode project for iOS.
  • Added clipboard support in Mac OS X.
  • Added filesystem_mmap console variable (set to 0 to disable memory-mapped files).
  • Added file name modifiers system. Read the original idea.
  • Added a new NodeTrigger node type. It fires callbacks when enabled/disabled or moved, which is useful to control objects inside of WorldClutter and WorldCluster).
  • Added memory_save console command for dumping memory pools (useful for offline analysis).
  • Added 'compaction' flag for meshes that prevents a mesh copy from being stored in system memory (making no intersection or collision possible with it). This option is highly useful for PlayStation 3.

Tools:

  • Added toggling of channels in ImageView (R, G, B, A hotkeys).
  • Added one-way NodeReference collector into WorldCluster (very useful for final content optimization). See "Collector" tab in WorldCluster node.
  • File name for SoundSource is now displayed in UnigineEditor.
  • Added standalone UnigineScript interpreter (USC tool, see below).
  • Added AlphaMapper tool into ResourceEditor for baking high-quality alpha test textures based on high-poly mesh geometry.
  • Fixed mesh overlapping visualization in ResourceEditor.
  • Fixed MD5B mesh format import.
  • Improved terrain creation in UnigineEditor.
  • Support of the normal map import for terrain.
  • Added optional Y-axis texture flipping on terrain data import.
  • Added baking of objects into diffuse, normal or lightmap textures for terrain. See "Grabber" tab in ObjectTerrain node.
  • Tools/Interface tab in UnigineEditor is moved into Tools/Common.
  • Backup of a NodeRefence file is now stored in UnigineEditor when edited.
  • Added world profiler (shows node, body and joint count), 'show_profiler 3' console command.

Standalone UnigineScript interpreter (USC tool)

The stand-alone interpreter (called USC due to its script file extension) allows for making Unigine scripts into executable programs that are run directly from the environment or from the command-line. As the interpreter works independently, it offers an easy way for developers to extend the functionality and solve the specific or recurring tasks for which it is not necessary to create a separate executable application.

The tool supports the following:

  • Everything from the Core library of UnigineScript (can be used to read/write files, parse XML files, handle images, perform mathematical calculations, etc).
  • Meshes. Load and save a mesh, modify or clear all its data. You can add and set transformation to mesh surfaces, as well as change position, normal vectors and texture coordinates for separate vertices.
  • Skinned meshes. Just like in case with simple meshes, you can get access and modify surface and vertex data for skinned meshes. Data on bones of the rig is also exposed.
  • Support of multiple CLI arguments.

Source code of the stand-alone interpreter can be found under source/tools/Interpreter, it is included into ToolsPack.

Oil Rush

PS: Unigine-powered Oil Rush naval strategy game has been released for Windows, Linux and Mac OS X. Its sources are available for Unigine customers as a reference project.

Oil Rush