Are decent shadows really THAT expensive?

Dead Space had very good lighting and shadowing imo.

The only shadowing artefact I noticed was the jumpy shadows on Isaac's back, as you mentioned. That and some harder edged shadows around the environment.

Buy yeah, self-shadowing on characters is where shadow maps always seem to fall apart. See Mass Effect, Gears, etc..

I'm thinking it won't really be solved till next gen...

I agree, I loved the shadows in dead space. The game runs so smoothly and the graphics just 'fit'... there are no obvious rough edges. As already mentioned, what's up with the shadows in Mass Effects and a few other games, where they appear to be made up of dots and look TERRIBLE. Lots of flickering and jumping, they make the image look worse imo. The best shadows are the ones you hardly notice, that just give the game a much more realistic look that you can't quite put your finger on.
 
Strangely, i found Dead Space's shadows to be the worse in any game i've played on Xbox360 or PS3. There are instances when the shadow for the head of the character for example, consists of one big square (pixel), with a total shadow resolution of something along the lines of 128 x 128 if not lower.
I have never seen such bad shadows in any other game.
 
Strangely, i found Dead Space's shadows to be the worse in any game i've played on Xbox360 or PS3. There are instances when the shadow for the head of the character for example, consists of one big square (pixel), with a total shadow resolution of something along the lines of 128 x 128 if not lower.
I have never seen such bad shadows in any other game.

Agreed, I didn't think it could get worse than GTA IV 'till I saw this game. Strange that others think it looks good when to me and you it looks distractingly bad. Even my bother who could care less about graphics mentioned how the shadows were "weird". :???:
 
I have been optimizing our game and the engine a lot lately, and currently 75% of our render time goes to real time shadow rendering: shadow depth map rendering (from avg 6-8 light sources per frame), translucent shadow projector rendering (semi transparent object and particle shadows), shadow map blurring (soft shadows), shadow map sampling (each rendered pixel * lights affecting that pixel) or other shadow related logic.

Currently our game runs at average 60-70 fps. Without shadows it runs at around 250 fps.

Realistic good quality dynamic soft shadows cast from all light sources (and all objects) cost considerable amount of performance.
 
Strangely, i found Dead Space's shadows to be the worse in any game i've played on Xbox360 or PS3. There are instances when the shadow for the head of the character for example, consists of one big square (pixel), with a total shadow resolution of something along the lines of 128 x 128 if not lower.
I have never seen such bad shadows in any other game.

Shadowmap resolution in Dead Space seems to be dependent on an object's proximity to a light source, at least in the console versions. Stand real close to a light source or pick something up with kinesis and look at the shadow for the object you picked up.
 
Shadowmap resolution in Dead Space seems to be dependent on an object's proximity to a light source, at least in the console versions.

Not quite how I'd describe it... as it implies a varying resolution to the shadow map, which is false because you can clearly see the effects of a fixed resolution texture and a variation in area over which the shadow texture is projected. Rather, the resolution is not good enough for certain distances.

Anyways, that's just how shadow mapping works as an image-based technique. It's no different (in concept) from upscaling a game with poor filtering and seeing large jagged polygon edges.
 
I have been optimizing our game and the engine a lot lately, and currently 75% of our render time goes to real time shadow rendering: shadow depth map rendering (from avg 6-8 light sources per frame), translucent shadow projector rendering (semi transparent object and particle shadows), shadow map blurring (soft shadows), shadow map sampling (each rendered pixel * lights affecting that pixel) or other shadow related logic.

Wow, 75% is huge amount of time! I'm guessing the bulk of the time is spent on vert related processing due to the 6-8 lights, have you guys tried massively simplified proxy meshes and position only vert data streams for the shadow passes? If you are hit by fill rate, have 16bit depth buffers helped at all, or is fill not the main hit? I'm curious where your main bottleneck is.
 
Wow, 75% is huge amount of time! I'm guessing the bulk of the time is spent on vert related processing due to the 6-8 lights, have you guys tried massively simplified proxy meshes and position only vert data streams for the shadow passes? If you are hit by fill rate, have 16bit depth buffers helped at all, or is fill not the main hit? I'm curious where your main bottleneck is.

NOTE:
This is slightly old info, as I have optimized our shadowing system a bit lately (implemented Exponential Shadow Maps and started to utilize the free 4xMSAA). See the last post in this thread for more info: http://forum.beyond3d.com/showthread.php?t=47528

---


The platform we use does not support 16 bit depth buffers (only 32 bit ones). We are rendering to D24FS8 depth buffer to get the benefit of double fill rate z-only rendering. We are mostly fill rate bound during the shadow map rendering. The shadow map vertex shader is very simple (just transform), there is no pixel shader (no color writes) and the shadow object vertex format is optimized for bandwidth (16 bit per channel position only). All the shadow meshes are simplified (hand made by artists).

In addition to depth rendering, we are rendering translucent light projectors (modulate rgb color filters) to our shadow maps. We use R8G8B8A8 textures for the color filters (the platform does not support R5G6B5 render targets). The depth buffer (and hi-z) of the shadow map is used to depth cull the projectors behind first geometry intersection properly. With light projectors we get smooth semi transparent soft shadows from windows, fences, particles, etc.

Basically this is what we do every frame:
1. Render shadows for 3 layered directional PSSM (3092x1024 texture with 3 layers in it) - Fill rate bound (depth only rendeiring to double fill rate)
2. Render translucent light projectors for the 3 layered directional PSSM - Fill rate bound
3. Resolve the shadow maps one at a time from the 1024x1024 render target to a single 3092x1024 texture - Fill rate limited
4. Render shadows for around 6-8 spot lights (1024x1024 to 256x256 resolution depending on light screen space bounding area) - Fill rate bound (depth only rendeiring to double fill rate)
5. Render translucent light projectors for the spotlight - Fill rate bound
6. Resolve the shadow maps from render target to texture - Fill rate limited
7. Calculate the shadow map position and sample the single combined PSSM texture (one fetch and transform) and around 2-3 spot lights for each pixel (2-3 texture fetches and transforms). This adds both vertex shader and pixel shader cost, but not by much as our material system is very complex and we are pretty much evenly ALU and TEX bound.
 
Last edited by a moderator:
Back
Top