Code: Select all
Ogre::CompositorShadowNodeDef* shadowNodeDef = mCompositorManager->addShadowNodeDefinition( "MainEngineShadowNode" );
mPssmSplitsCount = 2;
mPssmLambda = 0.95;
int spotlightsShadows = 1;
int textureCount = mPssmSplitsCount + spotlightsShadows;
shadowNodeDef->setNumLocalTextureDefinitions( 1 );
shadowNodeDef->setNumShadowTextureDefinitions( textureCount );
shadowNodeDef->setNumTargetPass( textureCount );
Ogre::TextureDefinitionBase::TextureDefinition *texDef = shadowNodeDef->addTextureDefinition( "shadowAtlas" );
texDef->fsaa = false;
texDef->width = 3072;//1024*textureCount;
texDef->height = 1024;
texDef->formatList.push_back( Ogre::PF_D32_FLOAT );
{
Ogre::ShadowTextureDefinition *shadTexDef = shadowNodeDef->addShadowTextureDefinition( 0, 0, "shadowAtlas", 0, Ogre::Vector2( 0.0, 0.0 ), Ogre::Vector2( 0.33333, 1.0 ), 0 );
shadTexDef->shadowMapTechnique = Ogre::SHADOWMAP_PSSM;
shadTexDef->numSplits = mPssmSplitsCount;
shadTexDef->pssmLambda = mPssmLambda;
}
{
Ogre::ShadowTextureDefinition *shadTexDef = shadowNodeDef->addShadowTextureDefinition( 0, 1, "shadowAtlas", 0, Ogre::Vector2( 0.33333, 0.0 ), Ogre::Vector2( 0.33333, 1.0 ), 0 );
shadTexDef->shadowMapTechnique = Ogre::SHADOWMAP_PSSM;
shadTexDef->numSplits = mPssmSplitsCount;
shadTexDef->pssmLambda = mPssmLambda;
}
{
Ogre::ShadowTextureDefinition *shadTexDef = shadowNodeDef->addShadowTextureDefinition( 1, 0, "shadowAtlas", 0, Ogre::Vector2( 0.666666, 0.0 ), Ogre::Vector2( 0.33333, 1.0 ), 0 );
shadTexDef->shadowMapTechnique = Ogre::SHADOWMAP_FOCUSED;
}
{
Ogre::CompositorTargetDef *targetDef = shadowNodeDef->addTargetPass( "shadowAtlas" );
targetDef->setNumPasses( 2 );
targetDef->setShadowMapSupportedLightTypes( Ogre::Light::LT_DIRECTIONAL );
//Clear
Ogre::CompositorPassDef *passClearDef = targetDef->addPass( Ogre::PASS_CLEAR );
((Ogre::CompositorPassClearDef*)(passClearDef))->mColourValue = Ogre::ColourValue::White;
passClearDef->mShadowMapIdx = 0;
passClearDef->mIncludeOverlays = false;
//Scene
Ogre::CompositorPassDef *passSceneDef = targetDef->addPass( Ogre::PASS_SCENE );
passSceneDef->mShadowMapIdx = 0;
passSceneDef->mIncludeOverlays = false;
((Ogre::CompositorPassSceneDef*)(passSceneDef))->mUpdateLodLists = false;
}
{
Ogre::CompositorTargetDef *targetDef = shadowNodeDef->addTargetPass( "shadowAtlas" );
targetDef->setNumPasses( 2 );
targetDef->setShadowMapSupportedLightTypes( Ogre::Light::LT_DIRECTIONAL );
//Clear
Ogre::CompositorPassDef *passClearDef = targetDef->addPass( Ogre::PASS_CLEAR );
((Ogre::CompositorPassClearDef*)(passClearDef))->mColourValue = Ogre::ColourValue::White;
passClearDef->mShadowMapIdx = 1;
passClearDef->mIncludeOverlays = false;
//Scene
Ogre::CompositorPassDef *passSceneDef = targetDef->addPass( Ogre::PASS_SCENE );
passSceneDef->mShadowMapIdx = 1;
passSceneDef->mIncludeOverlays = false;
((Ogre::CompositorPassSceneDef*)(passSceneDef))->mUpdateLodLists = false;
}
{
Ogre::CompositorTargetDef *targetDef = shadowNodeDef->addTargetPass( "shadowAtlas" );
targetDef->setNumPasses( 2 );
targetDef->setShadowMapSupportedLightTypes( Ogre::Light::LT_SPOTLIGHT );
//Clear
Ogre::CompositorPassDef *passClearDef = targetDef->addPass( Ogre::PASS_CLEAR );
((Ogre::CompositorPassClearDef*)(passClearDef))->mColourValue = Ogre::ColourValue::White;
passClearDef->mShadowMapIdx = 2;
passClearDef->mIncludeOverlays = false;
//Scene
Ogre::CompositorPassDef *passSceneDef = targetDef->addPass( Ogre::PASS_SCENE );
passSceneDef->mShadowMapIdx = 2;
passSceneDef->mIncludeOverlays = false;
((Ogre::CompositorPassSceneDef*)(passSceneDef))->mUpdateLodLists = false;
}but the spotlight shadow isn't working...
using the same parameters but by script, it works
Code: Select all
compositor_node_shadow MainEngineShadowNodeTEST
{
technique pssm
texture shadowAtlas 3072 1024 PF_D32_FLOAT no_fsaa
num_splits 2
pssm_lambda 0.95
shadow_map 0 shadowAtlas uv 0.0 0.0 0.33333 1.0 light 0 split 0
shadow_map 1 shadowAtlas uv 0.333333 0.0 0.333333 1.0 light 0 split 1
technique focused
shadow_map 2 shadowAtlas uv 0.666666 0.0 0.33333 1.0 light 1
target shadowAtlas
{
pass clear
{
colour_value 1 1 1 1
}
}
shadow_map_target_type directional
{
shadow_map 0 1
{
pass render_scene
{
}
}
}
shadow_map_target_type directional spot
{
shadow_map 2
{
pass render_scene
{
}
}
}
}What am I missing?
Does the creation order of lights/workspace could be the problem?
thank you!!

