Blog

Author: Created: Monday, May 24, 2010 RssIcon
The blog of the DigitalRune team.
By DigitalRune Team on Thursday, April 03, 2014

As requested, we will describe some implementation details of our water rendering solution. This will not be a complete step-by-step introduction – there are already many articles out there (see Water Rendering Resources [1]). Instead, we will briefly describe all relevant parts, link to the relevant literature and go into detail where we have added something new.

clip_image001

By DigitalRune Team on Wednesday, March 12, 2014

Rendering a body of water, like a river or an ocean, is nothing special anymore. Many game engines support it directly or have a water sample. And implementing water is not too hard. I guess, an experienced graphics programmer should be able to take a sample from the internet and get it running in his/her engine of choice in less than a day. However, adding a comprehensive, general-purpose water rendering solution to an engine, creating a simple API and integrating water with other engine features (such as dynamic lighting or fog) is more challenging.

We have recently added water support to DigitalRune Graphics. …

By DigitalRune Team on Thursday, March 06, 2014

Here is a video demonstrating our new water rendering tech. Enjoy!

By DigitalRune Team on Thursday, January 23, 2014

Occlusion-Culling-Debug-VisualizeShadowCasterIn the previous article we have shown that occlusion culling can drastically reduce the number of objects that need to be rendered per frame. In this article we go one step further and extend this idea to shadow rendering.

Rendering shadow maps can be expensive in large scenes. Directional lights, like the sun, usually cover the entire level. Modern shadow mapping algorithms, such as cascaded shadow maps, limit the distance up to which shadows are rendered. Still, this may leave us with hundreds or thousands of shadow casting objects that need to be rendered into a shadow map. Shadow caster culling reduces the number of shadow casters further by removing shadow casters that do not contribute to the final image.

Hill and Collin [1] explain how to implement hierarchical Z-buffer (HZB) occlusion culling and how to extend the method to cull shadow casters. Darnell [2] has posted a sketch illustrating the idea. Here is a summary of the general ideas in our own words:

(1) Light Frustum Culling: As a first step, we can calculate the light frustum and test the bounds of the shadow casters against the light frustum. Shadow casters that do not intersect with the light frustum can be removed.

(2) Light Occlusion Culling: The occluders are rendered from the light's perspective and the bounds of the shadow casters are tested against the occluders. Shadow casters that are occluded from the light's perspective can be removed.

Next, …

By DigitalRune Team on Wednesday, January 22, 2014

The next DigitalRune Engine release will support GPU-based occlusion culling. The implementation is based on the algorithm by Stephen Hill and Daniel Collin.

Occlusion culling is available for XNA (Windows, Xbox 360) and MonoGame.

TL;DR

  • Occluders are simple triangle meshes that can be created in any 3D modeling tool. Simply add the string "occluder" or "occlusion" to the name of the object. If possible, link ("parent") the occluder to the model in the 3D modeling tool.
  • The class Occluder stores the occluder geometry at runtime.
  • Occluders can be assigned to meshes (new property Mesh.Occluder) or directly to an OccluderNode.
  • Occlusion culling at runtime is as simple as:
occlusionBuffer.Render(sceneNodes, context);
occlusionBuffer.Query(sceneNodes, context);
  • Occlusion culling takes less than a millisecond or up to several milliseconds.
By DigitalRune Team on Tuesday, January 21, 2014

The next update of DigitalRune Graphics will include a new major feature: occlusion culling.

Occlusion culling determines which objects are visible from a certain viewpoint. It greatly reduces the number of objects that need to be drawn per frame. In the following test the number of objects is reduced from a few thousand to a few hundred objects.

This new feature is available for the XNA Framework (desktop, Xbox 360) and MonoGame.

By DigitalRune Team on Monday, December 23, 2013

This article provides background information for the ParallaxMappingSample of the DigitalRune Engine.

Materials in DigitalRune Graphics

The DigitalRune Engine provides several predefined materials for normal mapping, mesh skinning, transparent objects, alpha-cutout, matcaps, etc. (see Predefined Effects[1]). However, you are not limited to these materials. You can create your own material effects.

Materials in DigitalRune Graphics are fully data-driven. That means, you only need to write a new DirectX effect (.fx file) and add a new material definition (*.drmat file), which can then be assigned to any mesh.

You do not need to write special C# code to use the material. To learn how to create your own materials, just get the HLSL code of the predefined materials from the Premium Downloads and use them as a starting point.

C# code is only needed if you want to dynamically change effect parameters at runtime. Thanks to our effect binding system (see Effects and Effect Bindings [2]), this is a lot easier than in most game engines. The use of effect bindings is demonstrated in several of the DigitalRune Engine samples.

Parallax Mapping Sample

The new ParallaxMappingSample shows how to add a new materials that support Parallax Mapping with Offset Limiting and Parallax Occlusion Mapping. The sample C# and HLSL code is included with the DigitalRune Engine. (Only available in Premium Downloads.)

Parallax mapping is an enhancement of normal mapping. While normal mapping makes bumps and dents appear under lighting, parallax mapping gives the material the appearance of depth – as shown in the following screenshots:

Parallax Mapping Sample

By DigitalRune Team on Wednesday, December 18, 2013

The latest DigitalRune Engine release contains the new RefractionSample, which demonstrates a few interesting aspects:

  • How to extend the default MeshRenderer class.
  • How to create a refraction effect.
  • How to create a chromatic dispersion effect.
  • How to create fake reflections.

This article provides additional background information and explanations.

Refraction-Sample

By DigitalRune Team on Monday, December 16, 2013

This article provides background information for the EnvironmentLightSample of the DigitalRune Engine. The EnvironmentLightSample shows how to implement a new light type which adds environment map reflections to all materials in the scene.

Motivation

Our old deferred rendering samples show various materials, but none of them uses environment mapping [1] to show reflections. Time to change this and make things shiny!

Screenshots

Here are some screenshots from the new EnvironmentLightSample. Several objects show reflections. (The reflected environment map is the same as the sky box.)

Enviroment-Reflections-1

By DigitalRune Team on Thursday, December 05, 2013

The DigitalRune Engine supports procedural cloud layers, as shown here: Cloud Layer.

In this article we discuss an alternative, much simpler technique for cloud rendering:

  • An artist creates a cloud texture.
  • This texture is applied to transparent quads/billboards in the sky.
  • A custom shader fakes cloud lighting.

The result looks like this:

Cloud-Quads-1