Blog

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

We have made several improvements to our 3D character controller, which we want to discuss in this post. (Reminder: A character controller is the game module that computes the movement of a player character, including walking, jumping, climbing, etc.)

Following video shows the new character controllers in action. (The code is included in the DigitalRune Physics Bundle).

Changes & Source Code

By DigitalRune Team on Monday, April 11, 2011

We have recently added 3D vehicle physics to our DigitalRune Physics library. In this post we will explain how the car physics works, so that you can either create your own car physics, or you can understand and tune the car physics that comes with our libraries.

Our Goal

Let’s have a look at what we want to achieve. Following Vehicle Sample is an XNA example project that is included in the DigitalRune Physics Bundle:

Requirements

By DigitalRune Team on Wednesday, March 23, 2011

The .NET Framework 4 contains the Task Parallel Library (TPL). It introduces the concept of tasks. Tasks represent asynchronous operations that can be executed concurrently. Developers no longer have to manage threads or thread pool work items directly. The library provides a higher-level API for writing multi-threaded application or games. The only negative thing we can say about the TPL is that it is not supported on the .NET Compact Framework and is therefore not available on the Xbox 360 (or the WP7).

When we added multithreading support for our libraries, we looked for an easy-to-use, cross-platform threading library. After evaluating a lot of solutions we found the ParallelTasks library on CodePlex. The library is a lightweight replacement for the TPL. It offers all relevant features such as …

By DigitalRune Team on Tuesday, March 15, 2011

image_thumb2The new version of the DigitalRune Helper Library (DigitalRune.dll, which is part of DigitalRune Physics Bundle) has not 1 but 2 profiler classes. The “simple profiler” class was introduced in the previous blog post. In this blog post, we talk about the second profiler, which is a “hierarchical profiler”. It was inspired by the article Real-Time Hierarchical Profiling (Game Programming Gems 3).

Do we really need another profiler class? – Yes, really! This class has slightly different goals. The main goal is to measure the timing of nested method calls. This is extremely helpful in many applications – in particular if you need to optimize your game loop. An important difference between the simple profiler and the hierarchical profiler is that the hierarchical profiler does not work across multiple threads. That’s why we still need the simple profiler. The simple profiler can be used to collect values and to profile code in multi-threaded scenarios.

By DigitalRune Team on Thursday, March 10, 2011

Profiler-Class-DiagramHere is a short description of a new Profiler class that comes with the new release of the DigitalRune Helper Library (DigitalRune.dll, which is part of DigitalRune Physics Bundle).

Simple Profiler Features

The Profiler class provides following features:

  • Measure code execution time.
  • Collect interesting values, like “How many collisions happened in this frame?”, “How many iterations did this algorithm make?”, etc.
  • Compute minimum, average and maximum values.
  • Thread-safety.
  • Do not influence performance in release builds – only in profiling builds of the game.

Overview

By DigitalRune Team on Friday, March 04, 2011

In the previous post I wrote about the resource pool implementation offered by the DigitalRune Helper library. In this post I will show the pattern we use to make objects reusable.

When we start to design a class library we usually don’t care about resource pooling. Only when the major parts of the API and the internal algorithms are done we start to measure performance and profile memory usage. When we started optimizing DigitalRune Geometry and Physics we realized that some objects needed to be pooled in order to avoid garbage on the Xbox 360. So a few types had to be made reusable.

The following pattern has proven very handy for turning a normal object into a pooled object.

By DigitalRune Team on Wednesday, March 02, 2011

By now, we probably all know that the latency of the garbage collector on Xbox 360 and Windows Phone 7 can be a problem. One solution is to avoid frequent memory allocations by using resource pools (or free-lists).

This blog post provides some information about the resource pool implementation provided by the DigitalRune libraries.

By DigitalRune Team on Wednesday, February 23, 2011

We are Windows Phone 7 owners, have a 3D game physics library, and play Dungeons & Dragons… That leaves us no choice: We have to make a D20 dice app for the phone!

Here is an early work-in-progress video:

The phone’s accelerometer can be used to shake the dice. This short clip is from an early stage. With the current build, the dice do not leave the viewport anymore and can be dragged or pushed with the finger.

We plan to release the core source code for all DigitalRune Physics customers as free bonus sample after we have released the app.

By DigitalRune Team on Saturday, February 19, 2011

In all XNA games you have to create your own Game class that derives from the Game base class. Here is a pattern in which we use the service provider pattern to create a clear structure for our game class.

In many XNA games and samples the Game class does a lot of stuff and is maybe the most complex class of the application. This makes the source code difficult to understand and hard to re-use. We suggest two things to improve this:

  • Use separate managers for the game’s sub-systems (e.g. graphics, physics, UI, …) and make these sub-systems accessible using the service provider pattern.
  • Separate game-specific game logic and drawing from the Game class.

By DigitalRune Team on Tuesday, February 15, 2011

We have discussed the Service Provider pattern in the last blog post and in this post we will show how to implement a service provider, how the DigitalRune libraries support this pattern, and how to use it in an XNA game.

A Simple Implementation

Implementing a basic service provider with a Dictionary is simple:

Article Collection

A collection of the most useful blog articles can be found here:

Article Collection
(on Documentation page
)