Haydee 2

Haydee 2

Not enough ratings
Haydee 2 Outfit creation, supplementary guide.
By P_R_A_E_T_O_R_I_A_N
Hello there! I am writing this little document/guide (?) as a supplementary read to Tabby!’s wonderful guide on how to create outfits in Haydee 2. I have nothing but respect towards that modder, however, I also cannot shy away from the fact that their guide has a LOT of critical info that I believe is absent - information, details explanations that stumped me for literal weeks, or had me shout “well how the F(uck) was I supposed to know that it works like that!?” on almost every grueling step of the process. It's a difficult and most importantly, time consuming rhythm that you can nonetheless get into, and I want to help you with that, giving back to the community and all.
   
Award
Favorite
Favorited
Unfavorite
Intro
HAYDEE 2 OUTFIT Document - Common Pitfalls

The following document is dedicated to the lovely people of the Haydee modding discord community. I wish to thank each and every one of you for helping me out on this peculiar but tenuous journey. I won’t be forgetting this any time soon.


Hello there! I am writing this little document/guide (?) as a supplementary read to Tabby!’s wonderful guide on how to create outfits in Haydee 2. I have nothing but respect towards that modder, however, I also cannot shy away from the fact that their guide has a LOT of critical info that I believe is absent - information, details explanations that stumped me for literal weeks, or had me shout “well how the F(uck) was I supposed to know that it works like that!?” on almost every grueling step of the process. It's a difficult and most importantly, time consuming rhythm that you can nonetheless get into, and I want to help you with that, giving back to the community and all. Especially with the third game on the horizon.

Again, perhaps things I am going to list here are a no brainer, and for that I apologize. But if this info helped me, maybe it will help you too <3. Thanks.
Software side:
Software side:
1. First things first, I absolutely recommend you get GIMP before even getting started, it's an open source image editor that can work with .dds files, an image format that Edith uses for its textures.
2. Notepad ++, another open source program. I was daft enough to not realize that for your custom character to work you actually need to write CODE for that to happen, and Notepad++kinda helps with that!
Blender Side:
Modelling side:


1. Let us begin with names. As we all know, in Blender, each model has a “name” assigned to it. The guide touches on this but, I would like to add one little detail to it. I thought that as long as my exported Dmesh had a name devoid of any special letters, all was well and the model could have whatever jumbled mess of symbols it wanted in Blender. That is simply not the case. Make sure to clean up the names in blender before exporting, or it will just not appear in Edith. [See image 1]


2. A problem with Materials. Since Haydee only comprehends one material per model, you need to make sure that there is not even an empty material slot present in said model - like in the image. HaydeeTools addon will not function in such a scenario. At least it did not in my case. [Image 2]




3. Triangulation. In edit mode, hit F3 and type “Triangulate” before exporting your model into Edith. As you can see in the image below, both programs triangulate the meshes somewhat differently. On my most recent outfit, I’ve had “black triangles” present on a model with clean UVs due to the fact I hadn’t triangulated in Blender and allowed Edith to do it upon importing it. Do make sure to always undo the triangulation, for ease of tinkering, should need arise. [Image 3-4]



The black triangles on the lower model did not appear when it was triangulated in Blender beforehand.

3.5 When working on someone else’s model, I would highly advise checking if they are using blender’s own generated materials or image textures. On my first project I got INCREDIBLY lucky that the creator included the old, now redundant image textures of the model. It can function as a metric to gauge the effort and time you need to invest in the project. Chances are good that you may also have to do some texture editing as well, so be ready for that.

4. Make sure your model does not have an active subdivision surface modifier.

5. No brainer, but just make sure to scale up your models to match the imported Haydee skeleton and not vice versa. Will save you a small headache, trust me.

6. To make sure that the mesh gets exported with all the vertex data needed for it to actually function in game, always have the skeleton selected and then the mesh. You won’t be able to generate the .skin files in Edith without this. The system will simply say that there is no skin data on the dmesh. [Image 5]

7. I would highly advise keeping as many backups as you can. Nobody wants to tinker with a model without a way of going back, and trust me - you will be doing a clockmaker’s workshop’s worth of tinkering.









8. Should you have to join meshes, always make sure that neither of them have multiple UV maps, because joining these will immediately flatten one of the models’ UV islands into a single, tiny cluster. In my case, not knowing this detail set me back for half a week. Below you can see an in-engine example. [Image 6-7-8]




As you can see in blender, it looks something like this. The images are a bit borked, but you can clearly observe in image 2 that the non-selected UV islands are just gone, after combining the two meshes together.

9. When it comes to weight painting, I will sort of say that it is not as bad as Tabby describes it. I’d actually dare to say that I found the Vert group renaming process to be quite meditative (it also may be because that was the only step in the whole process that actually went without any issues and complications XD). You do not actually have to painstakingly rename EVERY single one, especially if the model you are working with is topologically symmetrical (not visually, but topologically), as you can rename the vertex groups on one side of the mesh and mirror them. There are some good methods of vertex weight transfer that can work with asymmetrical characters as well. I will link them here. [Image 9]

Youtube [.com/watch?v=Ha_YU5xJsSc&list=PL8gSOadynPdWvBfE30z6Pr9XdnpZ2bUsp&index=3&ab_channel=CGDive%28BlenderRiggingTuts%29]

Also fun detail: Apparently, if you hide pieces of the mesh in edit mode, they also disappear in weight painting mode, just in case you need to touch some details up in hard to reach places.
Another fun fact: Don’t be me and manually limit the weight coverage on the model’s knees. I did not pay attention to it and upon export, it went wobbly like that pitch black in-engine model earlier.

10. For those less versed in the rigging side of blender, make sure to move the position of the model’s head to match the reference Haydee model’s almost to a T. If you wish for your character’s eyes/eyelids to function properly, the eye/eyelid bones NEED to be located deep in the eyes. I would have saved countless of work hours had I learned of this trick sooner.
Texturing/Engine side:
Texturing side:

1. Edith has a strange way of reading UV maps, it can be said that it reads them “backwards,” so to speak? I have never encountered such a bizarre thing in my life. [Image 10]

Experience taught me that, while flipping the UV maps can work in blender, it can be somewhat imprecise, something that will be noticeable in the final result. Hence I recommend using GIMP’s in-built, “Flip the image vertically on export” for ease of convenience.

2. Additionally, if your image has transparent sections (and Haydee’s bizarre normal maps), make sure to set the “compression” level to BC3. For materials that have no transparency and are not said normal maps - BC1 works well. Make sure to hit “Generate mipmaps as well.”

3. Normal maps in Haydee are strange to say the least, they are the embodiment of Slavjank, and based on RRRG format (red,red,red,green). I’ll put a screenshot from our discord server guide:
[Image 11]

4. Roughness for example uses red color. Red basically tells the engine: “Make this shiny when I crank up the “speculars” in the engine’s material creator/editor.”

More red = More reflectiveness. When using Speculars, do make sure to not have it cranked to the max as the material kinda becomes boked. Keep it at 0.300-200 ish.
[Image 12]

5. ALWAYS make sure to check the dimensions of your textures (can be seen in the file’s “properties). For ex. 4K textures are 4096x4096, right? Well, some of the textures my first model used were for some ungodly reason 4000x4000, which caused edith to completely ignore them. Make sure to use “standard” resolutions - nothing too exotic.

In engine:

1. Some basics that got me hopelessly lost in Edith.
Right click will bring out this menu. Which will be used to spawn the models. [Image 13]

2. Hitting F1 will bring out this menu. It can be used for exporting Skin and Mesh files from an imported Dmesh. [Image 13]

3. To create materials in Edith, maneuver to this window. These three keys will save you some time of just aimlessly wankering around. Would have done for me at least XD.
4. If your model has transparent bits, make sure to set its “type” in the material editor to Mask, or Hair. See the image above for reference. For hair, use the Hair type. [Image 13]

Coding side:
Creating an Outfit file:

1. Please, do not make my mistake and do not leave the .outfit file INSIDE the folder that has your character data. Edith cannot look that far and your character will not appear in the game. Learn from my mistakes. [image 14]



The outfit file itself is where you will need to write some code for it to work. I have never coded in my life before.


I will now try my absolute best to explain how you can write that code. Do note that this thing is very fickle and spelling sensitive. Even as much as a capitalized letter is enough for something to not load. Again, I am a total amateur at this. I’m just trying my best XD:


Let us begin, [Delete whatever is written like this]


outfit "SerExprimental" [Obviously, you need to make sure it matches with your file’sname]
{
preview "Outfits\SerExprimental\thumbnails\Thumb.png"; [Self explanatory]

Value Default "Outfits\SerExprimental\thumbnails\Thumb.png";



slot Body Default [This is where the fun begins, this will be the slot that governs the very base of your model, what will be displayed by default. I encourage to keep this as barebones as you can, so that you can easily add apparel and other trinkets to your model through other slots]
{
Preview "Outfits\SerExprimental\thumbnails\Nude.png";

value Default "Outfits\SerExprimental\thumbnails\Nude.png"; [These will allow for your preview images to appear]
value Jacket "Outfits\SerExprimental\thumbnails\BWJ.png"; [Value, Jacket, means that there will be another sub-slot selection in this one. If by default this character is nude, the jacket selection will give her A jacket.]
}
mesh
{
condition
{
slot Body Default; [ This is the code you use for Whatever you want to be displayed in the default slot, for ex. Eyes, hair, ears.]
}
mesh "Outfits\SerExprimental\2SER.mesh";
skin "Outfits\SerExprimental\2SER.skin";
material "Outfits\SerExprimental\materials\TestmaterialSer.mtl"; [This is your material that you create in Edith”
}
mesh
{
condition
{
slot Body Default;
}
mesh "Outfits\SerExprimental\Lashes.mesh";
skin "Outfits\SerExprimental\Lashes.skin";
material "Outfits\SerExprimental\materials\browD.mtl";
}
mesh
{
condition
{
slot Body Default;
}
mesh "Outfits\SerExprimental\Brows.mesh";
skin "Outfits\SerExprimental\Brows.skin";
material "Outfits\SerExprimental\materials\browD.mtl";
}
mesh
{
condition
{
slot Body Default;
}
mesh "Outfits\SerExprimental\SerNails and Tooes.mesh";
skin "Outfits\SerExprimental\SerNails and Tooes.skin";
material "Outfits\SerExprimental\materials\browD.mtl";
}

[Since my model had lashes, nails, toes, brows as different objects, I had to include ALL of them in the Body Default slot and Jacket slot for them to appear]



slot Hair Default
{
preview "Outfits\SerExprimental\thumbnails\HairF.png"; [So same thing here. You start with the new slot’s name and then decide how many subslots will be in there! You want a version with bangs, curly hair and ponytail, well then make 3 different values with distinct names and thumbnail pngs and you are set!]]
value Default "Outfits\SerExprimental\thumbnails\HairF.png";
value Bangless "Outfits\SerExprimental\thumbnails\HairP.png";
value MainHair "Outfits\SerExprimental\thumbnails\HairM.png";
}

mesh
{
condition
{
slot Hair Default; [make sure to also modify this “default” text to whatever value you have set above. Again. Don’t repeat my mistakes XD]
}
mesh "Outfits\SerExprimental\SerPolytail.mesh";
skin "Outfits\SerExprimental\SerPolytail.skin";
material "Outfits\SerExprimental\materials\hairD.mtl";
}
mesh
{
condition
{
slot Hair Default; // Same Here "Hair - SerPony"
}
mesh "Outfits\SerExprimental\SerPony.mesh";
skin "Outfits\SerExprimental\SerPony.skin";
material "Outfits\SerExprimental\materials\hairD.mtl";
}
mesh
{
condition
{
slot Hair Default; // Same Here "Hair - Hairbanddmesh"
}
mesh "Outfits\SerExprimental\Hairbanddmesh.mesh";
skin "Outfits\SerExprimental\Hairbanddmesh.skin";
material "Outfits\SerExprimental\materials\browD.mtl";
}
2 Comments
P_R_A_E_T_O_R_I_A_N  [author] 17 Jan @ 8:11am 
Glad I could help mate.
You helped me out, so it makes me happy I could assist as well.
tabby 17 Jan @ 7:36am 
Oh my goodness. I can't thank you enough for putting this out there. I have been quietly updating my own modding guide to help with the clarity and vagueness I offered. This touches about everything that I wanted to cover myself! I didn't even know about the triangulation method and I was still trying to figure out speculars! Again tysm, I genuinely think this is a better guide than mine right now lol.