{"record":{"id":"bfa4ba09b6263e47","repo":"MonoGame/MonoGame","slug":"the-skinned-mesh-geometry-parent-name-contain","errorCode":null,"errorMessage":"The skinned mesh \"{geometry.Parent?.Name}\" contains geometry without any vertex weights.","messagePattern":"The skinned mesh \"(.+?)\" contains geometry without any vertex weights\\.","errorType":"exception","errorClass":"InvalidContentException","httpStatus":null,"severity":"error","filePath":"MonoGame.Framework.Content.Pipeline/Processors/ModelProcessor.cs","lineNumber":303,"sourceCode":"                {\n                    if (!geometry.Vertices.Channels.Contains(VertexChannelNames.TextureCoordinate(i)))\n                        throw new InvalidContentException(\n                            $\"The mesh \\\"{geometry.Parent?.Name}\\\", using {MaterialProcessor.GetDefaultEffect(material)}, contains geometry that is missing texture coordinates for channel {i}.\",\n                            _identity);\n                }\n\n                // Do we need to enable vertex color?\n                if (geometry.Vertices.Channels.Contains(VertexChannelNames.Color(0)))\n                    geometry.Material = colorMaterial;\n                else\n                    geometry.Material = material;\n\n                // Do we need vertex weights?\n                if (vertexWeights)\n                {\n                    var weightsName = VertexChannelNames.EncodeName(VertexElementUsage.BlendWeight, 0);\n                    if (!geometry.Vertices.Channels.Contains(weightsName))\n                        throw new InvalidContentException($\"The skinned mesh \\\"{geometry.Parent?.Name}\\\" contains geometry without any vertex weights.\", _identity);\n                }\n            }\n        }\n\n        /// <summary />\n        protected virtual void ProcessVertexChannel(GeometryContent geometry,\n                                                    int vertexChannelIndex,\n                                                    ContentProcessorContext context)\n        {\n            var channel = geometry.Vertices.Channels[vertexChannelIndex];\n\n            // TODO: According to docs, channels with VertexElementUsage.Color -> Color\n\n            // Channels[VertexChannelNames.Weights] -> { Byte4 boneIndices, Color boneWeights }\n            if (channel.Name.StartsWith(VertexChannelNames.Weights()))\n                ProcessWeightsChannel(geometry, vertexChannelIndex, _identity);\n        }\n","sourceCodeStart":285,"sourceCodeEnd":321,"githubUrl":"https://github.com/MonoGame/MonoGame/blob/1d71bbd0ff4071a03caa583aa3bc56b85924a819/MonoGame.Framework.Content.Pipeline/Processors/ModelProcessor.cs#L285-L321","documentation":"Thrown by ModelProcessor.ProcessGeometryUsingMaterial as an InvalidContentException when a mesh uses a SkinnedMaterialContent (which sets vertexWeights=true) but the geometry lacks a BlendWeight vertex channel. Skinned meshes require vertex weights to map vertices to skeleton bones for animation.","triggerScenarios":"Processing a model whose material is or was converted to SkinnedMaterialContent, but the mesh geometry has no vertex weights channel (VertexChannelNames.EncodeName(VertexElementUsage.BlendWeight, 0)).","commonSituations":"The model was exported without skinning/rigging data. The material was incorrectly assigned as SkinnedMaterialContent for a static mesh. The FBX/DAE exporter dropped the weight data during export. The skeleton was not properly bound to the mesh in the DCC tool.","solutions":["Ensure the mesh is properly skinned/rigged to a skeleton in the DCC tool before export.","Use a non-skinned material type (BasicMaterialContent) if the mesh is static.","Check the FBX export settings to ensure 'Animation' and 'Deformation' / skin data is included.","Override ModelProcessor to use a non-skinned material for meshes that lack weights."],"exampleFix":"// In processor config, switch material type\n// before — expects skinning\nprocessor: ModelProcessor\nDefaultEffect: SkinnedEffect\n// after — static mesh\nprocessor: ModelProcessor\nDefaultEffect: BasicEffect","handlingStrategy":"validation","validationCode":"// Check for vertex weights before processing skinned meshes\nif (material is SkinnedMaterialContent)\n{\n    foreach (var geom in geometries)\n    {\n        var weightsName = VertexChannelNames.EncodeName(VertexElementUsage.BlendWeight, 0);\n        if (!geom.Vertices.Channels.Contains(weightsName))\n            throw new InvalidOperationException($\"Skinned mesh '{geom.Parent?.Name}' has no vertex weights.\");\n    }\n}","typeGuard":null,"tryCatchPattern":"try\n{\n    context.Convert<NodeContent, ModelContent>(node, new ModelProcessor { DefaultEffect = MaterialProcessorDefaultEffect.SkinnedEffect });\n}\ncatch (InvalidContentException ex) when (ex.Message.Contains(\"vertex weights\"))\n{\n    context.Logger.LogImportantMessage(\"Mesh lacks skinning weights. Use BasicEffect instead.\");\n    throw;\n}","preventionTips":["Only assign SkinnedMaterialContent to meshes that have been properly rigged.","Use BasicEffect for static meshes.","Verify FBX export includes skin/deformation data."],"tags":["model","content-pipeline","skinning","mesh","vertex-weights","validation","mgcb"],"backgroundTag":null,"analyzedSha":"1d71bbd0ff4071a03caa583aa3bc56b85924a819","analyzedAt":"2026-08-13T17:10:33.625Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}