{"record":{"id":"a8510d397cf61cee","repo":"FyroxEngine/Fyrox","slug":"more-than-two-geoms-with-blend-shapes","errorCode":null,"errorMessage":"More than two geoms with blend shapes?","messagePattern":"More than two geoms with blend shapes\\?","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"fyrox-impl/src/resource/fbx/mod.rs","lineNumber":513,"sourceCode":"        * Matrix4::new_nonuniform_scaling(&model.geometric_scale);\n\n    let mut temp_vertices = Vec::new();\n    let mut triangles = Vec::new();\n\n    // Array for triangulation needs, it will contain triangle definitions for\n    // triangulated polygon.\n    let mut face_triangles = Vec::new();\n\n    let mut mesh_surfaces = Vec::new();\n    let mut mesh_blend_shapes = Vec::new();\n\n    for &geom_handle in &model.geoms {\n        let geom = fbx_scene.get(geom_handle).as_mesh_geometry()?;\n        let skin_data = geom.get_skin_data(fbx_scene)?;\n        let blend_shapes = geom.collect_blend_shapes_refs(fbx_scene)?;\n\n        if !mesh_blend_shapes.is_empty() {\n            Log::warn(\"More than two geoms with blend shapes?\");\n        }\n        mesh_blend_shapes = blend_shapes\n            .iter()\n            .map(|bs| BlendShape {\n                weight: bs.deform_percent,\n                name: bs.name.clone(),\n            })\n            .collect();\n\n        let mut data_set = vec![\n            FbxSurfaceData {\n                base_mesh_builder: if geom.deformers.is_empty() {\n                    FbxMeshBuilder::Static(RawMeshBuilder::new(1024, 1024))\n                } else {\n                    FbxMeshBuilder::Animated(RawMeshBuilder::new(1024, 1024))\n                },\n                blend_shapes: blend_shapes\n                    .iter()","sourceCodeStart":495,"sourceCodeEnd":531,"githubUrl":"https://github.com/FyroxEngine/Fyrox/blob/76c91aad8eca488ce527b1af707be8b3b24ad72d/fyrox-impl/src/resource/fbx/mod.rs#L495-L531","documentation":"When converting an FBX model to a Fyrox mesh, blend shape data is collected per geometry. The converter only supports blend shapes coming from a single geometry per model; if a second (or later) geom also has blend shapes, the previous set is overwritten and this warning is logged, meaning some blend shape data will be lost.","triggerScenarios":"FBX import (FbxModel resource conversion, convert_mesh) where more than one mesh geometry attached to a model references blend shape deformers.","commonSituations":"DCC exports (Maya/Blender) that split one mesh into multiple geometries each carrying morph targets; FBX files merged from multiple sculpted meshes.","solutions":["In the DCC, merge the geometries into a single mesh before FBX export so blend shapes live on one geom","Remove blend shapes from all but one geometry of the model","Split the model into separate Fyrox meshes if multiple blend-shape meshes are truly needed"],"exampleFix":"// before: model with geom A + geom B, both with blend shapes\n// after: in Blender/Maya join geoms into one mesh, keep all shape keys there, re-export FBX","handlingStrategy":"fallback","validationCode":"// pre-import check on the FBX\nlet geoms_with_bs: Vec<_> = model.geoms.iter()\n    .filter(|g| fbx_scene.get(**g).as_mesh_geometry().unwrap().collect_blend_shapes_refs(fbx_scene).map_or(false, |b| !b.is_empty()))\n    .collect();\ndebug_assert!(geoms_with_bs.len() <= 1, \"multiple geoms with blend shapes will lose data\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Export FBX with blend shapes on a single merged mesh","Audit multi-geometry models before import","Accept that per-geom blend shapes beyond the first are dropped"],"tags":["fbx","blend-shapes","import"],"backgroundTag":"unsupported-configuration","analyzedSha":"76c91aad8eca488ce527b1af707be8b3b24ad72d","analyzedAt":"2026-09-10T16:04:01.633Z","contentChangedAt":"2026-09-10T16:04:01.633Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}