MonoGame/MonoGame · error · InvalidContentException

The skinned mesh "{geometry.Parent?.Name}" contains geometry

Error message

The skinned mesh "{geometry.Parent?.Name}" contains geometry without any vertex weights.

What it means

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.

Source

Thrown at MonoGame.Framework.Content.Pipeline/Processors/ModelProcessor.cs:303

                {
                    if (!geometry.Vertices.Channels.Contains(VertexChannelNames.TextureCoordinate(i)))
                        throw new InvalidContentException(
                            $"The mesh \"{geometry.Parent?.Name}\", using {MaterialProcessor.GetDefaultEffect(material)}, contains geometry that is missing texture coordinates for channel {i}.",
                            _identity);
                }

                // Do we need to enable vertex color?
                if (geometry.Vertices.Channels.Contains(VertexChannelNames.Color(0)))
                    geometry.Material = colorMaterial;
                else
                    geometry.Material = material;

                // Do we need vertex weights?
                if (vertexWeights)
                {
                    var weightsName = VertexChannelNames.EncodeName(VertexElementUsage.BlendWeight, 0);
                    if (!geometry.Vertices.Channels.Contains(weightsName))
                        throw new InvalidContentException($"The skinned mesh \"{geometry.Parent?.Name}\" contains geometry without any vertex weights.", _identity);
                }
            }
        }

        /// <summary />
        protected virtual void ProcessVertexChannel(GeometryContent geometry,
                                                    int vertexChannelIndex,
                                                    ContentProcessorContext context)
        {
            var channel = geometry.Vertices.Channels[vertexChannelIndex];

            // TODO: According to docs, channels with VertexElementUsage.Color -> Color

            // Channels[VertexChannelNames.Weights] -> { Byte4 boneIndices, Color boneWeights }
            if (channel.Name.StartsWith(VertexChannelNames.Weights()))
                ProcessWeightsChannel(geometry, vertexChannelIndex, _identity);
        }

View on GitHub (pinned to 1d71bbd0ff)

Solutions

  1. Ensure the mesh is properly skinned/rigged to a skeleton in the DCC tool before export.
  2. Use a non-skinned material type (BasicMaterialContent) if the mesh is static.
  3. Check the FBX export settings to ensure 'Animation' and 'Deformation' / skin data is included.
  4. Override ModelProcessor to use a non-skinned material for meshes that lack weights.

Example fix

// In processor config, switch material type
// before — expects skinning
processor: ModelProcessor
DefaultEffect: SkinnedEffect
// after — static mesh
processor: ModelProcessor
DefaultEffect: BasicEffect
Defensive patterns

Strategy: validation

Validate before calling

// Check for vertex weights before processing skinned meshes
if (material is SkinnedMaterialContent)
{
    foreach (var geom in geometries)
    {
        var weightsName = VertexChannelNames.EncodeName(VertexElementUsage.BlendWeight, 0);
        if (!geom.Vertices.Channels.Contains(weightsName))
            throw new InvalidOperationException($"Skinned mesh '{geom.Parent?.Name}' has no vertex weights.");
    }
}

Try / catch

try
{
    context.Convert<NodeContent, ModelContent>(node, new ModelProcessor { DefaultEffect = MaterialProcessorDefaultEffect.SkinnedEffect });
}
catch (InvalidContentException ex) when (ex.Message.Contains("vertex weights"))
{
    context.Logger.LogImportantMessage("Mesh lacks skinning weights. Use BasicEffect instead.");
    throw;
}

Prevention

When it happens

Trigger: 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)).

Common situations: 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.

Related errors


AI-assisted analysis of MonoGame/MonoGame@1d71bbd0ff (2026-08-13). Data as JSON: /api/errors/bfa4ba09b6263e47. Report an issue: GitHub.