Shadow mapping improvements (I)

Just a brief update to build up some expectations for the next release (whenever that happens).

I’ve been working on improving the shadow mapping technique support in Crimild in order to make it more reliable in production environments. The current implementation had a lot of errors and artifacts and it’s not really usable in big open spaces due to incorrect light frustum calculations.

Here’s a quick look at the new Shadows demo:


This slideshow requires JavaScript.

Only directional and spot lights can cast shadows at the moment, but I’m planning on adding support for point lights shortly. I’m also planning on adding support for cascade shadow maps in a later release.

That’s it. See you later 🙂


Shadow Mapping Demos

I’ve just uploaded some videos showing the shadow support in action. Check them out:



The Lightcycle demo is more interesting due to several factors. First, it’s a Lightcycle from Tron :). Secondly, it shows self shadowing. And third, it display several rendering artifacts that are yet to be solved. Notice how the shadow is shaggy since there is no blur in the map itself. Also, there is a little acne too (mostly in the wheel section).

Shadow Mapping

Legends talk about a guy who wanted to make an engine with support for real-time shadows. And 10 years later, here it is:

Shadow Mapping

Truth be told, this is extremely experimental. I’m using a standard shadow map technique, where a depth map is rendered from the point of view of a light and then a shader determines if a pixel is lit or shaded based on that information.

The demos are not fancy, but I’ll improve that.

Shadow Mapping

Shadows are supported in a new render pass object called “ForwardRenderPass” (yes, there is a “DeferredRenderPass” coming too). A light must explicitly be configure to cast shadows, making this feature completely optional.

On the TODO list is filtering for the shadow map itself (in order to achieve something like a soft shadow), point lights casting shadow cube maps and a lot bug fixing.