Development log: July 12, 2013

PhysicalNoise, Material for Tracks and Chains

PhysicalNoise Object

A new object - PhysicalNoise, based on the volumetric noise texture, allows to simulate a force field affecting particles and objects with spatial 3D noise.

A force field for the objects or the falling precipitations (rain, snow etc) is not static and isn't affected only by gravitation and wind direction. There is also a distribution flow, specifying the force and the displacement direction for the object at each point of the force field.

noise disablednoise enabled
Disabled Physical Force FieldEnabled Physical Force Field

It can be applied either to Particle objects or Physics bodies. To create PhysicalForce field for objects, use new PhysicalNoise node. As of particles, a new Noise visualizer in ObjectParticle node has been added to handle particles noises (a force, created with the PhysicalNoise node will affect particles as well).

Two samples on physical noise have been added:

  1. ParticleNoise: data/samples/objects/particles_13.
  2. PhysicalNoise: data/samples/physicals/noise_00.

Render

  • Ambient emission and post-processing glow option has been implemented to grass_base materials.
  • The first frame of a world splash screen will be rendered before the world script compilation to avoid a black screen pause.
  • A Detail option with the Overlay and Multiply rendering modes has been implemented to decal_base and decal_deferred_base materials.
  • Added Linearity parameter for AppProjection plugin, it allows to control non-linear image distribution over a screen.
  • ObjectTerrain coarse textures can now be edited in run-time.
  • Added new mesh_chain_base material (useful for caterpillar tractors and tanks). This material interpolates successive bone transformations and can be used for fast tracks rendering without CPU side transformation calculations.
  • Added three samples with new mesh_chain_base material: data/samples/materials/meshes/chain_*.

GUI

  • setMaxWidth/getMaxWidth() and setMaxHeight/getMaxHeight() functions allow to modify size parameters for the WidgetWindow.
  • Added per widget vertical and horizontal font offset parameters.
  • Added a wrapper for Widgets::SpinBox widget.

C++ API

  • Added access to checksum algorithms (CRC32, MD5) via the Unigine::Checksum interface.
  • Added an addFrame() function to Unigine::ObjectMeshSkinned class.
  • Added an addEmptySurface() function to Unigine::ObjectMesh/ObjectMeshSkinned/Mesh/MeshSkinned classes. This function allows to create an empty surface with the specified number of vertices and indices.
  • A setTransform() function for Unigine::Mesh/ObjectMesh classes has been renamed into the setSurfaceTransform().
  • A setTransform() function has been added to Unigine::MeshSkinned and Unigine::ObjectMeshSkinned classes.
  • quickSort functions have been added to C++ API.
  • Added a getFD() function to Unigine::Socket class. It allows to return a socket file descriptor.
  • New Unigine::Compress (for run-time zlib compression/decompression) and Unigine::Resource (for handling ASCII string-based .resource files for embedding into the binary) classes have been implemented.
  • Added access to engine plugins API.
  • Added access to the MeshSkinned object bones offset matrices.
  • Added access to raw Unigine::Image data.

UnigineScript

  • Added ivec3/ivec4 types for const int* casting.
  • If an expression is removed, the namespace will be cleared automatically, so there will be no more "NameSpace::NameSpace(): maximum namespace number is 65535" error. Therefore, the number of opcode mnemonics is also reduced owing to a correct expression removal.
  • A world.getIntersection() function is now available with three arguments. It returns the list of potentially intersected objects, which thereafter can be used to get more precise intersection.
  • Functions for easy XML data and arguments settings/getting have been implemented: Xml.setArg(), Xml.getArg(), Xml.setData() and Xml.getData().
  • Image pixels can be initialized from/to the Buffer.
  • Async class will produce errors if the arguments are of external classes.
  • Added ObjectMeshSkinned.setFrameBoneTransformEnabled() and ObjectMeshSkinned.setBufferBoneTransformEnabled() functions for a per-bone animation blending.

Tools

  • 3ds Max plugins save settings per-scene now.
  • ImageDDS tool now supports ETC1 and ETC2 texture compressions formats separately. ETC1 mode should be selected for current OpenGL ES 2.0 generation.
  • Migration to the new FBX SDK 2014.1 version.
  • FBX and COLLADA import plugins now support huge number of bones per vertex without problems.
  • Independent import of FBX animation files has been added.
  • Vertical orientation of the projection plugins border parameters has been fixed.
  • Landscape plugin can now generate normal maps based on height map data.
  • An error with wrong object body assignment has been fixed in UnigineEditor.

Mobile platforms

  • Improved iOS logging. All the messages are passed via NSLog function and can be read inside the XCode Organizer Console.
  • A crash with wrong vertex buffer object in GLESFfp rendering code has been fixed.

Documentation

  • Script Debugging article update: added information on per-function breakpoints.
  • Updated UnigineEditor interface article.
  • Added documentation on some engine plugins: Autodesk, Collada, OpenFlight, Interface.
  • Full update on the materials base.

Other

  • A PS3Ffp can now be used with perspective transformations.
  • A render manager bug has been fixed - it will never print error messages more than one time if the texture has been removed or renamed.
  • data/samples/shaders/lines_00 sample can now work under Direct3D9.
  • WebGL builds are almost production ready.