Sorry it took me so long to respond. Very shortly after this post, my hard drive crashed. Sadly, I was unable to recover anything from the drive and did not have a recent backup. I spent most of this past week rebuilding my personal and work lives because of it

I'll have a look at it when I get some time. Before your response, I assumed you had a specific reason for that amount of flexibility. I was thinking of a more specific approach that should hopefully perform a bit faster at the expense of a tiny bit of flexibility. Part of the idea is to move the decisions from the visit (implementers of the interface) up to the visitor (the classes doing the traversal). This should cull the number of visits through code that cannot be inlined. Right now, non-inlined code has to visit then decide to do nothing.
Is there a way for me to query
- if a node is within range of the camera?
- only the children of (LOD) switch groups that are currently visible?
I did not see any branches in the existing code to specifically do either of these. If it is possible, it would obviously be a huge savings. Those queries make sense for my code for short lived traversals -- only a few frames. There should probably be a full traversal option to accommodate the existing functionality that focuses on things like updating materials.