zturtleman / mm3d

Maverick Model 3D is a 3D model editor and animator for games.
https://clover.moe/mm3d
GNU General Public License v2.0
110 stars 22 forks source link

Only part of the model saving #146

Closed quakemmo closed 3 years ago

quakemmo commented 3 years ago

Heya,

So I made a composite Q3 MD3 model from scratch - lower, upper, head. I grouped all faces in different groups.

It all works wonderfully, in game or in the mm3d software, EXCEPT! when I load the whole model (and click Yes when the popup asks whether I want to load all of the parts of the composite model), and save then.

In this case, for some reason, only the torso, the head and the lower model is saved - not the arms/hands which are actually separate from the torso in my case (the model is for testing purposes only and I separated different body parts a bit to make it easier to distinguish between them in-game).

It works perfectly if I click No to the question, and save the model piece by piece, upper, lower, head. But if I click Yes and then save - no arms/hands.

Any idea? :)

zturtleman commented 3 years ago

The arms and hands need "u_" group name prefix to be saved in upper.md3. More details in the MD3 manual page. If it's still an issue you could post the models here in a zip for me to take a quick look at.

quakemmo commented 3 years ago

Do you think this constraint is really needed? Maybe I'm missing something but I feel it's just some kind of legacy constraint. If so, think we could get rid of it in a future release?

I'm using a different naming scheme (not u_..) for some particular reasons. I could just work around the issue unless this can just be removed. Thanks!

zturtleman commented 3 years ago

All of the official Quake 3 players use l_, u_, and h_ prefixes for mesh names though aside from export process it doesn't matter.

Awhile back I figure out how to determine MD3 player segments for skeletal models using the bone hierarchy and tags. It's not committed and probably has some assumptions about how models are structured.

But for frame animated models, how do you suggest connecting which meshes belongs to which MD3 player segment? I guess there could be a MD3 export dialog where you pick for each mesh and save it in the mm3d metadata. This a little overly complicated to avoid two characters at the beginning of mesh names so I'm not quite sold on it. I may give it some more thought.

Having groups with unknown prefix be saved in lower.md3 so meshes don't get lost in the nether would be a good idea. Though the meshes animations may be lost. Hmm, well could also check if group is animated in torso_ or leg_ frame animations to detect MD3 player segment but it would be hard to handle meshes that are simply unanimated.

quakemmo commented 3 years ago

Oh I'm not saying the whole l, u, h_ nomenclature should be removed - just that mm3d should not require these to be present to save a composite Q3 model. This way, people could use mm3d for modeling something that isn't really vanilla Q3 - while not taking anything away from Q3 modelling.

I'm working on a ioq3 fork where I rewrote lots of model- and animation- related code, and I do not use the u_ (etc) nomenclature. I still do use MD3 though, and mm3d is the only decent MD3 editor.

Maybe it could be a checkbox in the optios, like "Enforce Q3 group nomenclature", checked by default. Leaving lost souls such as myself with the option to uncheck it. :)

quakemmo commented 3 years ago

Bump for the Z dude!

zturtleman commented 3 years ago

To avoid lost groups (not saved in any player segment) it's no longer possible to export MD3 player if a group name does not have the prefix H, U, or L_. 8db13ae7fa018b02c215153ddbd0c157efeaf859

tl;rd What you are asking for [saving groups back to the player segment they were loaded from] is totally possible but inconsistent with other Quake 3 nomenclature used by MM3D (filenames, tag names, animation names) and I'm not prepared to make multi-segment model export and import in MM3D fully customizable. I don't find control of the first two characters of group name (which you could easily skip if using group name for something in your game) to be a particularly useful feature so I am disinclined to add it.


As-is mm3d loads the player segments and then has no idea where the groups came from to be able to export them back.

zturtleman: I guess there could be a MD3 export dialog where you pick for each mesh and save it in the mm3d metadata. This a little overly complicated to avoid two characters at the beginning of mesh names so I'm not quite sold on it. I may give it some more thought.

What I meant here was loading the player segments would set metadata of what segment the groups are in and the export dialog would display a list of all groups with combo boxes to pick player segment (filled in from metadata and some default method) and then update metadata when you confirm.

Your solution of just hide it from the user doesn't sound good to me. Next you'll ask why renaming "arm" to "arms" refuses to export and I'll explain (the hypothetical) metadata uses the group name for which segment it belongs to. It would be nice to display list of groups with combo boxes at export.

Full control of group names doesn't seem like a huge benefit to me (you could easily skip the prefixes if you're parsing the group names in your game). Next would be to allow renaming tag_torso and tag_head and setting player segments for every tags (which currently default to all segments if unknown) and setting player segments for every animation to try to work toward no hard coded text strings. But why are head.md3, upper.md3, and lower.md3 hard coded? Why only three segments, why not player with weapon, weapon flash, and weapon barrel as well?

What you are asking for is totally possible but inconsistent with other Quake 3 nomenclature (filenames, tags, animations) and I'm not prepared to make multi-segment model export and import in MM3D fully customizable.