Welcome
Ladies and Gents:

These forums are now closed and registration disabled.

Please join us at our new forum on Proboards. Our hope is that these new forums are more stable, provide more and better features, and allow continuation of the project forums in a safer, more secure, long term environment.

me3explorer.proboards.com

--The ME3Explorer Team

Tutorial: Porting hairstyles into ME3 using 3dsMax

Dedicated area for texture and mesh-related tutorials. This includes modder's tutorials such as how to create your own TFC files. Do NOT post help requests in tutorials; use the relevant help board below.

Tutorial: Porting hairstyles into ME3 using 3dsMax

Postby Ottemis » 16 Jul 2013, 02:12

Tutorial: Porting hairstyles using 3ds
- This is directly taken from my original blogpost for your convenience (or not).


To the effect of being able to edit and successfully import hairstyles into Mass Effect 3, ELE has taught me the basics of using 3dsMax. This tutorial covers what she's taught me, and what we've learned about hair conversion since.
Now obviously the use of 3dsMax is no picnic, so it is very conceivable this won't make much sense to you the first time you try and you will be fiddling with the controls quite some. Be bold!
If you encounter start-up issues, give it some time. Look up some more advanced tutorials etc. What I'm about to put down here will be extremely basic and will expect you to take initiative in getting to know the program.

Getting started

Depending on the source, your hairstyle will have a certain extension. Start by installing the 3ds Max Nif Importer-Exporter (Bethesda) and the ActorX Importer AND exporter for 3dsMax (Mass Effect).
Note: I am using Bethesda files as an example, but any mesh works on the same principles.

Once you've started up 3ds this is what you will see. I advise you click and watch the first link in the startup screen, it's only a few minutes worth of video.

Image

What we're going to do first (though this is completely optional) is revert to one viewport instead of the standard four. Go to view, viewport configuration, layout. Click the first option, apply, ok.
Let's import a model. Seeing as we're looking into editing hair, how about we grab the female head from ME3, we'll need it to align new hair to later. To make this easy I've uploaded the file here.
This is a psk file, so we'll need to use the ActorX importer you installed.
Go to MaxScript in the top navigation bar, select run script in the dropdown menu. Browse to the location where you saved ActorXImporter.ms, select it and hit open.

Image

Now, in the window that pops up, hit Import PSK... and browse to the location where you saved the female head, select it and hit open. You'll be treated to a top view of the model.

Try moving around the mesh. You can click and hold the left mouse-button to drag your screen and use the scrollwheel to zoom in and out when the viewport is active.
In the top right corner of the viewport you'll see a cube that lists all faces, click the faces to snap to them or hold and drag on a corner to rotate and tilt manually. With the wheel under the cube you can rotate view.
Try clicking next to the head to deselect it and then re-selecting it and play with the rotation and zoom controls. Take some time to get familiar with it =)
In the top left corner of your viewport you'll notice it says [Top][Realistic], click on them to change them (personally I use [Perspective] but vary on the second). You can try different ones and see how they affect the model.

Before we continue past this section, change your view/position to something similar to this:
Image

Picking a hairstyle

As we've installed an importer for nif files we're going to limit search to Bethesda game mods. This would include Skyrim, Oblivion, Morrowind and the Fallout Series.
Most of these mods use ported hairstyles that originate from other games, most commonly the Sims franchise. Conveniently, you can browse the Nexus sites for these games to check available mods.

Skyrim Nexus
Oblivion Nexus
Fallout3 Nexus
Fallout New Vegas Nexus

I'm going to use the Skyrim ApachiiSkyHair Pack for purpose of this tutorial. Specifically I'll be working with hairstyle number 21 which is a long female hairstyle with a braid and ponytail.
Download whichever hair you want to work with, or use the same one I'm using if that's easier for you.

Importing and editing

Files with the .nif extension you can import using 3dsMax's import function. Click the 'start' icon in the topleft corner on the navbar and simply pick Import.

Image

Browse to the location of the mesh you want to import and select the correct file, in my case that's: ..\ApachiiSkyHair_v_1_5_Full-10168-1-5-Full\ApachiiSkyHair_v_1_5_Full\Data\meshes\actors\character\character assets\hair\apachii\female\hair21.nif
Now on the popup window for nif import, uncheck Import Skeleton and hit Import.
Your viewport will now realign itself with the newly added mesh! It should show up screen-filling. If you're wondering where the head mesh went, select your viewport and scroll to zoom out:

Image

Now there are several things to note here. The orientation of the mesh is important! As we are modding Mass Effect, the hair needs to be aligned with the position of the head.
Note: The difference between location of the hair and head completely depends on which game the hair was meant to work with. If you for instance port Sims hair, it's conceivable the initial location is different from what I'm showing you here.

Before we start moving the hair though, we will be removing the skin attached to the hair mesh.
We will have to regenerate the skin later, but for now it can interfere with the edits we are about to make so it will have to go.
Select the hair and on the right side of your interface, you'll notice it says skin, above editable mesh.
Right-click and select delete in the dropdown menu.
Image

Navigate around the meshes to get a better view of their position relative to each other. As you can see, the hair is:
1. too small in comparison to the head
2. facing the wrong way
3. at the wrong height

What I've noticed is that when you scale up a mesh, it will automatically move up. So we're going to tackle these three discrepancies in the order they are listed to make sure we don't do unnecessary double work.
To scale up the hair, select it by left clicking it, right-click to open the drop-down menu and select Scale. Your cursor will change icon to a tiny triangle.
Now in the viewport ontop of the hair mesh, left-click and hold while moving your mouse up, you'll notice the hair will both scale up and move up simultaneously.

Image

Now to rotate the hair, select it then right-click to open the drop-down menu and select Rotate. Left-click and hold on the mesh and move your mouse to the left or right to rotate.
To move it along the X/Y/Z axis, select it then right-click to open the drop-down menu and select Move.
You can try to reposition the mesh with your mouse but I would advise using the X/Y/Z boxes at the bottom of the viewport. There are little arrows next to the input boxes so you can easily move along any axis in small increments.

Use all three (Move, Rotate, Scale) to reposition the hair until you are happy with it's location.
You'll want to rotate your view often so you can check for clipping issues more easily (note the ears) and to see how big the gap between the hair and the skull is at several points.

Note: You shouldn't touch the location of the head. If you accidentally move it at any point revert with control-z or select the headmesh, right-click and select move in the drop-down menu, then enter 0 (zero) for X,Y and Z on the bottom navbar.

On my example below you can see I switched to [Perspective][Realistic], as it emphasizes the shadows nicely on the edges of the mesh, so I can easily see the distance between elements. Note how nicely the mesh wraps around the ear.
This isn't always the case, I'll cover repositioning of individual elements below this section.

Image

Having done what you can just moving and rescaling the entire mesh, it's time to rework individual parts to fit around the head better.
When you have the mesh selected you'll notice on the right of the viewport the selection menu is visible. At the top it shows icons for five ways of selecting parts of your mesh. Vertex, Edge, Face, Polygon and Element.
For now select Element. When you click through the various parts of the mesh, you'll notice entire strands lighting up bright red as you select them. You can move them over any axis using the arrows that show up in the middle of the selected element.

Image

Whenever you would like to move certain parts of an element, it is advised to pull that particular element out, then select vertex under selection to move the vertices.
This way you don't run risk selecting vertices on different elements than the one you're looking to alter. You can select multiple points by either left-click dragging your mouse over an area or by clicking individual elements while holding control.
If you would like to push or pull an entire area of the mesh out, you can do this by using soft selection. The number belonging to falloff under Affect Backfacing determines how much of the surrounding area is affected.
You can see how big the area affected is when you pick vertex under selection. The colour the vertices of the surrounding area determines how much they are influenced.

Image

Here I'm using Polygon selection to push in an area of the mesh closer to the skull, closing the gap by using the y axis arrow.
I'm using a Falloff of 5. This is trial and error depending on the area you want affected. Result is on the right.

Image

By selecting a vertex or element and pressing delete, you will completely remove it. Note that this might look weird on the textured mesh ingame.
There are some instances however where this is necessary, which I'll illustrate later in this tutorial.

Texturing your mesh
- Adding a diffuse and normal

Some might prefer to edit meshes with it's textures applied so I'll add a little section on how to do this.
While having your mesh selected press M. This will open up the Slate Material Editor. Double-click your mesh name under Scene Material (1), this will open up the Navigator and fill View1.
You'll want to move the active area in View1 via the Navigator (2), position it so the red/green blocks are visible. Now in View1, double-click on the top box (3) that has "textures" and "bitmap" in the name.
This will open up the Bitmap Parameters (4). When you click on the texture path right under the header, this will open a file-picker (5).
Browse to the textures that came with the mesh download. In the case of my hair the path would be:
..\ApachiiSkyHair_v_1_5_Full-10168-1-5-Full\ApachiiSkyHair_v_1_5_Full\Data\textures\actors\character\hair\apachii\Raonjena\

Image

Once selected, you'll notice the little icon in View1 changed, but no textures are applied to the mesh yet.
Now, double-click the box that has "Norm" in the name from View1. Click the texture path behind "Normal:" in the Parameters box. This will open another menu in the same area that looks exactly like the one you just saw for the first texture (4).
Again, click the texture path directly under Bitmap Parameters and browse to the texture location. This should be the same as the first one, and it should default to that location now. You should now see the texture applied to your mesh!

Image

- Adding a working alpha

Open up the Material Editor again with M. Double-click the main box, select Blinn in the dropdown menu under Shader Basic Parameters and check 2-Sided.

Image

On your diffuse texture box, check Image Alpha under Alpha source (1). Select the box for the diffuse texture, hold shift and drag and drop to duplicate it (2).

Image

Now drag and drop a ColorCorrection box (3) from the Material/Map Browser into View1 (4). Doubleclick it and change the dropdown values for all the channels to Alpha on the right under Basic Parameters (5).
Click and drag the bubble on your duplicate diffuse (6) and connect it to the bubble on the ColorCorrection box (7).
Now connect the other bubble on the ColorCorrection box (8) to the bubble on the main box next to Opacity (9).

Image

Weighting your mesh
- Basic

Now for the fun part. Remember when we removed the skin at the beginning of this tutorial? We'll be adding it back in now.
It's function is weighting the mesh down according to the bones your mesh is linked to.

You can use whichever mesh you plan to replace ingame and take it's bones for your project. This way the mesh will import without issues and cause no crashes ingame.
The game can become unstable when the number of bones on the mesh you are replacing isn't equal to your new mesh and meshplorer currently does not allow it anymore and will throw an error. Knowing that, use either the human skull, any of the CC hairstyles or for instance Allers hair to steal bones for your weighting dependent on which mesh you plan to replace ingame.

Now on most hairstyles we can simply add a 'head' bone that will automatically affect the entire mesh.
This means that when the characters' head animates, the hair will move with it at the same angle. This is fine for short bobs and updo's but can cause clipping on longer styles. It's also adequate for testing purposes, as we'll need to go ingame a couple of times and test out our hair and subsequent changes on (an unwilling) Shep.
Select your mesh. Above Editable Mesh on the right of the viewport you'll notice it says Modifier List with a dropdown arrow. Click it and type in "skin". This will jump you down, select Skin there.
Now under Parameters press the Add button next to "Bones:", highlight Head in the popup window and press Select.

Image

To actually see what just happened, press Edit Envelopes right under Parameters, you'll see the entire hair mesh turn bright red.
Red indicates that it is fully affected by the selected bone, which in this case is the Head bone. You'll notice it also displays the actual bone inside of the mesh with axis arrows attached to it.

Image

- Intermediate

Using skin-wrap we can copy the weights of another mesh onto the one we've created. In terms of meshes that generally have the same shape and are not horribly complex, this method will do nicely.
What we want to do is find an existing mesh that has about the same length, let's say.. Allers hair. To make this easier, I have uploaded the hairstyle here.

As explained earlier, psk files are opened through the ActorX Importer under MAXScript, Run Script. Import the hair you just downloaded. Now select your own mesh. In the Modifier List type in "skin" and select Skin Wrap.

Image

Under Parameters, you'll see an empty box with an Add button below it. Click it and select the other mesh. In this case it should add HMF_HIR_PROJessica_MDL to the previously empty box now.
Click Add again to remove the highlight, make sure Weight All Points is checked, then click the Convert To Skin button at the bottom of the Parameters box. You'll now have skin and skin wrap listed above editable mesh, you can remove skin wrap.

- Advanced

For the masochists among us, manual weighting explained in short.
I want to use the bones that come with the Allers mesh, so I'll be opening that one again and deleting the hairmesh. As before, ActorX Importer under MAXScript, Run Script.
We'll add the Skin modifier, then add two bones to the envelope: Head and LeftCollar.

Image

Select Skin above Editable Mesh, In the list of Bones, select Head. Click on Edit Envelopes so you can see which area of the mesh the bones affect.
As you might have noticed, the Head bone affects the entire mesh, we'll want some of the lower parts affected by the Collar-bone so we minimize clipping, so select LeftCollar now. See where the bone is? Right on our ponytail.

Scroll down to Weight Properties and uncheck Paint Blend Weights. Now you'll see a little wrench-tool icon there, click on the Paint Weights button right under it.
When you move your mouse over the mesh now, your cursor will change. There are two ways we can adjust the brush: in size and strength/opacity.
To adjust the size, hold control and shift while you drag and hold your left mouse-button up or down. You'll notice the brush changing size and it affecting the displayed radius number.
To change the strength of the brush, hold shift, control and alt while you drag and hold your left mouse-button up or down, you'll notice the value for strength changing.
Now let's paint some weights! Red is fully affected, yellow less so, blue etc. A softer brush will allow you to create smoother transitions.
You can switch between head and leftcollar if you make a mistake. You'll notice that whichever area you painted over on the leftcollar is now reflected on the head. Aim for something like this:

Image

Exporting and testing your mesh ingame

First, delete the head mesh out of your project if you haven't yet, you can leave the bones. Just select the head and hit delete.
Now to export your hair, click the utilities tab on the right navbar. Click on More..., select ActorX and hit OK.

Image

This will open an export menu in the right navbar. Select an output folder and type in a name for your mesh.
Scroll down and uncheck bake smoothing groups, now you can hit Save mesh/refpose.

Image

Now watch the following tutorial by WarrantyVoider for the remaining steps on how to get your mesh into the game.
For reference, the PCC files containing the hair are as follows:
BIOG_HMM_HIR_PRO_R.pcc (male) and BIOG_HMF_HIR_PRO.pcc (female)

Note: Do NOT skip a step when importing and saving va the UDK. You will need your mesh to be a UPK package, not a PSK when you import into the game via ME3Explorer.

Converting the hair texture

I use Photoshop for this. As Mass Effect uses it's own system for the recolouring of hair to conform to CC colours, you'll need to convert your texture to work correctly in the engine.
There's a simple way of doing this. Open the texture in Photoshop, add a new layer and paintbucket it #008e00. Now doubleclick the layer and select Multiply as the blend mode.
Save as a DDS: DXT5 with integrated alpha. If you can't you're probably lacking the plugin, you can get it here =)

To create a texmod for the hair, the identifier to replace the deprecated ME2 custom cute hair textures is 0x487289A3.
To use the custom cute textures on the Shep that's testing the Mesh, use Gibbed and change the texture values for Hair_Diff and Hair_Mask to BIOG_HMF_HIR_PRO.Hair_Short02.HMF_HIR_PROShort_Diff

Note that if you have any transparency issues ingame, you'll have to check the alpha channel on your texture. It might be that the contrast is too low and your white's not really white in which case the game will make the entire hair slightly transparent.

Troubleshooting texture problems

When you go ingame to check your mesh, there are several potential problems with mesh-imports that aren't always easy to spot in 3dsMax.

Image

This picture shows the first I want to cover nicely. This weird lighting issue you are seeing has to do with duplicate strands overlaying eachother in the mesh. There are a few tricks to spotting these early and ways of fixing the issue.

In 3dsMax, when you have enabled the alpha texture layer, you might have noticed a weird transparency issue with some of the elements.
It's easy to spot on this particular mesh as the elements are quite large on the top of the head.

Image

If you haven't applied textures at all, switch to [Perspective][Consistent Colors] and you might notice weird blotchy spots on the mesh.
It SHOULD be evenly tinted in either white or grey per element.

Thirdly and consistently, when you select the mesh and use the Element selection tool, you'll notice when clicking some strands that they are in fact dark red instead of the normal bright red.
I'll emphasize the difference with an image comparison below:

Image

From what I can gather, the darker colour indicates the back of an element. When the back is exposed in Mass Effect 3's engine, the lighting on it sort of inverts itself which causes the weird blackness. It can also cause weird streakyness in thinner strands with alpha transparency.
Seeing how some strands will either curl around and reveal all sides from one perspective or show it's back some other way, you'll have to decide on a case by case basis whether to completely remove or simply edit elements when trying to fix this issue.
Simply click on an element and it will cycle through both overlayed elements. Select the darker red one and hit delete. You'll need to be careful you don't create any bald spots while deleting strands.
Also check out the following method of dealing with these strands by andrastessanctifiedgirdle on Tumblr who explains how to easily flip them as an alternate to deleting or moving them.

Note: Save your project as a max file, so you preserve the skin and weighting settings between exports. This will be better to load in inbetween small edits then working with your exported mesh.

Image

Fixed!

Have fun and good luck =)
Last edited by Ottemis on 10 Sep 2013, 20:41, edited 2 times in total.

Ottemis has been thanked by:
User avatar
Ottemis
Harbinger
 
Posts: 824
Joined: 11 Mar 2013, 12:14
Has thanked: 225 time
Have thanks: 247 time

Re: Tutorial: Porting hairstyles into ME3 using 3dsMax

Postby Reciprocity » 23 Jul 2013, 22:00

Wow this is an amazing tutorial, very easy to understand, thanks! I was wondering if you or anyone else knows how to get a NIF importer/exporter to work with 3ds 2013? Or maybe there is a workaround to get it into the program? This is my first dalliance with this program so I am a bit like a fish out of water currently, and google hasn't been that great of a help.
Reciprocity
User
 
Posts: 3
Joined: 16 Mar 2013, 01:39
Has thanked: 0 time
Have thanks: 0 time

Re: Tutorial: Porting hairstyles into ME3 using 3dsMax

Postby Ottemis » 24 Jul 2013, 04:31

Afaik no, nif plugin only works up to 2012, which is the version I used for this tutorial. You can read about the attempt to port it to 2013 in the comment section of the nexus download I linked.

And thanks, glad you like =)
User avatar
Ottemis
Harbinger
 
Posts: 824
Joined: 11 Mar 2013, 12:14
Has thanked: 225 time
Have thanks: 247 time


Return to TexMesh Tutorials

Who is online

Users browsing this forum: No registered users and 0 guests

suspicion-preferred