Development log: September 12, 2011

Huge speed-up of UnigineScript

We continue to improve support of multi-monitor configurations and stereo 3D: both technologies become more and more wide-used for gaming, not to mention industrial simulation and visualization.

UnigineScript:

  • Huge speed-up of the virtual machine.
  • Added inheritance from external classes.
  • Base constructor can be called in C++ syntax.
  • Added typeid() function for quick type checking.
  • Added step-by-step debugging mode ('n' command in the built-in debugger).

Here is the performance comparison chart for UnigineScript 2.46, Lua 5.1.4, Perl 5.10.1 and Python 2.6.6 (higher values stand for higher performance).

Scripting languages performance: UnigineScript, Lua, Perl, Python

All tests were performed on Intel Core2 Duo E6750 @ 2.66 GHz / Ubuntu Linux 10.10 (64-bit).

The following tests were made:

  • Array - simple math operations and array elements access
  • Branching - conditional branching
  • Loop - a loop with variable increment inside
  • Loops - six nested loops with 16 iterations per each loop, variable increment inside
  • Matrix - 128x128 matrices multiplication
  • Random - simple random number generator, a loop with a function call running 20,000,000 iterations
  • Sort - quick sort and buble sort algorithms (no external C functions, only pure bytecode)
  • Statistics - simple Gaussian random number generator and Gaussian distribution calculation
  • Vectors - simple math operations with 3D vectors and 4x4 matrices

According to these tests, UnigineScript has proven to be the fastest scripting language, especially optimized for 3D-specific tasks with its built-in support of 3D math. It is a mature object-oriented solution with zero learning time syntax (similar to C++/C#) featuring a rich function library available out-of-the box.

Render:

  • Fixed rendering artifacts on Mac OS X (10.7+ required).
  • New App3DSurround application for 3-monitor stereo rendering atop of NVIDIA 3D Vision Surround technology. (It is a completely native solution that gives full control over cameras configuration).
  • AppWall automatically detects the display configuration and creates a corresponding number of windows. (The default number can be overridden with console arguments).
  • Added a lot of automatically supported display configurations (1x1, 1x2, 2x1, 2x2, 3x1, 3x2, 4x1, 5x1) for AppWall into the wall.h script.
  • Fixed bug with incorrect vertical asymmetric projections distortion in DirectX.
  • Correct planar reflections with asymmetric frustum projections.
  • Correct near LOD fade distance for volume objects.
  • ObjectClutter and ObjectGrass prevent their mask from being unloaded (allows to avoid rendering stalls).
  • Fixed crashing on simultaneously changing both the video mode mode and render settings.
  • OpenGL ES render now supports Render::renderImage2D() and Render::renderImageCube() functions.
  • Stereo 3D settings are available by default when one of stereo defines (STEREO_SEPARATE, STEREO_ANAGLYPH, STEREO_3D_VISION, STEREO_3D_SURROUND, STEREO_IZ3D) is passed (stereo.h is included into the default system script).
  • Fixed texture coordinates problem with billboards in Direct3D10/11.
  • Added two viewport rendering samples: data/samples/render/image_00 and data/samples/render/viewport_00.
  • Added stereo viewport rendering functions into C++ API.

Other:

  • Added NavigationMesh object.
  • SSE2 is required by default now (use "scons simd=sse" to build without this requirement).
  • Support of additional control keys by Telnet server.
  • Once loaded, material/property libraries are not unloaded from the set of world libraries (huge loading speed-up for worlds with shared resources).
  • Multi-threaded culling of ObjectSurface.
  • Fixed cone sound errors (caused by incorrect OpenAL implementation) on iOS.
  • Added al_sound_skip_errors console variable to skip error messages from OpenAL library.
  • Improved detection of CPU cores.
  • Added support of icons for tab boxes in GUI.
  • Fixed calculation of PhysicalTrigger bounds.
  • ImageDDS can now utilize multiple CPUs running in parallel.
  • Updated "Stereo rendering" article, now it includes the information on 3D Surround mode customization.
  • Added "Multi-Monitor Rendering with AppWall" article.
  • Updated documentaion on sky object and its material.