Is it possible to have a skeletal mesh with a skeleton and no geometry?

I’m working on a mech game where the controlled (player and ai) mechs will have interchangeable parts for arms, legs torso, head, etc. What I would like to be able to do (since it seems the simplest approach for my needs) would be to create a skeletal mesh with an animated skeleton that has no geometry that I then bind static meshes to its bones. Doing this, I would be easily able to bind different static meshes to the bones two switch the graphic representation of each mech part easily. The problem I’m seeing is that when I import an FBX file with a skeleton into Unreal, any unbound joints seem to get ignored on import, so all of the bones I want to attach static meshes to are gone. I know that the exported FBX file still has my entire skeleton intact since it gets imported into other 3d software fine and fully intact, so it seems to be that Unreal simply ignores unbound bones when importing.

Is there any way to avoid this behavior, or is this just inherent to Unreal? I suppose there are other options I could pursue like each mech part (left arm, right arm, torso, head, legs, etc) being its own skeletal mesh but I’m honestly not sure how exactly that would work out or how you would animate that. Overall, the animations and skeleton for the mech will be the same regardless of type of leg or arm models, it’s just that I need to be able to swap out parts of geometry to represent selecting different mech parts.

Anybody have any insight or advice for my problem?

I am seeking to accomplish the exact same task. Hopefully someone else will comment because I’d like the info. But so far the way I think this is done is to create one whole mesh/skeleton and all of it’s animations. Then export each mesh piece (head, arms, torso etc.) one at a time. When importing each piece, select the whole skeleton as your skeleton. You should then be able to construct the mech in the character file skeletal mesh by skeletal mesh while still using one base skeleton. So far this appears to work good but you have to make sure you get your base skeleton right because updating the skeleton itself can break everything.

If anyone else can give some insight it’s appreciated, I am trying to figure out how to most effectively do this right now also.

Old question, but anyway…

Official response I read somewhere else was along the lines of “a skeletal mesh must have a mesh to be imported, that’s what it’s for”.

Been working on something related (spline mesh driven by skeletal mesh) and my simple work-around was to only skin a super-simple mesh to my skeleton and then set it to invisible and hidden in game.

Old question, but anyway…
Official response I read somewhere else was along the lines of “a skeletal mesh must have a mesh to be imported, that’s what it’s for”.
Been working on something related (spline mesh driven by skeletal mesh) and my simple work-around was to only skin a super-simple mesh to my skeleton and then set it to invisible and hidden in game.

If the mesh is not rendered (e.g. hidden in game set to true), then animations will by default not perform past the first frame. You will have to change the optimization setting “Visibility Based Anim Tick Option” to “Always Tick Pose and Refresh Bones”.

I can’t find any other workaround besides disabling this optimization. I am concerned that this will have a significant performance impact though…

1 Like

Just make a single tris.
Paint it to the root or pelvis.
Shrink it down to where it’s maybe 1mm.
Done.

The mesh is “empty” and can be used as the base for whatever else you add to it.

This is the general default behavior on fully modular characters.

I tried this and it still seems to cull the animations when the poly is out of view. If it’s inside the model (i.e. covered b meshes) it will cull. If it’s outside the model at the feet, but the feet are out of frame even though the rest of the body is in, it will cull.

It’s really either a recent change (like overnight) to the engine, or you are doing something wrong.

You do have modular meshes and a master pose component applied right?

I have my model setup in Blender where it’s many separate meshes parented to skeleton. I imported all of the meshes into Unreal Engine and derived a skeleton from 1 of the pieces to use for all the rest. I have a Character which has a root mesh (currently using the feet) to ‘set the skeleton’ and then create all of the meshes as subobjects which are attached to that, with master pose component set. They all animate properly as long as the root mesh (in my case, the feet) is visible/rendered. But as soon as that goes out of view, the bones will stop refreshing causing the animation to pause. When trying to use a single small poly as the root, the animations just don’t update at all in-game, as if the engine doesn’t see such a small object as being rendered. I increased the size a bit but because the mesh is covered by other meshes, it still seems to get culled.

There’s literally no such feature…

Do you maybe have an LOD set up on the skeleton that’s culling out your bones?

I’m confused what you mean by ‘there’s no such features’. There is a configurable optimization for Skeletal Meshes where you can choose to only refresh the bones when the mesh is rendered (default) or to always refresh bones regardless of if its rendered.

My bad, missed your post where you changed the tick group… That’s an engine wide setting / tick parameter. Fair enough.

Do you have force update checked on master pose component ?
Try it first. You never know.
As I said, there are plenty of working characters with essentially no mesh, and the default setting - though i have no idea what it actually is, I reason has to be to cull stuff…

If it still does not;

The way I see it, you can either configure it to work correctly with LODs, so you can have the same culling, still based on what’s rendered, but you can easily disable it by forcing an LOD0. (And therefore you set to always update in the setting, which may just work).

Or, you can try to mesh merge at runtime via c++.
Bottom of the docs.

Im working on the “car configurator” example from the epic games and they managed to create a skeletal mesh asset without geometry (or the polys ar so small you cant even see them) I dont know how they did it but maybe it helps someone if they can reverse engineer and figure out the process. I hope this helps someone!

The tris size can also be infinitesimal, so it shouldn’t even be able to render or be visible necessarily.

I think that the engine will attempt to trim it on import if too small, but it could possibly bypass the error message and leave you with an “emty” skeletal mesh.

You could check this car configurator by scaling up the mesh you think has no geometry by say 10000 or so, zooming on it with F, and with it selected, the mesh tris would get highlighted ideally…