I've always disliked the user having to do this, hence the NodeFactory idea.
Kev, I agree with you in this specific case. But for more generic solution the traverser should [OK, may] be also good. In this case there is no need to rely on the source of the model, etc.
This is more conceptual than implementation question. I think both approaches may/should easily co-exist in the same system. We can try to make it easier to traverse scene graph by providing unified traverser and implementing a Visitor design pattern, so it will be easy or even trivial to implement such functionality in the apps.
I agree that NodeFactory idea gives much more control over the scene loading process, but it does not void the later scene traversals that may be used, say, for subtree-level scenegraph changes.
Am I able to access the Shape3D that is the model in the 3ds loader? Since the TDSModel extends branchgroup it doesn't have a setAppearance option.
You still should be able to get list of child nodes with getChildren() and then test instanceof Shape3D. Again, if specified child instanceof Group you call traversing recursively, so finally you will get access to all children for root BranchGroup.