A while ago I asked the list why the StateVisitor::Optimizer was not working 
and why I had very poor optimizing results.
I was prompted by more experienced user to investigate the source myself....
This is what I did and I found a few tricks which will make the optimizer work 
very well.
This holds especially true if you are building you own geometry of do your own 
loader plugin.

1) Flag the DataVariance of all Attributes and osg::Objects as STATIC unless 
you want otherwise. I noticed that at least 80% of the optimizer classes
skip states for optimization if the Attributes are not flagged as STATIC. So 
"NO STATIC NO OPTIMIZATION".

2) Especially for the StateVisitor::Optimizer class there is also something 
else to consider.  This Optimizer class should merge all the 
similar StateSets, but in my example even though the StateSets had exactly the 
same attributes and values they never go merged.
Looking further into that matter I found out that the StateVisitor does a 
shallow compare when checking two StateSets for equality,
this means that it looks if the pointers and not their contents are the same. 
Although OSG supports StateSets compares which take into account the contents 
of the Attributes 
there is no way to pass this flag into the StateVisitor::Optimizer class. So 
there are two solutions if you want it to work
a) Mess with the source
b) When creating the StateSets take care to attach instanced Attributes whever 
possible, by reusing the same pointer if the StateSets Attributes have the same 
values.

In general look up yourself the source whenever the optimizer is not working as 
expected. Also dont always use the DEFAULT_OPTIMIZATION flags there are many 
more flags 
which can be used to produce better results. Like the MERGE_GEOMETRY or 
TRISTRIP_GEOMETRY flag. Also sometimes running 2 consecutive optimizer passes 
with the same flags produces better results than only one pass. Experimenting 
is the key.

Dimi 


      
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to