What is strange is that inspecting the instance._currentLod property actually is returning the correct value, so the logic that chooses the LOD level is working, just for some reason the active mesh never updates.
I’m gonna start digging into the babylon codebase to try and figure this out, but any pointers greatly appreciated!
This is as far as I can go without more understanding of what this sign checking code is supposed to do. Hopefully someone else can take a look and figure out if this is the correct behavior, and if so why.
For now though, I can monkey patch my own babylon to hack around the issue.
Edit: Oh, now I see what this is for. It is to prevent the instanced meshes from getting turned inside out. Hmm, this could be tricky indeed.
Yes, having an odd number of negative scales will change the winding of a mesh, so we have to do extra annoying things to handle this case.
I’m afraid it’s a bit complicated (with a high probability of breaking something in the process) to try to handle the case where the source mesh and its LODs don’t have the same matrix determinant. So, for the time being, it’s a limitation of the LOD system that the source mesh and the LODs must have the same matrix determinant.