DirectX 10 support is ready!
Unigine v0.4 now supports DirectX 10 in addition to OpenGL and DirectX 9. There is a huge heap of changes, we'll describe them by sections.
Framework:
- A bunch of classes for Direct3D10 framework.
- Initialization of Direct3D 9/10 through the library wrapper, thus engine can work in OpenGL even if there is no appropriate DirectX version installed.
- Support of RGB10A2 (10 bits per channel) and sRGB textures.
- Geometry shaders in OpenGL with external control by means of "input", "output" and "vertex" instructions.
- Shader-capable GPU is a strong requirement now, no fixed-function pipeline.
- Drastical boost of bounds calculation speed for skinned meshes.
- Skinned and morphing meshes can extrude shadow volumes via geometry shaders.
- Rendering of adjacency triangles for all APIs (used for shadow volume extrusion).
- Border clamp support for textures.
- Faster GUI rendering due to less state switching.
- Variables transfer between instances of scripts interpreter.
Libraries wrapper helps to avoid multiple binaries for Vista and Windows XP, plus Unigine can work at least in OpenGL mode if DirectX is too outdated on a box. Introduced a while ago Ffp system (simple fixed function pipeline emulator) brings more commonality and will help porting Unigine to XBox360 and PS3.
Engine:
- New global material options: "reflection_2d" and "reflection_cube" (both enebled by default), meaning whether the object is rendered in the reflection of corresponding type or not.
- New policy for material flags: "repeat", "clamp_xy", "clamp_yz" and "clamp_xz" flags are removed, "repeat" is set by default, flags can be accumulated (as a comma-separated string). So, the full flags list is: "clamp_x", "clamp_y", "clamp_z", "clamp" (for all x, y, z directions), "border_x", "border_y", "border_z", "border" (for all x, y, z directions), border_w (white border).
- Removed PRT textures form materials (R.I.P. PRT).
- Controls has been improved and moved from Players into a dedicated directory.
- Visualizer switched to Ffp emulator.
- Default video mode is 1024x768 instead of 640x480.
- Added "direct3d10" API initialization, it has minimal priority in the list.
- Fixed ObjectVolumeBox flickering.
- "Shadow" flag for surfaces (less materials required).
- engine.editor.load/saveNode() moved to engine.world.load/saveNode().
- Node files contain required materials list.
- engine.system.bind()-like functions replaced by engine.system.get().
- EngineLog uses system message boxes on fatal errors.
- UnigineAPI doesn't require window pointer for initialization of external Direct3D9/Direct3D10 windows.
- New option for texture format: "srgb" (means that the texture is to be normalized into standard color space while sampling).
- New "render_srgb" console variable (disabled by default).
You canread more about sRGB in the Wikipedia, for example. Color values are linearized during reading from textures, further manipulations (including lighting) are performed in sRGB color space (linear one). However, precision is insufficient in dark regions, so to avoid artifacts, 10-bit precision buffers are used (when available). There is no such problem when HDR is on.
Render:
- Direct3D10 render.
- Added support of GL_EXT_draw_instanced, GL_EXT_geometry_shader4, GL_EXT_texture_array and GL_EXT_texture_sRGB OpenGL extensions.
- Rendering to RGB10A2 buffers (supported by G80 and all ATI cards).
- Optimized sorting for surfaces.
- Visualizer renders before postprocessing.
- Scene is rendered always via TextureRender (even in non-HDR modes), it gives additional performance boost.
- Refactored light scattering with areal perspective.
- Volumetric scattering effect for LightWorld.
- Improved quality of glow.
- Min/max luminance limits in HDR.
- Fixed screenshot grabbing in Direct3D9.
- Introduced counter of surfaces count per frame (for estimation of instancing efficiency).
- Meshes geometry instancing for all APIs (more speed, less DIPs).
- Binding of LightWorld parameters and light scattering.
Shaders:
- Cg shaders has been mutated into GLSL with a set of defines.
- Unification of lighting shaders.
- Improved quality of soft shadow maps (16 samples instead of 12).
- "world_begin"/"world_end" removed, there are only "scattering" and final "composite" now.
- Improved quality of blur filters.
- Global includes for all types of shaders.
Physics:
- Disabling physics by a toggle in addition to time stopping.
- More optimal objects randomization.
- Reduced jittering.
- Correct prediction of ragdoll position, smoother animation.
Scripts and samples:
- Resurrection of scripts benchmark.
- Material samples (Indirect, Phong, Reflection Cube and Reflection 2D).
- New object samples (Billboards and all Volume objects).
- Increased complexity of some physics samples.
Tools:
- PRTMapper R.I.P.
- Support of multimaterials in UnigineExport script for 3ds Max.
- ResourceEditor switched to Ffp emulator.
- AmbientMapper switched to GLSL shaders completely.
- Smoother clipmap transitions in TerrainEditor.
- Scattering settings in UnigineEditor.
Documentation:
- All node-related classes are documented.
- All physics-related classes are documented.
- Updated "Development Environment" article.
Binary builds require DirectX 9 (November 2007) since this snapshot. 64-bit builds are now included into binary version of Unigine SDK. Some materials can be upgraded by means of upgrade.py script, some of them requires minor manual editing.
As you can see, there is A LOT of changes indeed. By the way, there will be one more announce of Unigine-based project in a month, so stay tuned!