The CharacterController of the DigitalRune.Geometry samples ("CharacterControllerSample") is a simple educational example and it displays jittering and can tunnel through thin objects.
The CharacterController of DigitalRune.Physics is a lot more stable and several times faster.
Both version were created before CCD was implemented - so they do not make use of CCD. Both are "kinematic character controllers" and not "dynamic character controllers" - which means they work on the collision detection level only and do not know about the RigidBody class. Setting RigidBody.CcdEnabled does not help in this case.
Usually, the DigitalRune.Physics CharacterController can tunnel through thin objects if it moves more than its capsule radius in a single step. In practical cases (< 10 m/s speed and a 60 fps game) I haven't found a case where it tunnels through a mesh.
Making the mesh double-sided could make the problem worse because:
With a one-sided mesh the collision detection can only find contacts with normal vectors that push the character out of the mesh. If the character tunnels through, it can be moved back.
With a two-sided mesh the collision detection can find contacts with normals that push the character through the mesh and prevent it from going back to the allowed side.
Here are a few tips:
- Use the CharacterController of DigitalRune.Physics (licensees can get the source code for free).
- Avoid very thin capsules. A capsule with a larger radius is more stable.
- Avoid unnatural high character speeds. Or try to make several smaller steps instead of one large step (call characterController.Move() 2 times with a smaller distance instead of 1 time with a large distance).
If the problem persists, maybe you can create a small sample in the DigitalRune.Physics PhysicsSample project that demonstrates problem.