JKHub CommlinkCouncil Review

Bone Scaling and Vertex Animation in GLA/GLM

A technical discussion regarding the limitations of the GLA armature format, specifically whether bone scaling is supported for animations. Users explore workarounds for vertex-level deformation and address Blender export bugs related to pose vs. rest positions.

Channel: #models-skinsSource window: 2024-08-26 17:26 - 2024-08-27 07:368 posts4 views0 votes
Tags: GLAGLMAnimation
Contributors: .mjt (33), i_am_noodle (4), mrwonko (4), archangel35757 (3), ashuradx (2), +3 more
Comms log
[2024-08-26 17:26] <.mjt> @modelers can Bones be scaled in pose mode animation on .gla armatures?
[2024-08-26 17:27] <.mjt> as in - is scale an animatable property?
[2024-08-26 17:27] <.mjt> or do I have to build an IK rig to deform a vertex along an arbritary path?
[2024-08-26 17:27] <repjunkiejr> .... I'd never bothered to try that. Can't hurt experimenting if nobody else has.
[2024-08-26 17:28] <ashuradx> Afaik the gla format does not hold scale keys
[2024-08-26 17:28] <.mjt> 
[2024-08-26 17:29] <ashuradx> You could stretch bones along their length axis by means of changing distance between joints via scaling along that axis but can't change thickness
[2024-08-26 17:31] <.mjt> I don'T want to change thickness, I just want a way to animate a bone to move through 3d space
[2024-08-26 17:32] <.mjt> so that I can attach vertices to control meshes like in vertex anims
[2024-08-26 17:32] <.mjt> one per vertex
[2024-08-26 17:36] <.mjt> I hope I don't need 3 bones per vertex just one for each axis
[2024-08-26 17:53] <archangel35757> @mjt - bone scaling is not supported in the GLA (iirc)... but you could test that theory by creating a 1 bone model with a sphere mesh and create a single animation scaling the bone.
[2024-08-26 17:54] <archangel35757> Why not use a .rof and add an animated md3 to the origin node?
[2024-08-26 17:57] <.mjt> !? What? How does that deform my mesh though πŸ˜„
[2024-08-26 17:57] <.mjt> I mean that part is doable for stuff where you need to move the whole origin of a mesh
[2024-08-26 17:58] <.mjt> but I need to move single vertices weighed fully to one bone
[2024-08-26 17:58] <.mjt> to control each one individually
[2024-08-26 17:58] <.mjt> Yeah, I think I'll give that a try later
[2024-08-26 17:58] <.mjt> but ashura says there is no such scale thingy in the format
[2024-08-26 18:03] <.mjt> RIP, appears last time I did one bone per axis
[2024-08-26 18:04] <.mjt> 48 bones here we go!!!
[2024-08-26 18:18] <archangel35757> @mjt - I could be wrong ... there is an error CARCASS gives if you do not use linear scaling fCurves. Perhaps it's always just been a best practice to have no scaling-- try my suggestion and see (edited)
[2024-08-26 18:25] <.mjt> I can only export via mrwonkos tool, so if that doesn't take scale into account, no point in trying until I have a setup that allows to use the old workflow
[2024-08-26 18:25] <.mjt> rn I have a different issue before that - how to contrain an objects location to a mesh vertex
[2024-08-26 18:26] <.mjt> that's needed to transfer the meshes vertex positions to the bone locations separated by axis
[2024-08-26 18:46] <mrwonko> If I remember correctly, the base pose uses a full transformation matrix including scale. But animations do not.
[2024-08-26 18:47] <mrwonko> But it's been like ten years, I don't remember
[2024-08-26 20:02] <i_am_noodle> No, I tried to do it for lewd purposes and it didn't work
[2024-08-26 20:23] <.mjt> @mrwonko do you know of the top of your head if your glm exporter trims separate vertices or if that is a step that has to be done manually?
[2024-08-26 20:24] <mrwonko> Loose vertices? I'm not sure, it used to be an error
[2024-08-26 21:18] <maui.94> Blender had a function that gets rid of loose vertices
[2024-08-27 01:03] <.mjt> did you for non lewd purposes also try to have disjunct surfaces in a mesh or do you know if one mesh per surface is required?
[2024-08-27 01:04] <i_am_noodle> In english doc!
[2024-08-27 01:10] <.mjt> a mesh object in blender can have surfaces that do not share vertices
[2024-08-27 01:10] <.mjt> is that allowed on .glm export or do I need to make one mesh object per surface?
[2024-08-27 02:15] <i_am_noodle> Like an object that's two separate faces that aren't touching?
[2024-08-27 02:16] <i_am_noodle> If the answer is yes, then yes, you can do that with glm.export, in fact its the reason for people getting ugly models exported with 2.79
[2024-08-27 02:32] <.mjt> IC, that's good news
[2024-08-27 02:32] <.mjt> thanks!
[2024-08-27 03:19] <.mjt> let's see if I can get it into the game like that with bones moving in pose mode
[2024-08-27 04:11] <tayst> 
[2024-08-27 04:36] <.mjt> It won't run on the S60 touch / Anna / Belle variants though. I still have my N95 somewhere πŸ˜„
[2024-08-27 04:38] <.mjt> Not the result I expected. The bones seem to move properly
[2024-08-27 04:38] <.mjt> but while in blender everything is perfectly attached, somehow that's not the case lateron
[2024-08-27 04:39] <.mjt> oh lol
[2024-08-27 04:40] <.mjt> so exporting the model should be done in rest position, not pose xD
[2024-08-27 04:40] <.mjt> ooops
[2024-08-27 04:40] <.mjt> 
[2024-08-27 07:36] <mrwonko> Yeah, that's a bug https://github.com/mrwonko/Blender-Jedi-Academy-Tools/issues/52
Transmission Thread

.mjt

Can bones be scaled in pose mode animation on .gla armatures? As inβ€”is scale an animatable property? Or do I have to build an IK rig to deform a vertex along an arbitrary path? I'm trying to find a way to animate a bone to move through 3D space so that I can attach vertices to control meshes like in vertex animations (one bone per vertex). I hope I don't need 3 bones per vertex just for each axis.

ashuradx

As far as I know, the .gla format does not hold scale keys. You could stretch bones along their length axis by means of changing the distance between joints via scaling along that axis, but you can't change thickness.

archangel35757

Bone scaling is not supported in the GLA (if I recall correctly). You could test that theory by creating a 1-bone model with a sphere mesh and creating a single animation scaling the bone.

There is an error CARCASS gives if you do not use linear scaling fCurves, but it's always just been a best practice to have no scaling. Why not use a .rof and add an animated .md3 to the origin node?

.mjt

How does that deform my mesh though? That part is doable for stuff where you need to move the whole origin of a mesh, but I need to move single vertices weighed fully to one bone to control each one individually.

I'm exporting via mrwonko's tool, so if that doesn't take scale into account, there's no point in trying until I have a setup for the old workflow. Right now I have a different issue: how to constrain an object's location to a mesh vertex? That's needed to transfer the mesh's vertex positions to the bone locations separated by axis. 48 bones, here we go!

mrwonko

If I remember correctly, the base pose uses a full transformation matrix including scale, but animations do not. But it's been like ten years, I don't remember exactly. Regarding loose vertices: I'm not sure if the exporter trims them; it used to just throw an error.

i_am_noodle

No, I tried to do it before and it didn't work. Regarding disjunct surfaces: if you mean an object that's two separate faces that aren't touching, then yes, you can do that with glm.export. In fact, it's the reason for people getting ugly models exported with Blender 2.79.

.mjt

That's good news about the disjunct surfaces. I'll see if I can get it into the game with bones moving in pose mode.

Attachment
https://cdn.discordapp.com/attachments/1277680699398295643/1277850303479156766/image.png

Wait, I got a result I didn't expect. The bones seem to move properly, but while everything is perfectly attached in Blender, it's not the case later on. Oh lol... exporting the model should be done in rest position, not pose. Oops.

mrwonko

Yeah, that's a bug: https://github.com/mrwonko/Blender-Jedi-Academy-Tools/issues/52