Thanks Robert.

In the meantime, I worked around this issue by using a "ProxyCullVisitor"
class and traversing the subgraph with that. It replaces the isCulled()
functionality with a custom frustum used exclusively for culling, while
using the normal camera for creating the StateGraphs. Works well for now.

Glenn Waldron / @glennwaldron


On Mon, Jan 7, 2013 at 9:21 AM, Robert Osfield <robert.osfi...@gmail.com>wrote:

> Hi Glenn,
>
> Just a quick reply as I'm just back from holiday season and rather
> cold on techy topics.  Currently the OSG's culling is based around
> testing a internal nodes bounding sphere against the view frustum
> polytope and the geometry leaves bounding boxes.   With shaders having
> the ability to move geometry around it obvious introduces a "where is
> it now?" issue for any of the present bounding volume code that tries
> to handle geometry with such shaders.  Currently the OSG has an
> osg::Drawable::setInitialBound(..) feature but this is really crappy
> and has long deserved a complete overhaul in the face of widespread
> usage of shaders.
>
> I don't believe tackling this issue by just providing some for of
> culling callback/control would be sufficient as it's not only culling
> traversals that need to test the whereabouts of geometry in the scene
> graph.  What exactly a general purpose solution might be I can't say
> without putting some more time thinking about the topic.  A good first
> step would be to improve the bounding box controls in osg::Drawable so
> it's better at managing user set bounding volumes.
>
> Robert.
>
> On 4 January 2013 15:44, Glenn Waldron <gwald...@gmail.com> wrote:
> > Robert et al.,
> >
> > The topic of culling vis-a-vis shaders has come up a few times recently.
> >
> > The issue is: if you transform or emit vertices in a vertex, geometry, or
> > tessellation shader, the new position information is not available to
> OSG's
> > culling mechanism. This may result in visible geometry being culled.
> >
> > One approach is to artificially inflate the bounds of your geometry. Not
> > very elegant. Cull callbacks won't help, since the visibility logic is in
> > CullStack::isCulled() which executes before any cull callbacks.
> >
> > What I would like to do is use a custom frustum for culling. In my app I
> > have just such a frustum, and I tried applying it the the current
> > osg::CullingSet; but that CullingSet is automatically kept in sync with
> the
> > Camera frustum and my changes get overwritten.
> >
> > I think we need a general-purpose solution, since this topic is bound to
> > come up again. Here are a couple ideas:
> >
> > 1) Allow the user to customize CullStack::isCulled() in some way, either
> > with a callback, or by making the isCulled() variants virtual.
> >
> > 2) Allow the user to apply a custom visibility frustum to the
> > osg::CullingSet. (Calling CullingSet::setFrustum works, but gets
> > automatically overwritten when there are subsequent Transforms in the
> scene
> > graph.)
> >
> > I look forward to your thoughts.
> >
> >
> > Glenn Waldron / @glennwaldron / osgEarth.org
> >
> > _______________________________________________
> > osg-users mailing list
> > osg-users@lists.openscenegraph.org
> >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >
> _______________________________________________
> osg-users mailing list
> osg-users@lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to