<?xml version="1.0"?>
<rss xmlns:rss="http://purl.org/rss/1.0/" version="2.0"><channel><title>Unigine development log</title><link>http://unigine.com/</link><description>Unigine is an engine of virtual worlds</description><language>en-us</language><copyright>Copyright 2005-2008 Unigine Corp.</copyright><webMaster>webmaster@unigine.com</webMaster><item><title>Bugs depopulation</title><link>http://unigine.com/devlog/65/</link><author>binstream@unigine.com</author><pubDate>2009-06-24</pubDate><description><![CDATA[
<p>
Recent changes:
<ul>
	<li>Fixed crashes on OpenGL / NVIDIA.</li>
	<li>Fixed wrong collisions of a mesh with a convex hull.</li>
	<li>Fixed higlighting of sliders in GUI.</li>
	<li>No more stalls during grass generation.</li>
	<li>Clusters speedup.</li>
	<li>Optional warm start for particle systems.</li>
	<li>Multi-threaded update of world nodes.</li>
	<li>Reduced memory consumption by meshes (32 bytes for static mesh vertex, 48 bytes for skinned mesh one).</li>
	<li>Two-pass preprocessing of scripts for full collection of data on classes and prototypes.</li>
	<li>Added a new sample of selecting objects by mouse (data/samples/systems/selection_00).</li>
	<li>Added experimental Cg shaders for NVIDIA GPUs, that translate GLSL code into NVIDIA OpenGL assembler instructions (this approach provides 5-10% performance boost in OpenGL in comparison with high-level GLSL code).</li>
	<li>Added OpenCL wrapper.</li>
	<li>Saving of unique IDs of nodes into world/node files.</li>
	<li>Correct work of isVisible flag in nodes, besides that the list of visible nodes of a world is accessible now (engine.world.getVisibleNode(index)).</li>
	<li>Fixed a heap of minor bugs.</li>
</ul>
</p>
<p>
Also we have two more people in the team: Nadezhda Ovchinnikova (technical writer) and Kuat Eshengazin (lead QA engineer).
</p>
<p>
PS: No pictures today, sorry.
</p>

		]]></description></item><item><title>World layers, editing of node references</title><link>http://unigine.com/devlog/64/</link><author>binstream@unigine.com</author><pubDate>2009-06-15</pubDate><description><![CDATA[
<p>
What's new:
<ul>
	<li>World layers support via new NodeLayer: they are stored in separate files, which is more convenient way for collaborative work on a project.</li>
	<li>In-place editing of NodeReference from the editor.</li>
	<li>Reduced memory consumption by NormalMapper and AmbientMapper.</li>
	<li>Fixed WorldCluster crashes.</li>
	<li>Fixed wrong texture coordinates in volumetric clouds.</li>
	<li>New flag for ImageDDS: -a allows to downsample a large source image into smaller one with preserving alpha-testing accuracy (don't use this for alpha-blending).</li>
	<li>Fixed buffer overflow in dynamic meshes.</li>
	<li>Correct playback of skinned mesh animation with negative speed.</li>
	<li>Optimized performance of sectors and portals.</li>
	<li>Added engine.editor.releaseNode() function, which removes a node from the editor list, but doesn't delete it.</li>
	<li>Aspect ratio for grass instead of separate width/height settings.</li>
	<li>Material of multi-layer paint (mesh_paint_base).</li>
	<li>Fixed editing of shapes and joints in UnigineEditor.</li>
	<li>Adjustable shadow offset for billboard leaves.</li>
</ul>
</p>
<p>
Here you can see the difference in alpha-testing with enhanced downsampling via ImageDDS:
<br/>
<a href="http://unigine.com/devlog/090615-alpha_test.png"><img src="http://unigine.com/devlog/090615-alpha_test_sm.png" alt="Different alpha downsampling" border="" width="512" height="187"/></a>
</p>
<p>
Multi-layer paint material is good for car paint:
<br/>
<a href="http://unigine.com/devlog/090615-paint2.jpg"><img src="http://unigine.com/devlog/090615-paint2_sm.jpg" alt="A car with new paint material" border="" width="512" height="348"/></a>
<br/>
<a href="http://unigine.com/devlog/090615-paint3.jpg"><img src="http://unigine.com/devlog/090615-paint3_sm.jpg" alt="A car with new paint material" border="" width="512" height="384"/></a>
<br/>
<a href="http://unigine.com/devlog/090615-paint.jpg"><img src="http://unigine.com/devlog/090615-paint_sm.jpg" alt="A car with new paint material" border="" width="512" height="320"/></a>
<br/>
<a href="http://unigine.com/devlog/090615-barracuda.jpg"><img src="http://unigine.com/devlog/090615-barracuda_sm.jpg" alt="A car with new paint material" border="" width="512" height="384"/></a>
</p>

<p>
Some additional landscape improvements in our game in development (grass everywhere, massive tree arrays):
<br/>
<a href="http://unigine.com/devlog/090615-grass.jpg"><img src="http://unigine.com/devlog/090615-grass_sm.jpg" alt="Grass is everywhere" border="" width="512" height="384"/></a>
<br/>
<a href="http://unigine.com/devlog/090615-landscape.jpg"><img src="http://unigine.com/devlog/090615-landscape_sm.jpg" alt="Forest full of trees" border="" width="512" height="384"/></a>

</p>

<p>
PS: We are also to announce the next major step forward, which we made recently, so stay tuned.
</p>
		]]></description></item><item><title>Performance profiler for scripts, improved grass</title><link>http://unigine.com/devlog/63/</link><author>binstream@unigine.com</author><pubDate>2009-05-26</pubDate><description><![CDATA[
<p>
What's new:
<ul>
	<li>Performance analyzer for UnigineScript (in GProf style).</li>
	<li>Refactored grass (significantly improved performance, support of different shapes, more adjustable parameters).</li>
	<li>Improved render precision for distant areas.</li>
	<li>Postprocesses don't affect wireframe visualization now.</li>
	<li>Performance optimization of LightWorld.</li>
	<li>Recursive preprocessing of namespaces in UnigineScript, no more forward declarations.</li>
	<li>Warnings on wrong arguments for functions with arbitrary number of arguments in UnigineScript.</li>
	<li>Added billboard flag in ObjectGui.</li>
	<li>Support of OGA and OGV file extensions for audio and video files in OGG format.</li>
</ul>
</p>
<p>
To see the performance analyzer output, type "world_analyze" (world script) or "system_analyze" (system script) or "editor_analyze" (editor script) in the console:
<br/>
<a href="http://unigine.com/devlog/090526-world_analyze.jpg"><img src="http://unigine.com/devlog/090526-world_analyze_sm.jpg" alt="world_analyze output" border="" width="512" height="384"/></a>
<br/>
If you want to dump this output into a file, pass its name as an argument: "world_analyze logfile".
The perfomance analyzer works only with debug builds.
The following counters are available:
<ul>
<li>total seconds (this is the total number of seconds the interpreter spent executing this function)</li>
<li>self seconds (this is the number of seconds accounted for by this function alone, without internal calls of other functions)</li>
<li>calls (this is the total number of times the function was called)</li>
<li>total ms/call (this represents the average number of milliseconds spent in this function and its descendants per call)</li>
<li>self ms/call (this represents the average number of milliseconds spent in this function per call)</li>
</ul>
Output is sorted by "self seconds" field.
</p>
<p>
Updated grass can be seen in "Forest" demo, which is included into the Unigine SDK:
<br/>
<a href="http://unigine.com/devlog/090526-forest0.jpg"><img src="http://unigine.com/devlog/090526-forest0_sm.jpg" alt="Forest demo" border="" width="512" height="384"/></a>
<br/>
<a href="http://unigine.com/devlog/090526-forest1.jpg"><img src="http://unigine.com/devlog/090526-forest1_sm.jpg" alt="Forest demo" border="" width="512" height="384"/></a>
<br/>
<a href="http://unigine.com/devlog/090526-forest2.jpg"><img src="http://unigine.com/devlog/090526-forest2_sm.jpg" alt="Forest demo" border="" width="512" height="384"/></a>
</p>
<p>
PS: There is also a component-based game framework almost ready, it will be soon delivered to our customers.
</p>
<p>
PPS: We have updated our public demos, Tropics 1.2 and Sanctuary 2.2 can be <a href="http://unigine.com/download/">downloaded from our website</a>.
</p>
<p>
PPPS: <a href="http://unigine.com/company/vacancies/">We are hiring talented people in Tomsk, Russia</a>.
</p>
		]]></description></item><item><title>Introducing LightProb and support of massive object arrays</title><link>http://unigine.com/devlog/62/</link><author>binstream@unigine.com</author><pubDate>2009-05-13</pubDate><description><![CDATA[
<p>
Recent changes:
<ul>
	<li>New type of lights: LightProb, which is suitable for simulation of global illumination for dynamic objects.</li>
	<li>Access to command line arguments from UnigineScript.</li>
	<li>Rendering of screenshots into HDR images.</li>
	<li>Fixed ObjectVolumeBox rasterization.</li>
	<li>Fixed ObjectMeshDynamic crashes.</li>
	<li>Spatial subdivision optimization.</li>
	<li>Faster world loading.</li>
	<li>Range of material priority has been extended to [-8;8].</li>
	<li>Easy registration of 3rd-party C++ functions as script class members via C++ API.</li>
	<li>Unique IDs for nodes, bodies, shapes and joints (repetitiveness is guaranteed for the same world on different machines).</li>
	<li>Eliminated position lag between world and visualizer.</li>
	<li>Dedicated spatial tree for clutter objects ("clutter" flag in nodes).</li>
	<li>Reduced memory consumption on scenes with large amount of objects.</li>
	<li>Additional impostor configuration parameters.</li>
	<li>WorldTransformExpression gained access to a parent node.</li>
	<li>Two-argument version of check() method for containers.</li>
	<li>Performance boost of UnigineScript with external classes.</li>
	<li>Added WorldCluster object.</li>
	<li>Added accumulation of profiler counters' values.</li>
	<li>Support of anti-aliasing in image grabber.</li>
	<li>NodeRef renamed into NodeReference (use scripts/Upgrade/upgrade.py to upgrade your data).</li>
	<li>New NodeDummy type of nodes for grouping (ObjectDummy is to be used for physical purposes now).</li>
	<li>Support of new postfixes by imagedds.py: dr, sr, nr, hr, ar, lr (raw textures).</li>
	<li>Specular reflection is modulated by Fresnel effect on all meshes.</li>
	<li>Transition to ATI1 format for all single-component textures (ambient and height maps require regeneration by means of imagedds).</li>
	<li>Enter/leave callbacks for WorldTriggers can be set via UnigineEditor now.</li>
	<li>NodeReferences store references to all required material and properties libraries.</li>
	<li>Support of public/private access level modifiers in UnigineScript's classes.</li>
	<li>Automatic inline of getSomething() functions in UnigineScript.</li>
	<li>Support of &lt;&lt; and &gt;&gt; bitwise operators in UnigineScript.</li>
	<li>Two-pass compilation of scripts, function and class prototypes aren't required now.</li>
	<li>Support of additional text for WidgetIcon.</li>
	<li>Switch and toggle types of parameters in properties.</li>
	<li>Support of multiple materials per shape in Maya plugins.</li>
	<li>Correct rendering of visualizer with HDR and other postprocesses.</li>
	<li>Group set of parameters for nodes in UnigineEditor.</li>
	<li>Group rename of nodes by a mask ("%d" and "%1d" formats are supported).</li>
	<li>Camera moved out of high-level Character system.</li>
	<li>Externs package has been integrated into the SDK.</li>
	<li>Fixed corruption of %PATH% on MS Vista in the installer.</li>
	<li>Updated reference manual.</li>
</ul>
</p>
<p>
Some notes regarding LightProb: it's a special type of light source, which is based on baked spherical harmonics.
They are intended to be used in large groups, providing some kind of global illumination.
LightProb can have ellipsoid shape.
Due to compact format (9 vec3 values per light) it's possible to bake series of presets for a light and interpolate between them, simulating dynamic change of environmental lighting.
Objects are rendered without instancing in LightProb rendering pass.
</p>
<p>
Here is an example of different types of lighting baked into LightProb:
<br/>
<a href="http://unigine.com/devlog/090513-phong.jpg"><img src="http://unigine.com/devlog/090513-phong_sm.jpg" alt="Phong" border="" width="512" height="384"/></a>
<br/>
<a href="http://unigine.com/devlog/090513-indirect.jpg"><img src="http://unigine.com/devlog/090513-indirect_sm.jpg" alt="Indirect" border="" width="512" height="384"/></a>
<br/>
<a href="http://unigine.com/devlog/090513-phong+indirect.jpg"><img src="http://unigine.com/devlog/090513-phong+indirect_sm.jpg" alt="Phong + indirect" border="" width="512" height="384"/></a>
</p>
<p>
WorldCluster is a smart container for a baked heap of NodeReferences.
Only visible NodeReferences from a WorldCluster are added to the world, so it's really fast.
To group some NodeReferences into a WorldCluster, you have to make it their parent in node hierarchy and press "create" button in the editor.
See new "Forest" demo as an example.
</p>
<p>
Due to severe changes in structure of the SDK, please uninstall previous version before switching to the current one.
Don't forget to run new version of upgrade.py also to upgrade your data (see documentation for more details).
</p>
		]]></description></item><item><title>Screenshots from our forthcoming game</title><link>http://unigine.com/devlog/61/</link><author>binstream@unigine.com</author><pubDate>2009-04-23</pubDate><description><![CDATA[
<p>
Unigine is also a heart of another game, which has been developing in our studio for 3 years.
We are still making some experiments with the gameplay, so it's hard to name genre of the project yet.
However, we can say for sure that the project will have eye-candy graphics.
Game world isn't very huge because we have limited resources of our content team, but it's large enough to prove that Unigine is capable to handle detailed worlds.
</p>
<p>
Eating our own dog food is a good idea, because we understand needs of our clients better by doing this.
The game is a great sandbox for the engine and tools, a lot of performance and scalability issues have been solved during the development.
</p>

<p>
The world has 64 km<sup>2</sup> (8x8 km) terrain (it lacks plants at the moment, we are working on that):
<br/>
<a href="http://unigine.com/devlog/090423-terrain.jpg"><img src="http://unigine.com/devlog/090423-terrain_sm.jpg" alt="Terrain" border="" width="512" height="288"/></a>
<br/>
Atrium in the city:
<br/>
<a href="http://unigine.com/devlog/090423-atrium.jpg"><img src="http://unigine.com/devlog/090423-atrium_sm.jpg" alt="Atrium" border="" width="512" height="393"/></a>
<br/>
Fountain in the courtyard:
<br/>
<a href="http://unigine.com/devlog/090423-fountain.jpg"><img src="http://unigine.com/devlog/090423-fountain_sm.jpg" alt="Fountain" border="" width="512" height="393"/></a>
<br/>
One of the characters:
<br/>
<a href="http://unigine.com/devlog/090423-agent.jpg"><img src="http://unigine.com/devlog/090423-agent_sm.jpg" alt="Agent" border="" width="512" height="288"/></a>

<br/>
Tuning physics of a car:
<br/>
<a href="http://unigine.com/devlog/090423-physics.jpg"><img src="http://unigine.com/devlog/090423-physics_sm.jpg" alt="Physics tuning" border="" width="512" height="384"/></a>
<br/>
The same car wheeling through parking:
<br/>
<a href="http://unigine.com/devlog/090423-parking.jpg"><img src="http://unigine.com/devlog/090423-parking_sm.jpg" alt="Parking" border="" width="512" height="335"/></a>
<br/>
Nice hallway with sculptures:
<br/>
<a href="http://unigine.com/devlog/090423-hallway.jpg"><img src="http://unigine.com/devlog/090423-hallway_sm.jpg" alt="Hallway" border="" width="512" height="386"/></a>
</p>
<p>
All of the scenes from this screenshots run smoothly on ATI HD4850 / NVIDIA 8800GT, however we are still working on optimizations, so hardware requirements will be lower.
</p>
<p>
This is an independent project of our company developing without a publisher.
It seems that it would be the right time to make official announce of the project in May.
Release is planned for this year.
</p>
<p>
PS: We plan to provide access to working materials of the game for our clients in 2 weeks.
</p>

		]]></description></item><item><title>Players refactoring, render speedup</title><link>http://unigine.com/devlog/60/</link><author>binstream@unigine.com</author><pubDate>2009-04-15</pubDate><description><![CDATA[
<p>
Recent changes:
<ul>
	<li>Various render performance optimizations.</li>
	<li>Improved rasterizing occluders.</li>
	<li>Decals from particles.</li>
	<li>ObjectMeshDynamic can be created from a mesh file.</li>
	<li>New type of occluders: WorldOccluderMesh, which can have arbitrary geometry.</li>
	<li>Added WorldTransform, WorldTransformBone and WorldTransformExpression node types for transformation of nodes by a spline, an animation and an expression.</li>
	<li>Added set of functions for easy manipulations with node transformations.</li>
	<li>Binary format of spline files.</li>
	<li>Callbacks for physics, triggers and GUI are moved to the appropriate classes.</li>
	<li>Inheritance of parent object's animation in skinned meshes (useful for attaching clothes to a character body).</li>
	<li>Added field for arbitrary user data in each node.</li>
	<li>Added reflection masks for lights.</li>
	<li>Updated spline exporter for 3dsMax.</li>
	<li>System profiler now accumulates values from counters with the same name.</li>
	<li>Optimization of shadow rendering for LightWorld.</li>
	<li>Fixed screenshot grabbing under Direct3D9.</li>
	<li>Heavily refactored players, now they are full-featured world nodes.</li>
	<li>NodeRef caching on load, it leads to faster world loading.</li>
	<li>Additional sorting of equidistant from the camera transparent surfaces by blend function.</li>
	<li>Improved camera for high-level Character system.</li>
	<li>New high-level controls system in UnigineScript (see data/scripts/input).</li>
	<li>Updated reference manual, added "Programming / High-Level Scripts / Character System" article.</li>
</ul>
</p>
<p>
Here is an animation tree scheme for new character sample, which is included in the SDK:
<br/>
<a href="http://unigine.com/devlog/090416-animation_tree.png"><img src="http://unigine.com/devlog/090416-animation_tree_sm.png" alt="Animation tree example" border="" width="512" height="559"/></a>
</p>
<p>
PS: We have updated <a href="http://unigine.com/products/unigine/roadmap-2009/">Unigine development roadmap for this year</a>, now you can see status of scheduled features.
</p>
		]]></description></item><item><title>Cell support, animation tree</title><link>http://unigine.com/devlog/59/</link><author>binstream@unigine.com</author><pubDate>2009-04-01</pubDate><description><![CDATA[
<p>
What's new:
<ul>
	<li>Support of Linux on PlayStation 3 (with null render).</li>
	<li>New SPUShader class for work with SPU-based programs (works via libspe2 in Linux).</li>
	<li>Added Altivec optimizations for PowerPC CPUs.</li>
	<li>Full support of little and big endian platforms.</li>
	<li>CUDA framework.</li>
	<li>Added compact profiler mode ("show_profiler 1" console command, full view is "show_profiler 2").</li>
	<li>World spatial subdivision optimizations.</li>
	<li>Mesh intersection speedup.</li>
	<li>Fixed engine crashes, which were caused by memory corruption.</li>
	<li>Added set()/get() functions for indexed access to all containers in UnigineScript.</li>
	<li>Billboard-based material for foliage (an option of mesh_leaf_base material).</li>
	<li>Plugins for Maya 2008 (9.0).</li>
	<li>Fixed texture path issue in UnigineExport script for 3dsMax.</li>
	<li>Fixed plugins for 3dsMax (mesh export with applied modifier).</li>
	<li>Simple framework for software rendering.</li>
	<li>Updated shadow biases for all supported hardware.</li>
	<li>Mesh-based water use UV coordinates for waves (keep it in mind for old content).</li>
	<li>UnigineScript: call() and thread() functions can accept an array as second argument.</li>
	<li>Changed format of decals storing (run upgrade.py script to upgrade data, see more in the documentation).</li>
	<li>Improved high-level character system with full-featured animation tree (see "character" demo in the SDK).</li>
	<li>New detailed tutorial in documentation: Content Creation -&gt; How to... -&gt; Setup Sky and Water.</li>
</ul>
</p>
<p>
Unigine seems to be running fine on PS3 in home-brew mode (with Linux), however there is no access to GPU, so it supports only null render or simple software render for physics debug.
Due to well-designed Unigine's framework the porting to this point was quite easy.
</p>
<p>
This is a screenshot from new "character" demo:<br/>
<img src="http://unigine.com/devlog/090401-character.jpg" alt="Character" border="" width="512" height="409"/>
</p>
<p>
Since March, 13 a new great book of ShaderX series is available: <a href="http://shaderx7.com/">"ShaderX7: Advanced Rendering Techniques"</a>, edited by Wolfgang Engel.
<a href="http://shaderx7.com/TOC.html">Section 4 (Shadows) of the book contains</a> an article "Practical Cascaded Shadow Maps" by Fan Zhang, Alexander Zaprjagaev (CTO of Unigine Corp.), Allan Bentham. The described shadowing technique is used in the Unigine engine, providing fine shadows with arbitrary scene geometry.
<br/>
<img src="http://unigine.com/devlog/090401-shaderx7.jpg" alt="Frustum with ShaderX7" border="" width="512" height="369"/>
</p>
<p>
PS: Networking module is slightly delayed due to some unsolved issues with physics synchronization.
</p>
<p>
PPS: There is also a non-official <a href="http://unigine.blogspot.com/">Unigine crew</a> blog started recently, where you can find some more info about our social life.
</p>

		]]></description></item><item><title>Animation buffers, new memory manager</title><link>http://unigine.com/devlog/58/</link><author>binstream@unigine.com</author><pubDate>2009-03-05</pubDate><description><![CDATA[
<p>
Recent changes:
<ul>
	<li>New memory allocator, which can show memory fragmentation.</li>
	<li>New memory_dump console command for displaying memory fragmentation (numbers means allocations count in some point, 'x' means more than 16 allocations).</li>
	<li>New garbage collector (ref-counter based) which eliminates stalls (old one was called only each 32nd frame).</li>
	<li>Fixed bug in animation export plugins, which occured with large number of weights per point.</li>
	<li>New global "light distance" parameter in render settings.</li>
	<li>Added support of Object and ObjectMeshDynamic into C++ API (see API examples).</li>
	<li>GL_vertex_array_object extension is required now, please update your video drivers.</li>
	<li>Support of binary XML files for release version (they loads faster, consumes less memory and causes less fragmentation).</li>
	<li>New "xmltree" tool for compilation/decompilation XML files into/from binary format.</li>
	<li>Fixed Fresnel refraction on NV40 / OpenGL.</li>
	<li>Fixed streaming-related crashes under OpenGL.</li>
	<li>New global "light distance" parameter in render settings.</li>
	<li>"render_manager_reload mesh" reloads only meshes, "render_manager_reload texture" reloads all textures.</li>
	<li>Support of inplace array creation inside foreach structure of UnigineScript: foreach(int i; (0,1,2,3)).</li>
	<li>Added system of animation buffers.</li>
	<li>Correct font wrapping for RichText.</li>
	<li>Force set of WidgetGridBox proportion, columns are of fixed size.</li>
	<li>Added sample of integration <a href="http://www.jenkinssoftware.com/">RakNet</a> (a high-level networking library) into Unigine (see source/samples/Network/RakNet), which is still in the development.</li>
</ul>
</p>
<p>
New allocation policy: by default there are two memory pools (128Mb each), one of them is used for allocations less than 32Kb, another one is for the rest (so by default the engine requires 300+Mb).
If these pools are already full, the engine allocates additional 128Mb pool.
Plus there are fixed allocators for 2<sup>n</sup> memory pieces, up to 128Kb.
Memory manager also performs bound checking for allocated memory.
Use memory_dump to see current fragmentation map:
<br/>
<a href="http://unigine.com/devlog/090305-memory_dump.jpg"><img src="http://unigine.com/devlog/090305-memory_dump_sm.jpg" alt="Memory dump" border="" width="512" height="410"/></a>
</p>
<p>
Skinned mesh animation system now operates by tempararily buffers of bone transformations.
One can apply different operations to them (copy, invertion, interpolation, multiplication).
So these buffers allow creation of complex animation trees.
Animation layer can be treated as a CPU ALU and buffers are like CPU registers.
</p>
<p>
PS: There is a <a href="http://www.tvs.pl/informacje/9132/">new interview with our customers, who is creating an "Afterfall" post-apocalyptic cRPG basing on Unigine</a> (Polish only, sorry).
</p>
		]]></description></item><item><title>Improved data streaming, KeyLine and new upgrade system</title><link>http://unigine.com/devlog/57/</link><author>diesel@unigine.com</author><pubDate>2009-02-21</pubDate><description><![CDATA[
<p>
What's new:
<ul>
	<li>Smart data streaming: textures shows 64x64 mipmap (those miniatures are always loaded in memory) before fully loaded, meshes are rendered when loaded.</li>
	<li>Separate thread for data loading, which allows smoother data loading in the background without stalls.</li>
	<li>Loading queue can be controlled by a set of filesystem_* console variables.</li>
	<li>Improved warming up of shaders on world loading.</li>
	<li>manager_preload_* console variables renamed to render_manager_load_*.</li>
	<li>New formats of meshes: static meshes store their boundings for faster preload, plus there is a more effective data compression for both static and skinned meshes (warning: you must convert your data in order to work with this version, see notes about upgrade system below).</li>
	<li>meshupgrade console tool for converting all meshes into new formats.</li>
	<li>Fixed light masks for LightSpot sources.</li>
	<li>Refactoring of mathlib, some Fast* functions removed.</li>
	<li>Correct interpolation for negative frames in MeshSkinned (also added getFrameCurrent() function).</li>
	<li>Per-bone weight normalization for animation.</li>
	<li>New framework for plugins.</li>
	<li>MeshSkinned import plugins for 3dsMax and Maya.</li>
	<li>Contact toggle for WorldTrigger.</li>
	<li>Added array.find() function with two arguments in UnigineScript, returns second argument if nothing found.</li>
	<li>engine.splash.renderSplash() function renamed to engine.splash.renderInterface().</li>
	<li>Added addLayer() function for MeshSkinned without flushing data on other layers.</li>
	<li>Added engine.memory.* set of functions in UnigineScript library.</li>
	<li>Static 2D reflections (reflection_dynamic state in water_base and mesh_reflection_2d materials, static by default).</li>
	<li>MeshViewer shows basis and name for bones.</li>
	<li>Removed support of Intel compiler and MinGW.</li>
	<li>Quadratic exposure mode for HDR (set render_hdr console variable to "2").</li>
	<li>Improved class casting in UnigineScript, Foo(input).function() syntax is supported now.</li>
	<li>Support of Linux 64 bit with cross-compilation (use "scons cross=x86" or "scons cross=x64" depending on base platform).</li>
	<li>Versions of XML data (world, node, mat, prop, ui) can be different from this moment.</li>
	<li>New data upgrade system.</li>
	<li>New KeyLine system for key sequences, see "Programming / UnigineScript / Scripts / KeyLine Script" section of the manual for more information.</li>
	<li>Updated C++ API documentation and reference manual.</li>
</ul>
</p>
<p>
KeyLine system handles arbitrary key sequences and takes care of interpolation between key values, providing GUI for data manipulation as well.
It is a somewhat data-driven system, meta-information is stored in the XML format.
Licensees can see how this system is used in new version of Tropics demo for dynamic environment control.
<br/>
<a href="http://unigine.com/devlog/090221-keyline.jpg"><img src="http://unigine.com/devlog/090221-keyline_sm.jpg" alt="KeyLine GUI" border="" width="512" height="384"/></a>
</p>
<p>
We also introduce a new one-button upgrade system, see 'scripts/Upgrade' directory in the SDK.
Please note that it requires updated Unigine_Externs package installed and 'Unigine_Externs/bin' in your system's PATH variable.
To perform batch meshes upgrade you should simply run "upgrade.py --target=PATH-TO-YOUR-PROJECT" from the command line.
</p>
<p>
PS: Don't forget to update your video drivers to recent ones (but be aware about some bugs in OpenGL with ATI), previous version from NVIDIA was very buggy.
</p>
		]]></description></item><item><title>Animation changes, external GUI</title><link>http://unigine.com/devlog/56/</link><author>diesel@unigine.com</author><pubDate>2009-02-04</pubDate><description><![CDATA[
<p>
Changes of this month:
<ul>
 <li>External GUI via wxWidgets (for new editor) through C++ API in progress.</li>
 <li>Physical contacts are accessible from PlayerSpectator and PlayerPersecutor.</li>
 <li>StreamRead and StreamWrite are merged into Stream class, which can be used to transfer File and Stream objects into C++ part.</li>
 <li>Image class added to C++ API.</li>
 <li>Controls are now accessible via C++ API.</li>
 <li>setUpdate()/setUpdate functions in C++ API, which controls whether the application will be updating when the window is hidden.</li>
 <li>User-defined classes can be used as keys of maps in UnigineScript.</li>
 <li>Alpha testing is available for mesh materials with detail.</li>
 <li>C++ like scoping for derived classes in UnigineScript (search inside itself, search inside parent class, search its own namespace, search inside parent namespace).</li>
 <li>Reduced number of allocations in call() operator of UnigineScript.</li>
 <li>Simple ImageView tool for viewing of all supported texture formats.</li>
 <li>Improved new() operator now supports the following statements: new("Foo"), new("File","file.txt","wb") in UnigineScript for objects construction of user-defined and extern classes.</li>
 <li>Support of dual quaternion skinning with uniform bone scaling (optional, controlled by render_use_dual_quaternions console variable, disabled by default).</li>
 <li>setFrameBoneTransform() / getFrameBoneTransform() members of ObjectMeshSkinned work in local space.</li>
 <li>Increase of bones per surface limit to 96 (non-uniform scaling isn't supported anymore, be aware).</li>
 <li>New format of skinned meshes (use ResourceEditor for upgrading; don't forget to update plugins), which treats all bone transformations in local space.</li>
 <li>Heavily refactored WidgetListBox and WidgetTreeBox widgets.</li>
 <li>Added multiple re-parenting for nodes in the editor.</li>
 <li>WorldTrigger can be activated by a contact.</li>
 <li>Access to a parent widget in GUI.</li>
 <li>Fixed FOV in camera export script for 3dsMax.</li>
 <li>Animation export plugin for 3dsMax supports compact sanim format.</li>
 <li>High-level scripts are moved into data/scripts directory.</li>
 <li>No more seams on splatting terrain with DX9.0 hardware.</li>
 <li>MeshViewer shows bones hierarchy.</li>
 <li>Optional support of dual quaternions in MeshViewer.</li>
 <li>Shaders performance optimization.</li>
 <li>Support of warming shaders after loading of the world (render_manager_warm_shaders console variable, disabled by default).</li>
 <li><a href="http://www.scons.org/">SCons</a> 1.2.0 is supported, it's highly recommended to upgrade to this version.</li>
</ul>
</p>
<p>
Here is an example of external GUI for Unigine (it will be used for <a href="http://unigine.com/products/unigine/roadmap-2009/">new version of UnigineEditor, which is scheduled for this year</a>):
<br/>
<a href="http://unigine.com/devlog/090204-external_gui.jpg"><img src="http://unigine.com/devlog/090204-external_gui_sm.jpg" alt="External Unigine GUI" border="" width="512" height="410"/></a>
</p>
<p>
Compare results of ordinary animation (note skinning distortion due to large twist angle):
<br/>
<img src="http://unigine.com/devlog/090204-quaternions_off.jpg" alt="Dual quaternions support off" border="" width="512" height="399"/>
<br/>
...with dual quaternions one, which provides better quality:
<br/>
<img src="http://unigine.com/devlog/090204-quaternions_on.jpg" alt="Dual quaternions support on" border="" width="512" height="399"/>
<br/>
</p>
<p>
PS: Unigine has celebrated 5th anniversary recently, it's quite a long run, wow.
</p>
		]]></description></item></channel></rss>
