Lots of engines have different node types and static meshes usually are separate from animated meshes and so on. I don’t prefer to separate static meshes from animated meshes and generally everything from anything. In my engine, the base and the most important object in the scene structure is the Node type.
Node types have transformation information, volumes, etc. they can have parent and child. in addition, they can carry NodeMember types. any other objects will inherit of NodeMember type. in other words, they are exactly some things similar to components. basically, NodeMembers don’t have a transformation, volumes, etc, and generally geometry. thus They are not counted by the scene manager. node members can describe the behavior of a node in the scene. for instance, a node can have more than one mesh and materials, some rigid bodies and triggers, some AI and script members, and sounds that form this node.
Unlike other systems which have different types of meshes for animated meshes, static meshes, and even breakable meshes; I think that they can be one mesh type and even the animation can be an independent object type. because we want to attach shaders, nodes, and node members to them easily and to draw them in any rendering pipelines unexceptionable. reaching this goal is possible and simple in the engine’s scene structure.
In this regard, I created a NodeMember called Animator. This object is the same as the animation controller which can contain shared animations and animation data. by attaching an Animator to a node, any mesh of node, which has a shader of animation, will obey the animation sequences. also, this member adds a new node as the number of bones to its parent to attach every other thing to any specified bones easily. By detaching this object from the node, all meshes will become default mode and additional nodes will disconnected from the parent.
here are screenshots that show the bones and nodes as red and white cube
model from: http://www.gfx-3d-model.com/2008/07/ninja/