Development log: November 11, 2011

Introducing Schemer and Skinner

Schemer (preview)

Schemer is a visual scripting system that allows creation of complex sequences of gameplay events without having to script them manually. This way the artists can add interactivity to the world without the help of a programmer. By connecting paths in a flow graph, it is possible to script cutscenes, switches, timers, changes in lighting and much more.

Unigine::Schemer

Schemer is written in UnigineScript, its files can be found under data/core/systems/schemer folder. At the moment it's in the alpha stage, which isn't recommended for production use.

Skinner (preview)

Skinner is a visual scripting system for animations. It allows blending different animations together to create complex movements of skinned characters. It also possible to include the physical ragdoll into played animation (for the whole the character or per bone).

Unigine::Skinner

The Skinner is based on Unigine::Schemer. Skinner scripts can be found under data/core/systems/skinner folder. The predefined Skinner blocks that are available by default are contained in the data/core/systems/skinner/blocks/skinner.blocks file.

Unigine::Skinner

Both Schemer and Skinner systems are parts of upcoming UnigineEditor 2.0, they can work with internal Unigine GUI and external one (Qt-based).

Scratch project

A Scratch project will help you get started with your own Unigine-based game in no time. Tweak and play all using the same application: change settings on-the-fly, see the coded behavior in effect or quit the Editor to go into in-game mode and test how your game feels like. No compilation is required: simply add your models, replace the GUI interface and run the launcher.

A Scratch project can be found in UnigineSDK/scratch folder, read more in the documentation. It is available only for Windows and Linux platforms.

Render:

  • Added AppEyeFinity application for enabling AMD Eyefinity technology (multi-monitor rendering with arbitrary projections for each monitor).
  • Added NVIDIA FXAA post-processing material (changed implementation of post_filter_antialiasing material).
  • Decals can set texture coordinates (so it's possible to use texture atlases for them).
  • Changed texture transformations for billboards: sx,sy,tx,ty instead of old x0,y0-x1,y1.
  • Increased terrain loading speed.
  • Fixed wrong number of emitted particles for "spark" emitters.
  • Fixed alpha-test issue on iOS 5.
  • Color-fading (can be used as a simple alpha-fading also) instead of decreasing particle count by distance.

Work in progress, upcoming Unigine-powered demo:

UnigineScript:

  • Support of script caching for faster load (cache file name is the second argument of world_load command, no caching by default).
  • Added "using" keyword for extending current scope to other namespaces.
  • Support of #if preprocessor instruction.
  • Added extern class member call by ID (useful for faster callbacks).
  • Added functions support to Expression.
  • Added new base functions: is_variable(), set_variable(), get_variable(), is_extern_class_function() and get_extern_class_function().
  • Removed Expression::runFunction() methods, use call(getFunction()) instead.
  • Added left() and right() methods for vectors.
  • Added new constructors for matrices: mat4(quat,vec3) and dmat4(quat,dvec3).
  • More verbose error messages for extern classes.
  • Adde npot() (nearest power of two) and udiv() (integer division with rounding up) functions.
  • Updated function library documentation.

GUI:

  • Fixed callback processing order on mobile platforms.
  • Refactored WidgetCanvas.
  • Added hide/show methods for virtual keyboard on mobile platforms.
  • Added RELEASED callback.
  • Wide mask for PRESSED callback of Button and Icon (includes 4 auxiliary buttons).
  • Fixed TabBox expanding.
  • Reduced texture fonts (non-TTF ones) to 128 characters (latin only).
  • Added ImageTTF tool for conversion of TTF font into a texture for FontTexture.
  • 32 bit TTF symbols for better support of Chineese.
  • Improved integration with Qt widgets.
  • Added a set of Unigine::Widget* classes, which can be switched between internal (Unigine widgets) and external (Qt-based) implementations (they can be found in data/core/systems/widgets folder).

Physics:

  • Added Exclusion masks for collision shapes and PhysicalTrigger.
  • Fixed inertia tensor calculation bug for small objects.
  • Fixed sliding of non-physical PlayerActor on slope surfaces.
  • Particles with "length" emitter are collided as capsules.

Other:

  • Added FileSystem C++ plugin: it can handle up to 16 external directories (they must be specified by multiple "-file_path PATH" CLI options; they are saved into the engine config after that).
  • Increased speed of XML parser.
  • Added support of iOS 5 (no more NEON support due to llvm restrictions).
  • Added vec3 and vec4 Property types.
  • Added functions for creation of buffers and files out of streams into C++ API.
  • Implemented correct yuv2rgb color space tranformation for video playback via Ogg Theora.
  • Command line parameters and engine config are now accessible via C++ API.
  • Fixed "HeapChunk"-related crashes.
  • Fixed bug with saving multi-surface ObjectMeshDynamic into a file.
  • Correct handling of ;/+-,. symbols on non-English keyboard layout.
  • New policy for Node ID: old IDs aren't changed, NodeReference contents get random IDs.
  • Fixed binding clutter objects to parent ones.
  • Updated documentation on custom GUI skin.
  • Updated documentation on particle systems.
  • Added "Tools / Performance Profiler" article.

PS: Here is a new pre-release gameplay video from Unigine-powered Oil Rush naval strategy game:

PPS: We have expanded to Europe, new Unigine office is opened in Prague, Czech Republic. Anton Ravin joins the company as the head of European branch after seven years at NVIDIA, welcome aboard!