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
- 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.
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
- Only assign SkinnedMaterialContent to meshes that have been properly rigged.
- Use BasicEffect for static meshes.
- Verify FBX export includes skin/deformation data.
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
- Skeleton not found. Meshes that contain a Weights vertex cha
- The mesh "{geometry.Parent?.Name}", using {MaterialProcessor
- Bone name cannot be null.
- Vertex channel "{vertexChannel.Name}" is the wrong type. It
- Bone '{weight.BoneName}' was not found in the skeleton! Skel
AI-assisted analysis of MonoGame/MonoGame@1d71bbd0ff (2026-08-13).
Data as JSON: /api/errors/bfa4ba09b6263e47.
Report an issue: GitHub.