Quick Reply
Search this Thread
Test Subject
Original Poster
#1 Old 19th Aug 2024 at 11:29 PM Last edited by lynbutnot : 1st Sep 2024 at 9:11 AM.
Default [SOLVED] Hat hair gets distorted when moving fat/muscle/facial sliders
(Original title: CTU not saving bone assignments?)
I am currently trying to reduce the polycount of this hat hair (50k+ polys!!) while avoiding Milkshape/TSRW (mainly because Milkshape seems super complicated and inefficient and I can't for the life of me figure out how to use TSRW to make items with multiple parts) and I ultimately landed on CTU. I couldn't find any tutorials specifically for making hat hair, so I'm kind of on my own here, and I'm also a beginner when it comes to CC making, but using the original package file as a reference and loosely following this tutorial along with this one I was able to figure out a good chunk of it.
The one thing I'm having trouble with is bone assignments. I am using MeshToolKit to auto-assign bones using the original GEOMs as references. Everything went smoothly in CTU, but when I opened up the new hair in game, parts of it were jutting out randomly and it looked way choppier than it did in Blender/CTU. I don't know much but I was pretty sure that was a bone-assignment issue, so I opened it up in S3PE to find there were no BONE files at all. I've used DABOOBS before to make non-hat hair and didn't have this problem, so I'm thinking it's an issue with CTU in particular (I could be wrong about that though). I suppose if nothing else I could just remove the clip and make it a regular hair, but I would still like to figure out what's going on, at least for future reference. If anyone knows why this is happening or has a work around, I would really appreciate the help!!
Advertisement
Forum Resident
#2 Old 20th Aug 2024 at 2:22 AM Last edited by CardinalSims : 20th Aug 2024 at 2:35 AM.
BONE resources are, confusingly, not related to whether a mesh has bones or not. Those are stored in the GEOM itself and would suggest that either the bone assignments aren't a good match for the mesh or the morphs could be deforming it incorrectly. If the mesh had no bones at all, the game would crash to desktop. CTU makes very light CC that only includes the files you modify in the package, that's why there aren't any BONE- they'll just be referencing the originals from the base hair. The preview is also purely a render of the mesh and textures, it is not showing the effects of bones or morphs.

You're in luck, as I make hat hairs without those two tools, and also slightly out of luck that I haven't published the tutorial for it.
I'm not personally familiar with a pure CTU workflow but I do use CTU to modify presets and use the preview. It's unlikely the culprit in the issues, so I'd suggest checking the bones and morphs first, but if you'd like to try another method I'd be glad to paste my workflow notes and share the base package I use to make them myself. I primarily just use Blender and S3PE for the majority of it, then a bunch of smaller tools for a couple of things (CTU, MTK, S3OC, etc).

I also only just noticed one of the tutorials you linked is my own,,, I'm glad it helped.
Test Subject
Original Poster
#3 Old 20th Aug 2024 at 9:30 PM
Quote: Originally posted by CardinalSims
BONE resources are, confusingly, not related to whether a mesh has bones or not. Those are stored in the GEOM itself and would suggest that either the bone assignments aren't a good match for the mesh or the morphs could be deforming it incorrectly. If the mesh had no bones at all, the game would crash to desktop. CTU makes very light CC that only includes the files you modify in the package, that's why there aren't any BONE- they'll just be referencing the originals from the base hair.

Ah... I started out with a test to make sure everything was working and didn't make any morphs—that was where I went wrong. I just tried messing around with the weight/muscle sliders in game and got the hair looking like it should, aside from one wonky strand by the neck that seems to move with some of the facial sliders. Not sure what that's about... the original hair doesn't do that. But I'm glad that I now know the importance of morphs!
Quote: Originally posted by CardinalSims
You're in luck, as I make hat hairs without those two tools, and also slightly out of luck that I haven't published the tutorial for it.
I'm not personally familiar with a pure CTU workflow but I do use CTU to modify presets and use the preview. It's unlikely the culprit in the issues, so I'd suggest checking the bones and morphs first, but if you'd like to try another method I'd be glad to paste my workflow notes and share the base package I use to make them myself. I primarily just use Blender and S3PE for the majority of it, then a bunch of smaller tools for a couple of things (CTU, MTK, S3OC, etc).

I also only just noticed one of the tutorials you linked is my own,,, I'm glad it helped.

It does seem like I'm missing quite a few things just using CTU when compared to the original package, and I don't know enough about anything to know what matters and what doesn't. I would love to know another method, so please do share if you can!
I've said it before (you helped me with the crazy curly hair with the duplicate faces a few weeks ago) but thank you so much for making that tutorial!! Without it I wouldn't know how to do any of this at all.
Forum Resident
#4 Old 21st Aug 2024 at 12:49 AM
Morphs are a set of coordinates for how every vertex of the hair should move with the weight and fitness sliders, so a mesh that has changed in any way no longer matches the verts being moved (even though they were once the same hair). If you ever want to test a hair before getting around to morphs, it's safe to delete the existing ones (the BGEO resources, and sometimes GEOM that you can tell apart from the main meshes because the preview in S3PE will show data that looks more like a BGEO)

Method pasted directly from my WIP document, with some explanations added, and the base package attached:
  • S3PE: Export the LOD0 (the hat) and LOD0_1 (the hair) from the HATHAIRBASE.package
  • BLENDER: Transfer GEOM Data from LOD0 to your hat/accessory. Transfer GEOM Data from LOD0_1 to your hair.
  • BLENDER: Recalculate IDs, Export as GEOM.
  • SimGEOM Editor: Simply open each GEOM and File > Save (to fix a bug).
  • (I do my own bone weights and morphs in Blender beforehand, but this is where you'd do auto-bones and auto-morphs in MTK. The morphs will be in .geom format- make and set them aside for now.)
  • S3PE: Right click > Replace LOD0 and LOD0_1 with the new meshes. (You can also reuse them for the lower LODs for now, then repeat these steps on LODs you have made later.)
  • S3PE: Right click > Replace all of the required textures. Save As, so as not to overwrite the base package.
  • CTU: In the Design tab, remove all except Preset #1. Do not touch the options in the Other tab. 3-4 channels will automatically work just by having that many patterns enabled.
  • CTU: Adjust the preset to your preference, then Add New (From Last) for additional presets. File > Save when done.
  • S3PE: Delete the _KEY resource and Save- all resource names will clear. Double click on the CASP, tick 'Use resource name' and 'Rename if present' and give your hair a new unique name. CreatorName_agegenderHairName is a good template. Save and exit.
  • MTK: Package Tools > Name Those Files, select the package and Add Names. The contents are now renamed appropriately. Technically optional, but satisfying.
  • MTK: Package Tools > Add Morphs to Clothing/Hair. Open the package, use GEOM as the source, and make sure both checkboxes are unticked. Add the .geom morph files made earlier, set which morph they belong to, click Add Morph to Package. Repeat for all, then Save Package.
  • S3OC: Important! Open the package and clone with renumber ticked, making any desired changes to the category/age/gender flags etc and pasting the new name into the Unknown1 entry. This will remove any orphaned resources left over from the original hair, as well as renumbering everything to be unique from the HATHAIRBASE- which a fresh copy of can be used on future hairs.

If something doesn't go as expected, let me know- this is still a work in progress and hat hairs in general have a lot of quirks!
The package has blank morphs, so it's already prepped to test without them. My only other note is to make sure all other tools are closed during the CTU steps, as it will crash if the package it's editing is open elsewhere.
Attached files:
File Type: zip  CARDINAL_HATHAIRBASEv3.zip (3.13 MB, 2 downloads)
Test Subject
Original Poster
#5 Old 22nd Aug 2024 at 10:12 PM
Aaah thank you so much! It worked Well, for the most part. For some reason the scalp texture isn't showing up, but I was at least able to get the hair in game and morphs working so that's a lot further than I got before. I opened both my version and the original hair in CTU to make sure every texture was the same, so I don't think the issue with the scalp is a missing texture. Do you know what could be causing it?
Also, I wanted to ask, is it possible to use your method on the original package file to save myself the trouble of replacing all the textures (and for future use if I ever need to edit something small on anything and don't want to start from scratch)? I tried to (just using the original's GEOMs to transfer GEOM data to the edited pieces in Blender—not sure if I even needed to do that considering I was working with those GEOMs to begin with?) but I kept getting an error message when trying to add morphs in MTK (BGEO creation did not complete. Arithmetic operation resulted in an overflow.). It did let me add the morphs in GEOM format but they don't work in game. I could only ever get the morphs to work if I transferred GEOM data from the GEOMs in your package. Why is that??
Forum Resident
#6 Old 23rd Aug 2024 at 1:16 AM
That's totally my own fault actually, looks like the EA hair I used didn't have scalp textures. I've been using that base to make SimBot heads, so I didn't notice!
I've attached an older version of the base that was on a hair with a full texture set. I don't think there was anything wrong with V1, I just made V2-V3 while troubleshooting an issue ended up being a CTU bug.
You can also clone any basegame hat hair in S3OC yourself- it's more or less the same, I just made some quality of life changes to my base package such as renaming the files, making empty morphs, etc.


You can indeed repeat any of the steps on an existing package, the most important part is just making sure the right GEOM data is being used. Once familiar with the tools, you can take most things apart and put them back together.
But while this is fine for making changes to your finished work, it's good practice to never use CC as a base for making new CC. Making a fresh item every time from an EA clone (which is what the base is a fancy version of) is the best way to make sure your work doesn't inherit any jank from someone else's package. You never know what resources they may have deleted, what data has been skewed in TSRW or outdated tools, so on. Much easier to troubleshoot if you know the issue can only be your user error, rather than a needle in the haystack left by the previous creator or the tools they used.

The MTK error may have been from either 1) Morphs cannot be reused between different meshes as they are carefully linked, if these weren't directly generated from the final GEOMs you're using they would fail to be added, or 2) As above, some kind of missing data already present in the original CC that wasn't enough to cause issues ingame but was enough to confuse MTK.
Attached files:
File Type: zip  CardinalSims_HATHAIRBASEV1.zip (5.09 MB, 2 downloads)
Test Subject
Original Poster
#7 Old 26th Aug 2024 at 10:35 PM
Quote: Originally posted by CardinalSims
That's totally my own fault actually, looks like the EA hair I used didn't have scalp textures. I've been using that base to make SimBot heads, so I didn't notice!
I've attached an older version of the base that was on a hair with a full texture set. I don't think there was anything wrong with V1, I just made V2-V3 while troubleshooting an issue ended up being a CTU bug.
You can also clone any basegame hat hair in S3OC yourself- it's more or less the same, I just made some quality of life changes to my base package such as renaming the files, making empty morphs, etc.
...
The MTK error may have been from either 1) Morphs cannot be reused between different meshes as they are carefully linked, if these weren't directly generated from the final GEOMs you're using they would fail to be added, or 2) As above, some kind of missing data already present in the original CC that wasn't enough to cause issues ingame but was enough to confuse MTK.

It worked great, thank you so much for sharing that!! I think this is the first piece of CC that I've actually gotten right lol. Yay for progress
The one difference is the shine of the hair. I actually think the new version looks better, but I'd still like to know why it's different.
Here is a picture of the original hair:

And here is my version:

Opening up the original hair in CTU and looking at the meshes tab, I can see that all the textures under Mesh TGI Links are borrowed from the EA hair that was cloned to make the package (afHairMidPigtails in this case) whereas my version is using the updated textures (aside from the bump map/halo ramp which I had to copy over). When I looked it up I found the shine is controlled by the specular map, is that right? I don't think the hair itself even has a specular map now, because the texture under SpecularMap (and DiffuseMap and AlphaMap) is pulling from the clothing specular which only has the textures of the clip. Is that a bad thing?

The only thing I still can't figure out is how to make my own base. I tried following your steps with a newly cloned EA hair but I just cannot get the morphs to work—I keep getting that same error I was getting before. I'm pretty sure I'm doing everything right... is it possible that any of the changes you made for the base are necessary to get the morphs to work (such as making empty morphs first) or should you be able to do everything with a newly cloned EA package right from the get-go? I can also go over all my steps if that would be helpful.
Screenshots
Forum Resident
#8 Old 27th Aug 2024 at 6:25 AM
I think I would have to see both packages to know what was different between them.

Those texture keys don't sound quite right- only the DiffuseMap and AlphaMap should have an identical ID, there shouldn't be any other duplicates (and there aren't any in my base package).
The rest is normal, hat-hairs use the ClothingSpecular as the spec for both mesh groups. Both groups share a texture space, so the hair does have a specular- but if its section of the texture is totally black then yes that would just equate to no shine. If you reused the textures from the original CC, it should generally look the same- but I have no way of knowing what method was used to make the original hair and what unique changes it may have had.

I can't seem to recreate the morph issue. I tried adding morphs to a package that already had them and it worked, which is the only thing I could think of being related.
It would help to know how you're making and adding the morphs, yes.
Inventor
#9 Old 27th Aug 2024 at 2:41 PM
Figured I will toss some things in for you to consider. OP mentioned this is high poly hair (50k ?), and was reducing count. What is the final count? The af mid pigtails doesn't have morphs, and is a big reason why many hair creators use it. High poly hair morphs distort. I have added morphs to a few, and it's a PITA to get the poly count right. Some times, it may not be L0, but in L1 or L2. You will see the distortion in the Sim's thumbnail, but not the Sim in game.

To OP, for @CardinalSims to fully see what is going on, you should upload your hair. I also end up going in circles when I think I did everything right, but continue to have the same problem. THAT is when "mother's little helper" comes into play!!!

Shiny, happy people make me puke!
Test Subject
Original Poster
#10 Old 27th Aug 2024 at 11:16 PM Last edited by lynbutnot : 27th Aug 2024 at 11:38 PM.
Quote: Originally posted by CardinalSims
I think I would have to see both packages to know what was different between them.

Those texture keys don't sound quite right- only the DiffuseMap and AlphaMap should have an identical ID, there shouldn't be any other duplicates (and there aren't any in my base package).
The rest is normal, hat-hairs use the ClothingSpecular as the spec for both mesh groups. Both groups share a texture space, so the hair does have a specular- but if its section of the texture is totally black then yes that would just equate to no shine. If you reused the textures from the original CC, it should generally look the same- but I have no way of knowing what method was used to make the original hair and what unique changes it may have had.

Oh, I think there are duplicates because the multiplier and clothing specular are the same texture. I forgot about that. Technically they are different files, but the contents are completely identical. Not sure if that's bad, I just copied the way the original hair was.
Here is a link to the original hair, and I will attach my (working) version below. Hopefully you can see what I mean with the textures! Sorry if I didn't explain it well.

Quote: Originally posted by CardinalSims
I can't seem to recreate the morph issue. I tried adding morphs to a package that already had them and it worked, which is the only thing I could think of being related.
It would help to know how you're making and adding the morphs, yes.

Okay, it must be something I'm doing wrong, then. Unless what @LadySmoks said has something to do with it... I started with a clone of afHairMidPigtails so as to copy the original hair exactly, but if that hair doesn't have morphs maybe that's the problem? But then how does the original hair have morphs/no distortion? Aaah so confusing.
But here were my steps:
1. Clone afHairMidPigtails with S3OC .
2. Open with S3PE and grab lod0 and lod0_1 GEOMs
In Blender:
3. Import lod0 GEOM, transfer GEOM data to clip (named clip_lod0), delete lod0 GEOM, recalculate IDs
4. Import lod0_1 GEOM, transfer GEOM data to hair (named hair_lod0), delete lod0_1 GEOM, recalculate IDs
5. Make copy of clip, rename to clip_lod0_fat, click Make Morph under Sims 3 GEOM tools, name "fat", link to clip_lod0
6. Make copy of hair, rename to hair_lod0_fat, Make Morph, name "fat", link to hair_lod0 (The morphs are completely unedited by the way—I just wanted to see if I could get the morphs to work at all before I made real ones.)
7. Export clip_lod0 and hair_lod0 GEOMs
8. Open and save clip_lod0 and hair_lod0 in SimGeomEditor
I also want to add I didn't make separate meshes for each LOD either, because again I wanted to make sure everything was working first.

I've attached a folder (named "For CardinalSims") that has all my work from the steps above (it includes an unedited version of the cloned hair, the lod_0 and lod0_1 GEOMs from that hair, my .blend file with the edited clip/hair + morphs, the exported GEOMs/morphs, the textures for the control, diffuse, and clothing specular/multiplier, and a .package file with all the textures and GEOMs replaced but that I can't add morphs to) in case you want to try recreating it yourself with my stuff. Thank you for helping me figure this out!
Attached files:
File Type: zip  ss_xxbomixx_tyaefHairLamzClawClip.zip (7.76 MB, 2 downloads)
File Type: zip  For CardinalSims.zip (18.94 MB, 2 downloads)
Inventor
#11 Old 28th Aug 2024 at 12:05 AM
Quote: Originally posted by lynbutnot
Oh, I think there are duplicates because the multiplier and clothing specular are the same texture. I forgot about that. Technically they are different files, but the contents are completely identical. Not sure if that's bad, I just copied the way the original hair was.
Here is a link to the original hair, and I will attach my (working) version below. Hopefully you can see what I mean with the textures! Sorry if I didn't explain it well.


Okay, it must be something I'm doing wrong, then. Unless what @LadySmoks said has something to do with it... I started with a clone of afHairMidPigtails so as to copy the original hair exactly, but if that hair doesn't have morphs maybe that's the problem? But then how does the original hair have morphs/no distortion? Aaah so confusing.


I took a look, as will @CardinalSims. I opened the original hair in TSRW, and it doesn't have morphs. Pigtails does not support morphs. As hair/ hats go, I know that afHairLongWrap is a base game hair/ hat that has morphs. When you open a package in s3pe, and click on a BGEO, there is a lot more info... so much that the scroll on the side is just a dot. But, I don't know if a hair with almost 47k poly can be morphs. If it's possible, CardinalSims would know. I have never been able to add morphs to a mesh that high on poly.

Shiny, happy people make me puke!
Test Subject
Original Poster
#12 Old 28th Aug 2024 at 3:55 AM
Quote: Originally posted by LadySmoks
I took a look, as will @CardinalSims. I opened the original hair in TSRW, and it doesn't have morphs. Pigtails does not support morphs. As hair/ hats go, I know that afHairLongWrap is a base game hair/ hat that has morphs. When you open a package in s3pe, and click on a BGEO, there is a lot more info... so much that the scroll on the side is just a dot. But, I don't know if a hair with almost 47k poly can be morphs. If it's possible, CardinalSims would know. I have never been able to add morphs to a mesh that high on poly.

Hmm, well that's interesting. But then why doesn't the original hair get all wonky when moving the weight/muscle sliders and mine did? The only way I was able to get it to work was by using CardinalSims' package and adding a fat morph... it's clear something isn't adding up, I'm just not sure what
You are probably onto something in thinking that it has something to do with the afHairMidPigtails itself though! I never tried to make a base with a different hair. I don't think it's an issue with the polycount considering my fixed version more than halved it (I got it down to around 22k) and it wouldn't make sense that the higher poly version works but mine doesn't, but I could be wrong there. Obviously I still have a lot to learn lol. Thank you for looking into it yourself!!
Forum Resident
#13 Old 28th Aug 2024 at 4:34 AM Last edited by CardinalSims : 28th Aug 2024 at 4:54 AM.
My observations as I go through these:
  • Indeed, the original hair didn't have morphs. Which creates a bit of a mystery on what exactly was causing the deformation at the start of this thread, but any number of things might have been going on from using CTU to edit an existing package to be fair. This also means, troubleshooting aside, you could technically leave it as it is. It's short enough to not need 3/4 of the morphs, unless you want to resolve the pieces in the front potentially clipping with fat sims' cheeks.
  • The original conversion, as far as textures go, is a little incomplete. No custom specular, unnecessary DXT5 on textures that don't need it, and using the old normal map to name a few small issues. Obviously it worked well enough ingame, but it's certainly very unpolished. Without even getting into the wildly inappropriate polycount.
  • The only thing that jumps out to me of concern about the morph steps is if you're exporting the main mesh for the first time, and thus hitting Recalculate IDs, after making them. You'll want to make your morphs after the hair is done and you've pressed Recalculate IDs, as they will break if the IDs get rearranged again.
  • Looking at EA's afHairMidPigtails now- also no morphs, but I don't see any obvious signs in the package why morphs can't be added. All the right keys are still in place, the morphs are just empty in the same way I manually did on my bases (V3 was afHairWrapLong and V1 was afHairPigtailsLowBraids).
  • I made a couple of test morphs for each mesh group and... got an entirely different error? Well... that's modding for ya. Mine just outright complains that they aren't morph meshes, when they are.
  • But it does indeed work on my base- which is a relief, because I was starting to convince myself that maybe MTK couldn't add morphs to hat hairs. As flattering as it would be if it was something I'd done that made it work, it's highly likely as LadySmoks noted that afHairMidPigtails just doesn't support morphs. What exactly limits that and whether it can be adjusted in S3PE would require some more scrutiny of the files, but for now it's simple enough to use a hair that does have that functionality. afHairPigtailsLowBraids has the complete texture set and morph compatibility, so it seems like a good one!
  • I wish I knew the hard limits for polycount, but I work with such low poly hairs that I'm not too familiar with it. Luckily it wasn't the issue here.
    If I were to make an educated guess, I'd say 10k vertex IDs is likely the danger zone for how much data a BGEO can store. Purely based on the fact EA allocates 10k of IDs to each CAS category. This doesn't correlate to the actual vertex count of the mesh, because verts that are close together (like flipped backfaces) can share an ID, and also doesn't equate to a specific polycount because multiple faces can share the same verts. The high poly hair, for example, has 46k faces and 31k verts. GEOM Tools assigns 18k Vertex IDs to it- so it's likely that it would have destructive/broken morphs, yes. If not for a hard limit in the BGEO, but because there is a point where the IDs would start being shared with other CAS Parts and the morphs would try to deform them, too.
Inventor
#14 Old 28th Aug 2024 at 4:31 PM
@CardinalSims, inside of MTK (geom mesh mirror), there is a chart regarding what you said about vertices counts, and overlapping. There is also an ancient thread here somewhere (2012ish), with Cmar talking about the issue. It is my savior for making garments. The numbers appear to be totals, for all LOD's, which if true, does limit hair to 10k, as you said. BUT... whatever the reason, and I think you said it, and I don't quite understand, when there are no morphs, or at least morph data (since there IS a mesh), the poly counts limits change... which I imagine is why hi poly hair creators never have morphs.

As I had been making some hi poly FemmeBots (Plumbots), as hi as 84k, and they worked, bots have bones, but no morphs, I converted a mesh to adult female, with no morphs and it worked in game.

I also know that hi poly shoes and any accessory with morphs will distort each other. This, as my mentor JoshQ, is a cobbler, among other things.

@lynbutnot, I will watch to see how this ends, but don't have much more to add, as CardinalSims does far more with hair than I, and the work flow and tools used are different.

Shiny, happy people make me puke!
Test Subject
Original Poster
#15 Old 29th Aug 2024 at 5:17 AM
Quote: Originally posted by CardinalSims
My observations as I go through these:
  • Indeed, the original hair didn't have morphs. Which creates a bit of a mystery on what exactly was causing the deformation at the start of this thread, but any number of things might have been going on from using CTU to edit an existing package to be fair. This also means, troubleshooting aside, you could technically leave it as it is. It's short enough to not need 3/4 of the morphs, unless you want to resolve the pieces in the front potentially clipping with fat sims' cheeks.
  • The original conversion, as far as textures go, is a little incomplete. No custom specular, unnecessary DXT5 on textures that don't need it, and using the old normal map to name a few small issues. Obviously it worked well enough ingame, but it's certainly very unpolished. Without even getting into the wildly inappropriate polycount.
  • The only thing that jumps out to me of concern about the morph steps is if you're exporting the main mesh for the first time, and thus hitting Recalculate IDs, after making them. You'll want to make your morphs after the hair is done and you've pressed Recalculate IDs, as they will break if the IDs get rearranged again.
  • But it does indeed work on my base- which is a relief, because I was starting to convince myself that maybe MTK couldn't add morphs to hat hairs. As flattering as it would be if it was something I'd done that made it work, it's highly likely as LadySmoks noted that afHairMidPigtails just doesn't support morphs. What exactly limits that and whether it can be adjusted in S3PE would require some more scrutiny of the files, but for now it's simple enough to use a hair that does have that functionality. afHairPigtailsLowBraids has the complete texture set and morph compatibility, so it seems like a good one!

Sorry to keep going around in circles with this... I'm super glad I could at least get it to work with your package, but now I just want to solve the mystery of why the hair doesn't work without morphs! I actually don't think CTU was even the problem considering the same thing is happening even when I'm using your method and cloning an EA hair—and the same hair that was cloned to make the original hair at that. I feel like I'm missing something that could be helpful for the future and I'm doing myself a disservice if I don't figure it out. Can I ask a few more questions for clarification?

I'm mainly wondering about blank morphs. What are they and how do you make them? Since both afHairMidPigtails and the original hair don't have morphs (or rather, they have blank morphs), I'm assuming that with blank morphs, the hair doesn't change or move at all when moving sliders, whereas custom morphs make it so it does... which means blank morphs serve the exact same function as the fat morph I made (in that I just copied the hair exactly and didn't change anything). Is that correct?
If so, it seems like somehow the blank morphs aren't registering in my case. The hair is behaving like it has custom morphs, but is missing the instructions for what moves where. Do you need to make new blank morphs for every hair, or are they universal? Like, say I'm using your base with the blank morphs, should I be able to only replace all the GEOMs/textures and have a fully-functioning hair right off the bat? Or is there something else that needs to be done there? You also mentioned earlier that you can just delete the BGEO files to test a hair before you make morphs—would you expect to see warping in doing that, and if not, why have blank morphs at all?
Also, are morphs stored anywhere in the data of the GEOM files, or are they completely separate from them? Could the issue have something to do with the GEOMs themselves, or are you thinking it's definitely the morphs?

It just doesn't make sense that my hair requires morphs when apparently a lot of CC creators use the same EA hair as a base and those hairs are fine. Not to mention the original hair. I'm sorry for bombarding you with questions... if you're over this whole thing I understand lol. I'm sure this isn't what you signed up for when you first replied to me. If nothing else I could try messaging the creator of the original hair and see what they did, so all hope is not lost if we can't figure it out here!
Forum Resident
#16 Old 29th Aug 2024 at 6:47 AM
It's no problem at all! Modding is an (often confusing) effort of community collaboration. I wouldn't hang around here if these deep dives were not my jam

To clarify some confusion:
The detail I didn't realise was that you're still having mesh issues after using my base. If it was mentioned, I totally missed it!
If this is happening without morphs, which my base and clones of afHairMidPigtails do not have, morphs are simply not the issue. I tested your package ingame and there isn't anything wrong with it aside from the fact it clips into the scalp around the ears, and no body sliders cause issues to appear.
I probably should have asked for screenshots of the issue from the start, because it seems that I don't really know what the issue you're trying to solve is.

I've learned via this thread that MidPigtails hair doesn't support morphs at all (it might look like I avoided using it for my base intentionally, but it was a lucky coincidence really), so it doesn't start with them nor can they be added. But if you want to clear the ones from a hair that does support them, all I did was export a BGEO that already had no data in the preview (seen as no entries in Section2 and Section3). The _special morph on any non-maternity enabled hair usually fits that description. I then right click > replace the other morphs with that BGEO. That one file is good for all packages.
This technically isn't the same as having a morph that doesn't do anything- I can see on your package that the fat morph is still full of vertex data, it just isn't being directed to do anything.
I just use that as a placeholder for testing. Deleting them may be more or less the same- it was just a personal choice to not interfere with the contents of the base in any way that was unnecessary.
Test Subject
Original Poster
#17 Old 31st Aug 2024 at 1:32 AM Last edited by lynbutnot : 31st Aug 2024 at 1:49 AM.
Quote: Originally posted by CardinalSims
It's no problem at all! Modding is an (often confusing) effort of community collaboration. I wouldn't hang around here if these deep dives were not my jam

Okay, that's good to know!! Still, thank you for your patience this whole time lol.

Quote: Originally posted by CardinalSims
To clarify some confusion:
The detail I didn't realise was that you're still having mesh issues after using my base. If it was mentioned, I totally missed it!
If this is happening without morphs, which my base and clones of afHairMidPigtails do not have, morphs are simply not the issue. I tested your package ingame and there isn't anything wrong with it aside from the fact it clips into the scalp around the ears, and no body sliders cause issues to appear.
I probably should have asked for screenshots of the issue from the start, because it seems that I don't really know what the issue you're trying to solve is.

I've learned via this thread that MidPigtails hair doesn't support morphs at all (it might look like I avoided using it for my base intentionally, but it was a lucky coincidence really), so it doesn't start with them nor can they be added. But if you want to clear the ones from a hair that does support them, all I did was export a BGEO that already had no data in the preview (seen as no entries in Section2 and Section3). The _special morph on any non-maternity enabled hair usually fits that description. I then right click > replace the other morphs with that BGEO. That one file is good for all packages.
This technically isn't the same as having a morph that doesn't do anything- I can see on your package that the fat morph is still full of vertex data, it just isn't being directed to do anything.
I just use that as a placeholder for testing. Deleting them may be more or less the same- it was just a personal choice to not interfere with the contents of the base in any way that was unnecessary.

I'm thinking I should just start this whole thing over I was clearly confused in the beginning about CTU/bones, and now I don't think this had anything to do with either of those in the first place. Hopefully if I rephrase my question then everything will make more sense! And I will provide pictures this time—I definitely should have done that from the beginning
New title (perhaps I should rename the thread): Hair gets distorted when moving fat/muscle/facial sliders

So, as we know, I am trying to reduce the polycount of this hair. I imported the GEOMs in Blender, did my stuff, everything went fine. Now the polycount is around 22k.
Looking at the original hair in S3PE, I can see that it's using afHairMidPigtails as the base. Just for consistency's sake, I thought I would clone afHairMidPigtails and use that as my base as well (I will refer to this as the base package). So I did that with S3OC, and followed your directions to put everything together in S3PE (minus auto-assigning bones in MTK because I was working with the original GEOMs to begin with and they already had bone assignments, and then the morph part because obviously it wouldn't let me)—I opened the base package up in S3PE to export the lod0 and lod0_1 GEOMs, imported those into Blender to transfer the GEOM data to the clip and the hair respectively, recalculated the IDs, exported them (I made no morphs this time), and opened them up/saved in SimGeomEditor to apply the MTNF fix. To my knowledge these should be perfectly functioning GEOMs. I then replaced all the GEOMs in the base package with mine as well as the textures that needed it. I'm going to attach a folder to this post that is virtually the same as the previous one I attached a few posts ago (it just doesn't have any of the morphs this time)—in it, there is a file called "ss_xxbomixx_tyaefHairLamzClawClip_nomorph" and that is the completed package file after I did everything I just described. If you look at that one in game, you should be able to see exactly what I'm talking about, but I will also show you pictures.
Here is what my hair looks like (completely normal) on a default sim with the fat slider in the middle and the muscle slider all the way to the left:

And here is what it looks like with the fat slider turned all the way up:

The distortion gets worse when you turn the muscle slider up, and essentially the same thing happens if you turn the fat slider all the way down. It gets weirder when you start messing with some of the facial sliders, and I just found this out fiddling around, but it even changes with different clothes. Like... huh??? Also, I know the cheek clipping is completely expected, that is not what I'm worried about.

The original hair does not distort like this at all. What I'm trying to figure out is why. The only way I could get my hair to work normally with all the sliders is if I used YOUR base package, transferred the GEOM data from those GEOMs, and added a fat morph (that version was named ss_xxbomixx_tyaefHairLamzClawClip and that's the one you would have looked at in game). Which is extra confusing to me, because if the version of the hair with no morphs distorts with the muscle slider, and also when the fat slider is moved to the left, why on earth would a fat morph fix everything? Wouldn't I need a fit and thin morph too? And why do I need any morphs at all, if the original hair and every other hair using afHairMidPigtails as a base worked just fine without them?

What would probably be most helpful is if you could try to recreate the hair yourself using afHairMidPigtails as a base and see if you have different results. I included everything I used in the folder I'm attaching (has all the same stuff as last time, but again, no morphs) to make it as easy as possible, but it might be better to start from scratch with your own files in case it's an issue with my base package or how I'm importing/exporting the GEOMs in Blender or something. At the very least there's a .blend file with my edits to the hair/clip that you can use... but maybe you should avoid my stuff altogether and just use the GEOMs from the original hair lol. Obviously you don't have to do any of that, I know that would be more work, but it would at least narrow down whether or not it's a me problem. So it's there if you want it

Anyway, I hope all that made things a little more clear! Hopefully I didn't miss anything, I tried to be as thorough as possible, but let me know if you have any other questions.
Screenshots
Attached files:
File Type: zip  For CardinalSims 2.0.zip (17.78 MB, 1 downloads)
Forum Resident
#18 Old 31st Aug 2024 at 4:42 AM
I was going to just chalk it up to inherent differences between the methods, but I had a bit of a eureka moment while I was typing out my tangent.

It's related to the vertex IDs I was discussing with LadySmoks, funnily enough.
afHairMidPigtails uses a weird starting ID that I see on quite a few base game items and usually leave alone from not knowing why it's different. Starting at an ID of 2,147,483,647 - when the normal numbering for a hair is to start at 20,000. This is likely some kind of math overflow issue / a glitch in reading the data, rather than literally what the unmodified mesh is using (or the original would be weird, too).
So what's happening is that morphs for the clothes and body are moving verts in the hair, not anything attached to the hair itself, because their IDs are overlapping. PigtailsLowBraids doesn't have this issue, so copying its data doesn't inherit the problem. Eureka!

Now that I think about it, the overflow number is probably from hairs that don't even have vertex IDs- ie. ...ones from meshes that don't support morphs. Which will be why MTK can't attach a morph, too. The IDs on the morph mesh are wildly out of range.

This also helped reveal an important step for hat-hairs- that for the hair and accessory to be compatible with each other, they need have their ID start point manually set.
In Blender, I input 20000 as the start_id in GEOM Tools for the hair and hit Recalculate IDs.
The result end_id is what needs to be used as the start_id for the accessory! In this case, 27997. Recalculate IDs again.
Exported both meshes, fixed in SimGeom Editor, and Replace'd them back in the package.

No longer scuffed! No need to touch the morphs at all, if you don't want them.


I thank you verily for bringing this problem to attention because not only was that a fun discovery, but matching the end_id and start_id will be necessary for my method to work with morphs.

All that aside, I'd still advise using PigtailsLowBraids instead of MidPigtails as a base anyway
But at least you know why it acts up, now.
The original hair was 99% likely made in TSRW, so following my steps and not getting something identical to the original wouldn't surprise me even with the cause of this issue resolved- these steps aren't documented anywhere else and there aren't existing hairs that were made like that. It's just me out here, trial and erroring it until I have a suitable sister-method to go with my original tutorial.

-

Separate from that, I also noticed what likely caused your hair to improve in appearance over the original.
In the process of removing the old backfaces and giving the hair a new set, you've cured it of the atrocious undersides that the original has. Old tutorials about making hairs with Milkshape involve scaling the underside down ever so slightly to 99% of its original size. My best guess is that Milkshape doesn't have the ability to see which set ended up 'on top' in the way that can be seen in Blender, so this was the best way to make sure they're underneath. But it really just makes them into an awful blitz of clipping faces, which you may have seen when you removed them. The game lights faces slightly differently based on their orientation, so that clipping creates graphical oddities ingame.
Screenshots
Test Subject
Original Poster
#19 Old 1st Sep 2024 at 8:55 AM
THANK YOU!!! Wow!!! I'm so glad you figured it out. My soul feels healed lol.
That's so interesting! I would have had no idea that the vertex IDs had anything to do with it. I noticed those numbers in GEOM tools but I never knew what they meant (I still don't really, to be honest). But now I know what to look out for to ensure future hat hairs are working, so that's awesome. Someday I hope to be as knowledgeable as you!

Also, I just wanted to make you aware that I goofed on some of the files I sent you. I was initially having trouble getting the hair to work in game after doing everything you said (kept crashing to desktop whenever I would select it), and long story short, after poking around I realized the hair and clip in the .blend file had nothing under the Vertex Groups tab (which I believe are the bone assignments?)—I have no idea how that happened, but it's kind of funny that the whole thing came full circle and my final problem ended up relating to missing bones after all I also noticed the exported clip GEOM in that folder is missing one bone compared to the original. Again, no idea how that happened, but thankfully I had an older version that still had all the bones intact so I was able to get everything to work eventually. Hopefully those mistakes didn't cause any trouble on your end, or if they did I'm glad you were able to find a way around it. I am sorry about that!!

Quote: Originally posted by CardinalSims
I thank you verily for bringing this problem to attention because not only was that a fun discovery, but matching the end_id and start_id will be necessary for my method to work with morphs.

All that aside, I'd still advise using PigtailsLowBraids instead of MidPigtails as a base anyway
But at least you know why it acts up, now.
The original hair was 99% likely made in TSRW, so following my steps and not getting something identical to the original wouldn't surprise me even with the cause of this issue resolved- these steps aren't documented anywhere else and there aren't existing hairs that were made like that. It's just me out here, trial and erroring it until I have a suitable sister-method to go with my original tutorial.

Glad I could be of assistance

It is very helpful to know that different methods produce different results. I think that's an error I've been making in my content creation endeavors so far—assuming that no matter the method, the results should end up the exact same every time, and if they don't (even if the item works fine in game) then I'm doing something wrong. Since there are so many people using different methods, I'm sure in the future that will come up a lot, so I'm glad I learned that now. I vastly prefer your method to the other ones I've seen (again, because Milkshape and TSRW seem unnecessarily confusing) so I'm very grateful for the work you put in to not only figure everything out but make it understandable for beginners as well. Thank you so so much again for helping me this whole time and explaining everything so well. I cannot express enough the relief I feel that it's solved

Quote: Originally posted by CardinalSims
Separate from that, I also noticed what likely caused your hair to improve in appearance over the original.
In the process of removing the old backfaces and giving the hair a new set, you've cured it of the atrocious undersides that the original has. Old tutorials about making hairs with Milkshape involve scaling the underside down ever so slightly to 99% of its original size. My best guess is that Milkshape doesn't have the ability to see which set ended up 'on top' in the way that can be seen in Blender, so this was the best way to make sure they're underneath. But it really just makes them into an awful blitz of clipping faces, which you may have seen when you removed them. The game lights faces slightly differently based on their orientation, so that clipping creates graphical oddities ingame.

I did see that! I ended up having to take the whole hair apart to remove the undersides because I couldn't make out what was what. But interesting, that makes sense! It feels good to know I fixed something else in the process. Also makes me wonder how many hairs out there have the same problem...
Back to top