| Release 2015-03-10 |
This topic contains the following sections:
Release Notes iOS, Windows Store, Windows Phone
The assemblies have been updated to support the new Xamarin.iOS API and the Windows
Store API. The assemblies for Xamarin.iOS are now built for the Xamarin.iOS Unified
API. The assemblies for Windows Store and Windows Phone have been updated to support
Windows 8.1 and universal apps.
Image-based lighting (moving towards PBR)
Physically-based rendering (PBR) is becoming the new
norm for interactive graphics.
This release adds one new features which is an important step towards PBR:
image-based lighting (IBL). With PBR most materials
(e.g. shiny metals, diffuse materials at
grazing angles) reflect the environment. Image-based lighting uses environment maps to
create these reflections.
The new class
ImageBasedLight
can be used to define global or local environment maps for a scene. Material shaders
are mostly unchanged:
-
Forward rendered materials can use the standard environment map semantics. The
effect binding system will automatically select the closest
ImageBasedLight
and set the environment map as the effect parameter.
-
Deferred materials automatically reflect the environment map. In this case the
ImageBasedLight
is simply another type of light source, which is rendered into the light buffers.
The material's diffuse and specular coefficients define the amount of light that
is reflected. The specular power determines the glossiness of reflection. You do
not need to change the material shaders!
The
ImageBasedLight
currently uses standard cube maps. Cube maps can be loaded via the content pipeline
or generated dynamically at runtime.
We have added 2 new samples
(ImageBasedLightingSample and
CathedralSample) which demonstrate how to generate
environment maps at runtime and how to apply image-based lighting. Below is a
screenshot showing the
Sibenik Cathedral.
In this example image-based lights are used to add reflections.
The image-based lights can also be used to influence diffuse lighting (to add bounce
light) or to replace the normal ambient lighting.
Here are some screenshots of the CathedralSample:
Static batching and hardware instancing
Another question which we address in this release is:
How to render a large number of meshes efficiently?
One option is to merge several mesh nodes into one to reduce the per-object overhead.
The
MeshHelper
now provides functions to merge meshes at runtime.
Another option is to use hardware instancing. The DigitalRune
MeshRenderer
already supports hardware instancing: When mesh nodes are rendered, it gathers all
instances of one mesh and sends them to the GPU using a single draw call to reduce overhead.
However, if you add many individual mesh nodes to a scene, there is still a
significant overhead per-object. This release includes a new class
MeshInstancingNodeT
which is derived from
MeshNode.
It allows to group lots of instances into one scene node. Rendering a
MeshInstancingNodeT
is extremely fast because the instance-data buffers need to be created only once and
not per frame.
The new
BatchingSample demonstrates these new features.
Vegetation
The new
VegetationSample
uses the
MeshInstancingNode
to draw large quantities of grass, bushes and trees. It also shows how to
-
animate plants on the GPU to make them sway in the wind,
-
add a simple subsurface scattering/translucency effect for leaves,
-
blend between different levels of detail,
-
fade instances in/out.
Change log General
-
NEW: iOS libraries are now built for the Xamarin.iOS Unified API.
-
NEW: Windows Store and Windows Phone builds updated to Windows Store 8.1 Universal Apps.
The folder References/WindowsPhone has been removed.
The assemblies for Windows Store 8.1 Universal Apps (Windows + Windows Phone) can
be found in References/.NETCore.
-
NEW: Added new folders References/Android and
References/iOS with builds which do not require
MonoGame.
-
FIX: "InvalidProgramException: Invalid IL code…" error in Mono caused by code obfuscation.
-
Many other internal improvements.
DigitalRune Base 1.17
-
REMOVE: Clipboard support was removed for Windows Store Universal Apps.
DigitalRune Animation 1.4
-
FIX: Possible endless loops if several animated properties have the same hash code.
DigitalRune Graphics 1.0beta
-
NEW: Support for static batching and hardware instancing:
-
NEW: Static batching support using
MeshHelperMerge.
-
NEW: Static hardware instancing support using the new
MeshInstancingNodeT.
-
NEW: Vertex struct
InstanceData added.
-
NEW: Forward.fx supports hardware instancing.
-
CHANGE: When using hardware instancing, SceneNodeType is now a regular effect parameter.
Previous solution: SceneNodeType was part of the mesh instance data. It was stored
in a vertex stream register. SceneNodeType and InstanceColor occupied the same register,
which meant that either SceneNodeType or InstanceColor could be passed to the shader,
but not both parameters at the same time.
New solution: SceneNodeType is a regular effect parameter (= shader constant). Shaders
can now use SceneNodeType and InstanceColor at the same time.
This change affects GBuffer.fx.
-
NEW: Image-based lighting for diffuse and specular reflections using environment maps:
-
NEW:
SceneCaptureNodes
can now be rotated to capture cube maps which are not aligned with the world axes.
Previously cube maps were aligned with the world axes. Now it is possible to specify
a rotated camera to capture a rotated cube map. The
SceneCaptureRenderer
uses the orientation of
SceneCaptureNodeCameraNode
when capturing cube maps.
-
NEW: Vertex struct
VertexPositionNormalColorTexture
added.
-
NEW: DigitalRune Model Processor logs warning if a mesh name in a DRMDL is invalid.
-
NEW:
EffectPassBinding
implements IEquatable.
-
CHANGE: [iOS] DigitalRune Texture Processor automatically falls back to
Color format if size is not supported by PVRTC compressor.
-
CHANGE: Type of first parameter in
DebugRendererDrawTriangles
changed from
TriangleMesh
to
ITriangleMesh.
-
FIX: Possible
NullReferenceException
in
GraphicsManagerRender(IPresentationTarget, IListGraphicsScreen).
-
FIX: Possible
NullReferenceException
in
DebugRenderer
if
TriangleMeshShape
is rendered and then invalidated.
-
FIX: Effects which support skinning or morphing must not use hardware instancing.
In the last release we forgot to disable hardware instancing in effects which use morphing.
-
FIX:
LuminanceFilter
filters bad color values of the source image.
Before this fix a bad value in a render target (e.g. NaN or infinite) could create a
permanently black output image.
-
FIX: Possible
NullReferenceException
when a
MeshNode
uses an effect with skinning but
SkeletonPose
is not set.
-
FIX:
LodGroupNode
did not compute correct bounding shape if its pose or scale was not identity.
-
FIX:
LodGroupNode
did not compute correct bounding shape for some cases where a level had an infinite bounding shape.
-
FIX: Throw meaningful exception message if an array effect parameter binding uses more
array elements than the effect supports.
-
Minor other improvements.
DigitalRune Game UI 1.6
-
NEW:
TextBox
uses the new MonoGame KeyboardInput class on phones and Windows Store apps.
Samples
-
NEW: ImageBasedLightingSample.
-
NEW: CathedralSample.
-
NEW: BatchingSample.
-
NEW: VegetationSample.
-
NEW: XNA-Kinect sample project replaced by MonoGame-Windows-Kinect samples project.
-
CHANGE: Windows Store sample changed to XAML-based MonoGame template.
-
CHANGE: Removed use of Segoe UI Mono and Miramote in sprite fonts.
(These fonts come with XNA Game Studio. They are not included in Windows or MonoGame.)
-
FIX: Camera was disabled in Xbox avatar samples.
-
FIX: Some UI samples could not be switched with gamepad only.
-
Minor other improvements.
MonoGame
-
CHANGE: MonoGame.Framework.Net.dll is not required anymore by DigitalRune libraries and
samples.
-
REMOVE: MonoGameContentProcessor assembly removed. Use the new MonoGame content pipeline instead!
-
Several other improvements.