Hi Wyatt,

When I have one or two objects, say the size of a car, or truck, only.  The
shadow map looks correct. But when I add my terrain which is approximately x
= 5100 by y = 5100, I no longer see the car/truck shadows on the shadow map.

Similarly, if I increase the length and width of the bottom box in the
osgShadow example, I no longer see the other objects in the shadow map.

I assume I am running into some shadow map texture resolution limit or
something.  What is going on?

Yep, Most probable. osgShadow::ShadowMap can't help you there, but there are a few things you can do to mitigate the problem.

* First, don't set your terrain to cast shadow (if it's mostly flat you'd never see its shadow anyways) * Second, make sure all the objects you set to cast shadow are in a small area. If an object leaves the area of focus, remove its cast shadow bit from its node mask. * Third, increase the shadow map resolution as much as you can (on some cards, 4096x4096 is the biggest you can go, on some others it's 2048x2048)

But if you want better results, switch to one of the ViewDependentShadow techniques that are in OSG 2.8+ (for example osgShadow::LightSpacePerspectiveShadowMap). These will consider the camera's view volume and only calculate shadows for this area automatically, so if you're looking at a relatively small portion of your scene it will give much better results. Though they have some artifacts in some situations too... Nothing is perfect, it's always a trade-off.

My shadow map is looking mostly correct now after making changes to light
type, position etc.  However shadows are not appearing in the final
rendering.  The app I am trying to add shadow mapping to uses textures bound
to tex units 0-3.  I noticed in the ShadowMap class there were methods for
setting the texture unit and wondered if this possibly   why I am not seeing
the shadows.  That is, is my use of tex units 0-3 conflicting with
ShadowMaps use of texture units and should I reassign one or the others
texture units?

Most probably, ShadowMap uses texture unit 1 by default for the shadow map. Call osgShadow::ShadowMap::setTextureUnit() to set the texture unit you want the shadow map to use (for example 4, or 7 to give yourself some breathing room), and use that same texture unit in your shadow shaders when you get to the point of generating texture coordinates and doing the shadow lookup too. There's a similar method in osgShadow::LightSpacePerspectiveShadowMap.

Hope this helps,

J-S
--
______________________________________________________
Jean-Sebastien Guay    jean-sebastien.g...@cm-labs.com
                               http://www.cm-labs.com/
                        http://whitestar02.webhop.org/
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to