protected void ProcessNode(Node node)
 {
 }
        /// <summary>
        /// Recursively converts a node, all of its children and all of its meshes
        /// </summary>
        void ProcessNode(Node node, Matrix parentGlobalRotation)
        {
            // mirror all base vectors at the local Z axis
            node.Transformation.M31 = -node.Transformation.M31;
            node.Transformation.M32 = -node.Transformation.M32;
            node.Transformation.M33 = -node.Transformation.M33;
            node.Transformation.M34 = -node.Transformation.M34;

            // now invert the Z axis again to keep the matrix determinant positive.
            // The local meshes will be inverted accordingly so that the result should look just fine again.
            node.Transformation.M13 = -node.Transformation.M13;
            node.Transformation.M23 = -node.Transformation.M23;
            node.Transformation.M33 = -node.Transformation.M33;
            node.Transformation.M43 = -node.Transformation.M43;

            // continue for all children
            foreach (var child in node.Children)
            {
                ProcessNode(child, parentGlobalRotation * node.Transformation);
            }
        }
 protected void FindInstancedMesh(Node node)
 {
 }