One more thing... with 600 animated characters of several types consider
using hardware instancing.
It will greatly reduce the number of draw calls. I see you already have
several thousand draw calls in your scene.

Christian



2014-11-20 10:52 GMT+01:00 Christian Buchner <[email protected]>:

> Hi.
>
> a) try playing with activating setUseDisplayLists(false);
> setUseVertexBufferObjects(true) on all your geometry objects.  It really
> makes a big difference on Intel chips - not so much on nVidia.
> b) Reduce the geometry complexity of the stadium. The geometry is rendered
> twice because of your shadow casting - this is why reducing the
> vertex+triangle count will likely have a big impact.
> c) are you really sure the figure animation isn't done entirely by the
> CPU? there is just one osg demo "osganimationhardware" that uses a Vertex
> shader to animate a very small number of joints. All other demos I am aware
> of use CPU based meddling with transformation matrices.
> d) the 8500GT is a really old chip. The modern Intel offerings (HD
> graphics of the latest core i series) might already be faster.
> e) Aren't most of your characters sitting in the stadium ranks? You could
> replace these with animated billboards.
>
>
>
> 2014-11-20 9:52 GMT+01:00 Aitor Ardanza <[email protected]>:
>
>> Hi,
>>
>> I'm having problems to increase the frame rate on this scene. I haven't
>> experience with very complex scenes, so I need your advice.
>>
>> This is the scene:
>> [Image: http://s30.postimg.org/lwm83ipm9/Foot_Ball_Scene.jpg ]
>> For more detailed image the file is atached to the post
>>
>> The stadium could be very huge. I can start reducing the number of
>> poligons here...
>>
>> I load 600 animated characters with very low poligons and less than 100
>> joints. These are actually 16 different models, and multiplied copying them
>> as follows:
>>
>> Code:
>>
>> int v = getRandomValueinRange(characters.size()); // 16 characters
>> osg::ref_ptr<osg::Group> c = characters[v];
>> osg::MatrixTransform* tr = new osg::MatrixTransform;
>> tr->setMatrix(osg::Matrix::translate( 80.0 * (i - xChar * .5),
>> 100+(100.0 * j), -600+(-200 * j)));
>> tr->addChild(c.get());
>>
>>
>>
>> And are animated with hardware rigid geometry, like osg demo:
>>
>> Code:
>>
>> osgAnimation::AnimationManagerBase* animationManager =
>> dynamic_cast<osgAnimation::AnimationManagerBase*>(p->getUpdateCallback());
>>
>> osgAnimation::BasicAnimationManager* anim =
>> dynamic_cast<osgAnimation::BasicAnimationManager*>(animationManager);
>> const osgAnimation::AnimationList& list =
>> animationManager->getAnimationList();
>> if(list.size()>0)
>> anim->playAnimation(list[0].get());
>>
>> SetupRigGeometry switcher(true);
>> p->accept(switcher);
>> characters.push_back(p);
>>
>>
>>
>>
>> Shodows are activated too. Are configured like ViewDependentShadowMap:
>>
>> Code:
>>
>> osg::ref_ptr<osgShadow::ViewDependentShadowMap> vdsm = new
>> osgShadow::ViewDependentShadowMap;
>> m_shadowRoot = new osgShadow::ShadowedScene;
>> m_shadowRoot->setShadowTechnique( vdsm.get() );
>> m_shadowRoot->setReceivesShadowTraversalMask( rcvShadowMask );
>> m_shadowRoot->setCastsShadowTraversalMask( castShadowMask );
>>
>>
>>
>>
>> The culling mode is active as VIEW_FRUSTUM_SIDES_CULLING, and I don't
>> know what more I can tell you...
>>
>> My computer is not very powerful: Intel Core2 Quad Q8400, 4GB RAM and
>> GForce 8500 GT.
>>
>> Any suggestions to improve the performance and visual appearance are
>> welcome.
>>
>> Thank you!
>>
>> Cheers,
>> Aitor
>>
>> ------------------
>> Read this topic online here:
>> http://forum.openscenegraph.org/viewtopic.php?p=61715#61715
>>
>>
>>
>>
>> _______________________________________________
>> osg-users mailing list
>> [email protected]
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>>
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to