<?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>New sound system is on the way</title><link>http://unigine.com/devlog/38/</link><author>diesel@unigine.com</author><pubDate>2008-03-31</pubDate><description><![CDATA[
<p>
Recent changes:
<ul>
 <li>New cross-API sound framework.</li>
 <li>Wrappers for OpenAL/FMOD/XAudio2.</li>
 <li>New WorldSource and AmbientSource classes for sound in the framework.</li>
 <li>Rollback to alpha7 version of Theora, beta seems to be too buggy.</li>
 <li>Improvements of C++ API, now it's possible to work with UnigineScript's arrays.</li>
 <li>Image framework now allows rotation of an image, it's very useful for cubemaps.</li>
 <li>Fixed lack of HSV accuracy for image dialog.</li>
 <li>Additional render optimizations (less CPU cache thrashing).</li>
 <li>Updated stereo launchers.</li>
 <li>Support of 3DNow! technology in the framework.</li>
 <li>Interpreter optimizations (Variable is more compact now, vec/mat/quat parameters are passed more optimal also).</li>
 <li>RichText now can be expanded.</li>
 <li>ObjectGui and ObjectGuiMesh cannot load UI files anymore, they simply provide an interface for GUI object.</li>
 <li>Separators in WidgetMenuBox.</li>
 <li>Open menu can be hidden by a click of any mouse button.</li>
 <li>XML parser now skips EF BB BF sequence at the beginning of the file in order to be more compliant with Unicode standarts.</li>
 <li>Fixed old UnigineEditor bug with moving nodes up/down in the list.</li>
 <li>Node instancing framework in UnigineEditor.</li>
 <li>Updated MPEG video grabber for new ffmpeg.</li>
 <li>C++ API documentation update.</li>
</ul>
</p>
<p>
It seems that the new sound system is close to be completed.
Unfortunatelly there are a lot of bugs in OpenAL, some of them are really stupid ones.
Another headache is different reverberation models in different APIs, there can hardly be API-independent settings.
</p>
		]]></description></item><item><title>DirectX 10.1 support</title><link>http://unigine.com/devlog/37/</link><author>diesel@unigine.com</author><pubDate>2008-03-11</pubDate><description><![CDATA[
<p>
What's new:
<ul>
 <li>DirectX 10.1 support (d3d10_render_use_feature_level_1 console variable, it's enabled by default; means that comparison sampling from texture arrays for cube and world lights is used).</li>
 <li>Support of MS Visual C++ 2008 Express Edition.</li>
 <li>New object for dynamic sky: ObjectSky (2 surfaces, 2 cubemaps with RGBE support, 2 layers of clouds).</li>
 <li>Shadowing by clouds of ObjectSky.</li>
 <li>Modulation of dynamic irradiance environment maps by ambient map.</li>
 <li>Geometry duplication via geometry shaders for rendering of cube and world shadow maps (it works really fast on ATI).</li>
 <li>Workaround for shadow biases (they are broken in ATI Direct3D10 drivers at the moment, the bug is submitted).</li>
 <li>R600-specific optimizations.</li>
 <li>Support of 16f and 32f image formats, loading of *.HDR files.</li>
 <li>Fixed ATI2 normals.</li>
 <li>Fair light scattering for reflections.</li>
 <li>SpriteVideo YUV output with shader-based conversion into RGB for ObjectGui and ObjectGuiMesh (it reduces CPU load while playing multiple videos).</li>
 <li>Dynamic access to textures by means of UnigineScript (e.g. for generation of procedural textures).</li>
 <li>KEY_PRESSED callbacks for WidgetEditLine and WidgetEditText.</li>
 <li>Saving of screenshots in different file formats (video_extension console variable, TGA is used by default).</li>
 <li>Fixed Alt-Tab issue with fullscreen mode on Direct3D9.</li>
 <li>Documentation updates: "Content Creation / Animation" and "Programming / Typical Architecture of a Unigine-Based Application" articles.</li>
</ul>
</p>
<p>
There is a funny thing with ATI2 components swapping on different cards and APIs (if you don't take it into account, there are artifacts):
<br/>
<br/>

	R500R600NV40NV50
	OpenGLYX (3dc)YX (3dc)XY (la)XY (latc)
	Direct3D9YXYXYXYX
	Direct3D10XYXY

</p>
<p>
We hope our render to be completed for several months, it is already on the most bleeding edge.
Sound module and physics improvements are the following.
</p>
		]]></description></item><item><title>Joysticks support and some networking improvements</title><link>http://unigine.com/devlog/36/</link><author>diesel@unigine.com</author><pubDate>2008-02-21</pubDate><description><![CDATA[
<p>
Recent changes:
<ul>
 <li>New Phong-rim material is now a default one for meshes.</li>
 <li>Full support of Xbox 360 gamepad.</li>
 <li>Support of standart PC joysticks and wheels (no force feedback is available yet).</li>
 <li>Fixed clip planes for all APIs (no more problems with 2D reflections).</li>
 <li>Optimization of shadow map memory usage.</li>
 <li>GUI refactoring, all widget classes now have "Widget" prefix, like WidgetVBox (use deprecate.h for backward compatibility).</li>
 <li>Visual limits of suspension travel in JointWheel.</li>
 <li>New WidgetMenuBox and WidgetMenuBar widgets.</li>
 <li>Mask buffers for GUI rendering (WidgetSprite).</li>
 <li>Fixed reading of empty string arrays from XML.</li>
 <li>Dedicated thread for networking in the engine.</li>
 <li>New Packet class for parallel data transfer in the thread.</li>
 <li>Added a lot of articles in "Content Creation / Materials" section of the documentation.</li>
</ul>
</p>
<p>

</p>
<p>
Here is a screenshot from the small racing demo, which will be included into Unigine SDK soon (there are both types of gear box available, physics interaction of objects, and some GUI elements, including minimap and speedometer):
<br/>
<a href="http://unigine.com/devlog/080221-racing.jpg"><img src="http://unigine.com/devlog/080221-racing_sm.jpg" alt="Racing demo" border="" width="512" height="384"/></a>
</p>
		]]></description></item><item><title>Improved vertex cache optimization</title><link>http://unigine.com/devlog/35/</link><author>diesel@unigine.com</author><pubDate>2008-02-08</pubDate><description><![CDATA[
<p>
Recent changes:
<ul>
 <li>Dynamic irradiance environment maps for meshes, terrains and billboards (by means of a harmonics basis).</li>
 <li>New vertex cache optimizator (processing time depends on mesh complexity linearly); it also reorders polygons for more optimal rendering (less overdraw).</li>
 <li>Overlapping visualization for 3D meshes in ResourceEditor / Viewer.</li>
 <li>Refactored plugins for 3D modeling packages, vertex cache optimization is always performed on export now.</li>
 <li>Faster loading of large files in non-native formats into ResourceEditor.</li>
 <li>Improved soft shadows.</li>
 <li>Adjustable bias for translucence.</li>
 <li>Hash can be stored in stack memory now.</li>
 <li>Improved algorithm for instance rendering (no performance drop on non-instanced geometry).</li>
 <li>Reflection masks (works the same way as light and collision masks).</li>
 <li>New console variables: render_show_penumbra (shows penumbra in color) and render_show_splits (shows PSSM splits in color).</li>
 <li>Added performance stress-tests.</li>
 <li>Direct3D9 shaders have been switched to row-major order matrices.</li>
 <li>Correct detection of ATI R600 cards.</li>
 <li>Workaround for Direct3D9 / ATI2 textures crash bug.</li>
 <li>Fixed shadow bilinear sampling on R600.</li>
 <li>Multiple selection of nodes in UnigineEditor (for cloning, deletion, transformations and export).</li>
 <li>Export of mesh data from UnigineEditor.</li>
 <li>Support of images in ComboBox.</li>
 <li>Updated installation script (no more problems with binary version).</li>
</ul>
</p>
<p>
No vertex cache optimization (overlapped regions are colored by red):
<br/>
<a href="http://unigine.com/devlog/080208-vertices_wo_opt.jpg"><img src="http://unigine.com/devlog/080208-vertices_wo_opt_sm.jpg" alt="Non-optimized mesh" border="" width="512" height="397"/></a>
<br/>
After optimization:
<br/>
<a href="http://unigine.com/devlog/080208-vertices_opt.jpg"><img src="http://unigine.com/devlog/080208-vertices_opt_sm.jpg" alt="Optimized mesh" border="" width="512" height="397"/></a>
<br/>
Thus we get less overdraw after optimization.
</p>
<p>
Now there are the following shader presets available:
</p>
<p>

	Shaders presetFeatures
	HighSoft shadows for all light sources
	MediumNo soft shadows
	Low
	No bilinear filtration of shadows on ATI cards;
	water has only 2 normalmaps instead of 4;
	no foam for water;
	no shadows for water;
	no volumetric interaction of particles;
	no shadows of particles;
	ambient occlusion shader makes 2 times less samples;
	no soft interaction of omni and projected volumetric objects
	

</p>
<p>
By the way, there is very bad situation with biases on R600 / Direct3D10, their values are abnormally low.
We are waiting for a responce from AMD drivers team now, hope this bug being fixed very soon.
</p>
<p>
PS: Only 3 weeks left to license current version of Unigine at <a href="http://unigine.com/licensing/">very low prices</a> (before 29th February).
</p>
		]]></description></item><item><title>New shadows</title><link>http://unigine.com/devlog/34/</link><author>diesel@unigine.com</author><pubDate>2008-01-23</pubDate><description><![CDATA[
<p>
Recent changes:
<ul>
 <li>High-quality PSSM (Parallel Split Shadow Map) shadows for LightWorld.</li>
 <li>Stencil shadows R.I.P.</li>
 <li>Only hardware shadow maps are supported now, since they are faster and consume less memory.</li>
 <li>Masks for collisions and lights (by using them one can control lighting and collision detection per-object).</li>
 <li>New SANIM file format for compressed bone-based animations.</li>
 <li>ResourceEditor / Viewer now can play "animation only" files, loaded in addition to a skinned mesh.</li>
 <li>Export of single bind pose frame in 3ds Max plugins.</li>
 <li>Normalmaps are to be compressed into ATI2 format now.</li>
 <li>Double-click callbacks for EditLine and EditText widgets.</li>
 <li>Support of ATI R300 has been discontinued (due to too tight limit for instruction count per shader).</li>
 <li>Support of NVIDIA NV30 has been discontinued (it's too old for modern stuff).</li>
 <li>mesh_detail_base material merged into mesh_base (for backward compatibility there is a material with that name in "deprecated.mat" library still, but it will be removed soon).</li>
 <li>Specular is always on now.</li>
 <li>New alpha_scale option, which allows continious adjustment of transparency for meshes and vegetation (see corresponding sample in "materials" serie).</li>
 <li>A bunch of light samples.</li>
 <li>New articles in "Content Creation" section of the manual: "Static Geometry" and "Texturing".</li>
 <li>Updated UnigineScript documentation.</li>
</ul>
</p>
<p>
It's sad to acknowledge, but different techniques of avoiding shadow map aliasing like LiSPSM suck, because they are unstable and produce a lot of headache with special geometry dividing.
We have wasted a lot of time to get better results with them, but splitted maps seems to be more predictable and robust.
Anyway even PSSM requires tweaking for a scene: there is a number of parameters (shadow map resolution, maximal distance to the shadow caster, global "shadow off" distance), plus it's important to turn on self shadowing only where it is really needed.
Another good thing about PSSM is that it loads CPU less than LiSPSM did, thus it is more scalable.
</p>
<p>
Here is an example of scene with PSSM:
<br/>
<a href="http://unigine.com/devlog/080124-shadows.jpg"><img src="http://unigine.com/devlog/080124-shadows_sm.jpg" alt="Parallel Split Shadow Map" border="" width="512" height="386"/></a>
</p>
<p>
A little note about collision and lighting masks.
There are 32 lighting channels available, all of them can be configured to accept some light source or not, each object can belong to a lighting channel according to its lighting mask.
The same is for collision masks.
By using collision and lighting channels a designer obtains more control over the scene, so we recommend to use that feature (double click on a mask field to edit it in UnigineEditor).
</p>
<p>
By the way, guys from NVIDIA have recently fixed a minor driver bug, reported by Frustum, there are 4 more still opened (it seems that we are one of the most frequent reporters in their bug tracker, hehe).
ATI drivers work better now, both in Windows and Linux, we aren't experiencing major problems with them for the moment.
</p>
		]]></description></item><item><title>iZ3D stereo monitors supported</title><link>http://unigine.com/devlog/33/</link><author>diesel@unigine.com</author><pubDate>2008-01-08</pubDate><description><![CDATA[
<p>
For those who don't read our news:
<ol>
 <li>Unigine introduces iZ3D stereo monitors support at CES, <a href="http://promo.unigine.net/press-releases/080107-iz3d/">read more here</a>.</li>
 <li>You have the last chance to license <a href="http://unigine.com/products/unigine_v0.4/">current version of Unigine</a> at <a href="http://unigine.com/licensing/">very low prices</a> before 29th February, after that date prices will be much higher.</li>
</ol>
</p>

<p>
Changes for the week:
<ul>
 <li>Support of <a href="http://iz3d.com/">iZ3D stereo monitors</a>.</li>
 <li>"Scattering" flag in materials for correct pre-scattering blending (with this flag enabled a blending material will be rendered before light scattering; disabled by default for blending materials).</li>
 <li>Adjustable scattering threshold (for correct translucence of the Sun through objects).</li>
 <li>Seamless immersion into the water.</li>
 <li>Speed up of water rendering on ATI cards.</li>
 <li>"Spark" emitter is now available for particle systems (sparks can be generated after a collision of a particle from another system or their coordinates can be set manually).</li>
 <li>"Clipping" flag in particles causing particle's death after intersection or collision.</li>
 <li>Volumetric light scattering effect (shadow shafts), can be enabled per-surface.</li>
 <li>New functions for manual update of nodes (engine.world.addNode) and bodies (engine.physics.addNode) for invisible objects.</li>
 <li>New samples: more particles, another variant of PlayerActor usage with weapon attached.</li>
</ul>
</p>
<p>
That's how volumetric light scattering looks (length and exposure of shadow shafts can be adjusted):
<br/>
<a href="http://unigine.com/devlog/080108-volumetric_scattering.jpg"><img src="http://unigine.com/devlog/080108-volumetric_scattering_sm.jpg" alt="Volumetric light scattering" border="" width="512" height="386"/></a>
<br/>
That's all for today, stay tuned.
</p>
		]]></description></item><item><title>Last update of the year</title><link>http://unigine.com/devlog/32/</link><author>diesel@unigine.com</author><pubDate>2007-12-31</pubDate><description><![CDATA[
<p>
What's new:
<ul>
 <li>Intel Compiler 10.1 support for MS Windows builds.</li>
 <li>Screen-space ambient occlusion.</li>
 <li>ResourceEditor / Viewer can load animation from md5b and animb formats.</li>
 <li>Heavily improved Players: 2 frictions (min for moving and max for standing), new Offset matrix (for manual rotation of player's head) in addition to modelview one, added reference to controls (system ones by default).</li>
 <li>Correct work of PlayerSpectator and PlayerActor with arbitrary directions of Up vector, "turning" parameter is added to specify turning speed.</li>
 <li>Improved PlayerPersecutor, its "offset" renamed to "anchor".</li>
 <li>Improved controls, added dummy ones.</li>
 <li>A bunch of new Player samples.</li>
 <li>Safe Body transform without clearing speeds and contacts: setSafeTransform().</li>
 <li>Physics callbacks have 2 additional arguments now.</li>
 <li>Correct save/restore of all callbacks.</li>
 <li>engine.engine.* functions are renamed to engine.* in UnigineScript.</li>
 <li>Improved threads in UnigineScript: now they can be called with arguments and have their own scope, thus there can be a lot of them, working in parallel; "thread_create" function is replaced with "thread".</li>
 <li>New setFrameBone* and getFrameBone* functions, which don't call final blending of the animation.</li>
 <li>Small improvements of filesystem (reduced memory allocation count).</li>
</ul>
</p>
<p>
No Ambient Occlusion, a boring flat image:
<br/>
<a href="http://unigine.com/devlog/071231-no_ao.jpg"><img src="http://unigine.com/devlog/071231-no_ao_sm.jpg" alt="No Ambient Occlusion" border="" width="512" height="386"/></a>
<br/>
Real-time Screen-Space Ambient Occlusion brings a lot of 3D look even for non-lit regions:
<br/>
<a href="http://unigine.com/devlog/071231-ssao.jpg"><img src="http://unigine.com/devlog/071231-ssao_sm.jpg" alt="Real-time Screen-Space Ambient Occlusion" border="" width="512" height="386"/></a>
</p>
<p>
Some statistics for today:
<pre>
	engine           5736 Kb  476 files  205649 lines
	shaders           862 Kb  215 files   31279 lines
	scripts            75 Kb    7 files    2287 lines
	editor            701 Kb   55 files   25090 lines
	tools             733 Kb   53 files   26442 lines
	app main           47 Kb   18 files    1812 lines
	app samples        69 Kb   29 files    2915 lines
	extern libs       120 Kb   12 files    3579 lines
	build system       34 Kb   24 files    1535 lines
	build scripts      44 Kb   48 files    1461 lines
	docs scripts       30 Kb    8 files     964 lines
	total            8456 Kb  945 files  303013 lines
</pre>
That statistics is not full, it doesn't include information about 2 Unigine-based projects we are working on now.
</p>
<p>
Happy New Year!
</p>
		]]></description></item><item><title>ObjectWaterMesh, MinGW and a bunch of bugfixes</title><link>http://unigine.com/devlog/31/</link><author>diesel@unigine.com</author><pubDate>2007-12-20</pubDate><description><![CDATA[
<p>
Recent changes:
<ul>
 <li>New ObjectWaterMesh object for small water pools.</li>
 <li>Improvement of build scripts (new variable "g_compiler" in addition to "g_os"), added support of MinGW (engine can be built with it, but the build will not be properly functional; tools are working ok).</li>
 <li>All console variable are now declared in source/engine/EngineConsole.h.</li>
 <li>"manager_create_*" console variables are renamed to "manager_preload_*".</li>
 <li>Fixed mouse scroll handling in Linux.</li>
 <li>Bones visualization mode in ResourceEditor / Viewer.</li>
 <li>Fixed collisions of RagDoll with BodyDummy.</li>
 <li>Fixed "unknown body" bug in physics solver.</li>
 <li>Non-intersectable objects now can be selected by double-click in UnigineEditor.</li>
 <li>2 samples of LODs usage.</li>
 <li>Object's materials are now handled by the material class.</li>
 <li>A bunch of flags in objects for surfaces (collision, intersection, shadows and so on).</li>
</ul>
</p>
<p>
By the way, building Unigine with MinGW on win32 have helped refactoring win32-specific code because GCC is a little bit more verbose than MS VS.
</p>
		]]></description></item><item><title>Water updates</title><link>http://unigine.com/devlog/30/</link><author>diesel@unigine.com</author><pubDate>2007-12-17</pubDate><description><![CDATA[
<p>
Recent changes:
<ul>
 <li>Caustics, foam, 4 geometry waves and underwater mode in ObjectWater.</li>
 <li>Speedup of ObjectWater.</li>
 <li>Shaders for 3D clouds via ObjectVolumeBox (PS 3.0 required).</li>
 <li>Fixed 3D textures on OpenGL.</li>
 <li>Refactored random generator (there is no Gaussian floats anymore), now it works faster.</li>
 <li>ObjectVolumeBox transfers basis for generation of 3D texture coordinates inside the cube to a shader (for various sfx).</li>
 <li>Per-texture anisotropy filtering in materials.</li>
 <li>Removed gl_render_use_nv_texture_expand_normal console variable (it is always on now).</li>
 <li>create_shaders console variable renamed to manager_create_shaders.</li>
 <li>Correct detection of RGB10A2 support for old ATI cards.</li>
 <li>Support of GL_ATI_shader_texture_lod extension.</li>
 <li>Fixed refraction rendering in stereo mode.</li>
 <li>Progress bar for world loading.</li>
 <li>New order of splash screens rendering: intro splash shows prior to system init function, outro one renders after shutdown function.</li>
 <li>Workaround on OpenGL TTF fonts for buggy Linux driver from NVIDIA.</li>
 <li>Normalmaps visualization mode: render_show_normals.</li>
 <li>ImageDDS prints an image info being run with -i option.</li>
 <li>SpriteRender sample.</li>
 <li>Updated reference manual, added ObjectWater class description.</li>
</ul>
</p>
<p>
3D clouds:
<br/>
<a href="http://unigine.com/devlog/071217-3d_clouds.jpg"><img src="http://unigine.com/devlog/071217-3d_clouds_sm.jpg" alt="3D clouds" border="" width="512" height="386"/></a>
</p>
<p>
There are a lot of handles for water tweaking, so artists can be happy:
<br/>
<a href="http://unigine.com/devlog/071217-objectwater_settings.jpg"><img src="http://unigine.com/devlog/071217-objectwater_settings_sm.jpg" alt="ObjectWater settings" border="" width="512" height="386"/></a>
<br/>
Plus there are real-time caustics in here:
<br/>
<a href="http://unigine.com/devlog/071217-caustics.jpg"><img src="http://unigine.com/devlog/071217-caustics_sm.jpg" alt="Caustics" border="" width="512" height="386"/></a>
<br/>
and improved foam:
<br/>
<a href="http://unigine.com/devlog/071217-foam.jpg"><img src="http://unigine.com/devlog/071217-foam_sm.jpg" alt="Foam" border="" width="512" height="386"/></a>
</p>

		]]></description></item><item><title>Stereo support, new water and physics callbacks</title><link>http://unigine.com/devlog/29/</link><author>diesel@unigine.com</author><pubDate>2007-12-07</pubDate><description><![CDATA[
<p>
Recent changes:
<ul>
 <li>Stereo mode in the render.</li>
 <li>New ObjectWater instead of old water.</li>
 <li>Refactoring of particles shaders.</li>
 <li>Fixed issue with required D3DPTADDRESSCAPS_BORDER for ATI R400 and R300 (it doesn't support border clamp according to the spec, however it works ok).</li>
 <li>Physics callbacks for joint destruction, freezing and new contacts.</li>
 <li>More efficient memory allocations for physics.</li>
 <li>3 more physics samples (callbacks, freezing).</li>
 <li>foreachkey() now iterates over ordinary vectors in UnigineScript.</li>
 <li>New check() function for maps (it checks validity of a key).</li>
 <li>Fixed jpeglib build for Windows.</li>
 <li>"intersection" function is renamed to "getIntersection", the same is for collisions in meshes.</li>
 <li>"world_clear" console command is renamed to "world_quit".</li>
 <li>object.setMaterials removed; everything works by means of object.setMaterial.</li>
 <li>Fixed bug with button handling for non-focused widgets in GUI.</li>
 <li>engine.gui.setCallback function is renamed to engine.gui.addCallback.</li>
 <li>New "editor_script" console variable for multiple editors.</li>
 <li>"Come to me" button in UnigineEditor: it moves selected object right in front of the camera ('b' hotkey).</li>
 <li>Fast simplified rendering mode in UnigineEditor (modes are toggled by 'F3' button).</li>
 <li>Updated documentation on console variables and commands.</li>
 <li>"Programming / UnigineScript / Script Debugging Tips" article in the manual.</li>
 <li>Updated "Tools / UnigineEditor" article in the manual.</li>
</ul>
</p>
<p>
Here is the table describing combinations of "render_stereo" console variable's values and postprocessing materials to be used with different stereo output devices:
</p>
<p>

 Output deviceOpenGL materialDirect3D materialrender_stereo
 Separate eyes devicepost_stereo_widepost_stereo_wide2
 N/Apost_stereo_dual1
 Anaglyph glassespost_stereo_anaglyphpost_stereo_anaglyph1

</p>
<p>
A special small launcher is required for stereo mode on Windows since it works via an interesting trick.
Users can enjoy stereo mode on Linux as well.
</p>
		]]></description></item></channel></rss>
