Problems with LODs and armatures

I have 4 stove dials, each with armatures to rotate the dial. Each base mesh references the same LOD objects.


The problem is that the armatures interfere with the LODs.


I could make separate LODs for each dial, but that would be redundant.

How can I do this without the armatures interfering with the LODs from the other dials?

In theory the modifier that has the armature properties should be controlled by the object, not the mesh, which is what the LOD system replaces.

The best method would probably be to remove armatures, but I don’t like being limited to not using armatures for objects I want to have multiples of.

this setup works for me.

make sure the parents are “refreshed”. in the object parent properties, reselect “Object”.

Attachments

armature_lod.blend (610 KB)

My setup has 4 objects that use one set of the same LODs. These objects are parented to armatures.

I started with one object and one armature. I simply duplicated these.

I duplicated the setup on yours, and the same issue occurred.

if you you have objects, then just parent each object directly to each bone. dont use the weight paint or modifier.

its more efficient to have a single mesh. you will be needlessly calling the lod code several more times which will eat cpu time. really, at this scale, the lod will be more costly then the meshes.

bge is also happier with less objects. less objects to update each logic loop.

I currently have a single mesh for each dial. But as you can see by the picture, each dial has two vertex groups. One for the actual dial, and another for the base. I want LODs for them because of the high resolution textures applied to the dials.


(lowest LOD shown as the base mesh.)

Is there no way to make my setup work without the armatures affecting the LODs from the other duplicates?

i think you will need to make a sample blend showing the problem. i guess i dont fully understand the requirements.

lodarmature.blend (588 KB)
Here’s the blend file for the problem I am having.

I’ve actually come up with a solution to the problem which makes the setup much more efficient. The only downside is that it requires the run armature to be used, which I suppose could only be active during animations.

Here’s the blend if anyone is interested.lodarmature2.blend (679 KB)

to me this looks like a bug. did you try it in upbge? if its present there, i would report it as a bug.

Side note:
Have you done any tests to show that there is a reason to LOD the textures? My first estimate is that all that using two meshes with different textures does is increase the amount of RAM required (you need both textures and another mesh). Textures in the GPU are mipmapped - meaning they have low resolution copies of themselves already. These low res versions are the ones that are sampled when the mesh is far away.
So unless you are changing to using a simpler material (eg no normal map), or some other thing expected to decrease rendertime, all that LOD’ing textures does is add the overhead of another texture and mesh.

I use LODs to switch materials and meshes. The highest resolution of the dial would have around 250 polygons and a high resolution texture with bump-mapping. The lowest resolution is around 20 polys with a much lower resolution texture. I haven’t bench-marked the performance changes, but I assume most of the help would come from the disabling of aesthetic settings. These being smooth shading, bump maps, ramps, etc.

I didn’t try it in upbge. Since I have the other solution I probably won’t.