Alpha Skirt Tutorial

by CatOfEvilGenius @ MTS2, with much text borrowed from HystericalParoxysm @ MTS2
updated Nov 12, 2008

Overview

This tutorial will to teach you how to make an alpha skirt.
Such a skirt can be sheer, lacy, have different hem lines,
or even be just a dangling belt or sash over shorts or leggings.
The techniques learned here can be used to make
other alpha clothing such as dresses, pants and shirts.

You will learn how to:
- make a mesh with alpha groups w/ morphs
- match bone weights for correct skirt / leg animation when the sim moves
- make a recolor for multiple groups and alpha groups

Figure 1a - teen alpha skirt shown in this tutorial
untucked tanks by lolie2, patterned shirt (far right) by varicev, mandarin top by me


Figure 1b - alpha dress made by Marvine @ MTS2

Level 4 - Advanced

This tutorial is not for beginners. You should already know how to
create clothing meshes, alter meshes, alter UV maps, edit recolor files,
and use SimPE in general. This should not be your first or third or fifth
time using MilkShape and SimPE.

Table of Contents



Prerequisites

You should already have mastered the skills listed below.
If you have not, please work through the tutorials for
those skills before attempting this tutorial.

  • creating new clothing meshes
    • using MilkShape to edit meshes - tutorial
    • age converting meshes
    • combining parts from different meshes a.k.a. frankensteining
      tutorial - that tutorial is excellent but a little outdated, get Cat's and demon's MilkShape plugins to make it easier
    • adding new groups to meshes (this will be reviewed in this tutorial)
    • making working fat morphs
    • proper UV mapping - tutorial
  • creating recolor packages for new clothing meshes
    • using a UV map when making a new texture - tutorial
    • previewing texture in MilkShape - tutorial
    • adding extra texture and material definitions to a recolor package
      (this will be reviewed in this tutorial)
    • changing clothing properties such as age, gender, category, etc. - tutorial


What You Will Need

You will need the tools listed below. While you can substitute other tools,
such as Maya instead of MilkShape, and PhotoShop instead of GIMP, this
tutorial was written using those tools.



Alpha Skirt Mesh

The alpha skirt mesh in this example is composed of three parts:
1) legs, 2) skirt inside, 3) skirt outside. The last two groups,
the two layers of the skirt, are the alpha groups. Because the skirt
can be any length, it does not have a "modesty panel" at the bottom
like Maxis skirts do. We need to make the skirt double layered so we
can see both the inside and outside. (This cannot be done by turning off
backface culling because that will not work correctly for an alpha group.)
Next, we will go over how to make each of these groups.

Figure 2a - bottom (yellow), bottom_alpha (aqua), bottom_alpha2 (green)

Figure 2b


Making the Legs Group

The legs group must contain complete legs and a butt,
and match up perfectly with shirts. The reason it contains complete
legs is we don't know how short the skirt will be. There might even
be no skirt, just a belt or sash and short or leggings.

  1. Load a full body nude mesh of the correct age group.
    Since my skirt will be for teens, I used the teen female swimwear mesh.

  2. Cut off the top of the body, for both fit and fat groups.
    If you have a pregnancy morph, do all appropriate steps for it too.

  3. Rename the group from "body" to "bottom".
    Make sure you also change the mesh name in the comment.

    Figure 3a


  4. Just to be on the safe side, make sure the legs fit perfectly
    to a Maxis top at the waist. I loaded the teen female t-shirt mesh.
    If they don't match, use Wes' Vertex Merge, Normal Merge, and my UV Merge
    to match them up. Also make sure their bone weights match at the waist.
    Do this for the fat morph and preg morph too, if you have one.
    When you're done, remove the shirt groups.

    Figure 3b


  5. Add shoes. The swimsuit mesh had bare feet. I liked the sandals
    from the teen cuffed shorts mesh, so I cut off the bare feet, loaded
    the shorts mesh, cut off the shorts legs, then joined the shorts shoes
    to the swim legs. If needed, make sure the seam at the ankle has matching
    vertices, normals, bones, etc. Do NOT merge uv at the angle / leg joint,
    they are not supposed to be joined in the UV map. Do this for the fat morph
    and preg morph. (I later changed the shoes again, to smooth feet with
    a small heel, so that I could make many different kinds of shoes.)

    Figure 3c


    Figure 3d


  6. Shrink the butt, hips, and tummy a tiny bit because we'll be putting
    a skirt over them. Do NOT shrink the row of vertices at the waist.
    Do this for the morphs too.

  7. Save your work so far. Remember to save after every major step,
    so you can go back to an earlier version if something goes wrong.


Making the Skirt Groups

I wanted a very long skirt so that recolorists could make it long,
medium or short. There wasn't a good skirt for teens, so I used the
adult / young adult neohippie skirt as a starting point. In hindsight,
the base game adult long skirt may have been easier to work with,
but I really like the textures of neohippie and didn't want to have to
alter the UV map too much so I could still use them.


SKIRT - OUTSIDE

  1. Load the skirt you want to use over the legs mesh.
    I chose the adult neohippie skirt because it is quite long
    and I liked its textures.

  2. If the skirt is for a different age (mine was), you need to age convert it.
    Either shrink it or enlarge it as appropriate. Make sure the feet stay
    on the floor, make sure the waist is close to the waist of the legs group.

    Figure 4a


  3. If the skirt has any extra groups you don't need, remove them.
    The neohippie skirt had a 3D belt. Get rid of 3D decorations like belts,
    bows, and such because they limit what kinds of skirts you can make.
    (Or keep them if you want to, but make sure they are alpha groups and
    that the skirt still looks okay when they are transparent.)

  4. Remove the feet and the "modesty shield" at the bottom of the skirt.

    Figure 4b


  5. Get rid of any 3D ridges and belts that are on the skirt.
    This is so recolorists can put the top of the skirt at waist level
    or hip level or anywhere in between, or just make a hip scarf or sash.
    This is step took me quite a bit of time when working with this skirt.
    You can scale, cut parts out, stretch parts, insert parts, use my Normal Smoother
    if you reshape things, whatever you need to do to make it look smooth.

  6. Make sure the waist of the skirt matches the waist of the legs.
    You know the drill, vertices, normals, bone weights, etc.
    You do NOT need to match the uv of the skirt to the uv of the legs!
    You do NOT need to keep their uv's from overlapping.
    These parts will have their own separate textures.

    Figure 4c


  7. Load a shirt and make sure the skirt and shirt look good together at the waist.

  8. Double check the hips, butt and tummy again, shrink those areas
    or expand the skirt as necessary.

  9. Do all appropriate steps above for morphs too.

  10. Make any necessary adjustments to the UV map.

  11. Rename this skirt group "bottom_alpha2". Don't forget the 2 at the end.

  12. In the Comment for this group, change the name,
    and set the Opacity value from -1 to 1. This number is for depth ordering,
    it tells the renderer which group is outermost. Since this is the outside of
    the skirt, it gets a 1. The legs get -1. The inside of the skirt will get a 0.
    If you forget this step, your skirt will look very wrong, the inside will
    get drawn over the outside.

  13. Save your work. You've been saving your work throughout after every
    major change, right?

Match Up Bone Weights

Now that you have the legs and skirt, match their bone weights
where they almost touch. For example, the skirt is very, very close to
the hips, butt, and belly. If you do not match the bone weights there,
those body parts can "pop out" of the skirt when the sim moves!
Since the skirt is what the player will see, not the thighs and butt,
you may be tempted to match the legs group bones to the skirt. However,
this could make the pelvis / tummy area move unnaturally. If your skirt
is sheer enough to see those body parts, you want them to move naturally.
So if you can, try to match the skirt group bone weights to the legs group
bone weights, while keeping in mind the skirt should move fluidly, not stiffly.
Be extra careful around the butt, you don't want the skirt to move like
butt cheeks. It will if you match the weights at the butt exactly.

Another tricky issue is how to assign bone weights to long, narrow skirts.
They may look great when the sim stands still, but what about when they walk
or run? Do the sims legs pop out of the skirt? My example skirt is long
and narrow, and I have spent hours fiddling with bone weights, mesh groups,
and even the UV map. You can keep legs inside the skirt while walking.
However, this is done by making the skirt move with the legs. It looks stiffer.
Be prepared to sacrifice some of the skirts fluid motion and know that
you will probably increase the amount of texture stretching. It's a tradeoff.

Use demon's Extended Manual Edit and / or wes_h's Unimesh Bone Tools
to adjust bones and bone weights. To see bone weights, click the joints
tab and then check the checkbox marked "draw vertices with bone weights".
This can take quite a bit of time, but it is quite necessary.
You can check how the mesh moves in MilkShape (read t2suggas animation tutorial).
MilkShape will give you a rough idea of whether bone assignments / weights are okay.

You may still need to make adjustments to bone weights after ingame testing.
In fact, you may want to make a mesh and recolor now (without the skirt inside group)
and see how a sim walks, run, sits, and dances in game in your skirt.
It helps to texture the skirt with its own UV map so you can see where problems are.

DO NOT SKIP THIS STEP!

Here are the results of my bone weights adjustment for my example skirt.
I got the butt, hips, upper legs and knees to stay inside, but the calves
still clipped a bit for the longest skirts. When clipping can't be fixed
with mesh adjustment, it can be hidden with skirt texture on the legs.
Here's an example of how one creator adjusted bone weights. The problems she ran into are the same ones I had and are common.


Figure 4d


Figure 4e


SKIRT - INSIDE

We now have the legs and the outside of the skirt.
Next, we make the inside of the skirt. This is the quick and easy part!
We're going to make this skirt's normals point inside, not outside,
so the inside of the skirt will be 1) lit, and 2) correctly textured.
This also means you could give the inside of the skirt a different texture
than the outside, if you wanted to. We'll get to textures later...

  1. Keep your mesh file open, do NOT close it or do File New.
    You already saved this file, right? Now, import it again.
    You now have TWO COPIES of every single group. Delete the 2nd legs,
    the 2nd legs fat morph, and 2nd legs preg morph. You now have
    two copies of the skirt and its morphs. OR... You can select a group in the groups tab, go to the Edit menu,
    and select Duplicate Selection. You will get a new group named "duplicate".
    Rename it and make sure it has an appropriate comment.

  2. Now, go to the 1st skirt group in the list.
    Rename if from "bottom_alpha2" to "bottom_alpha" without the 2.
    Change the name in the Comment too. Your group list should now look
    something like this...

    Figure 4f


  3. In the same Comment, set the Opacity to 0.
    Now double check the comments for your groups. They should have
    the following Opacity values:
    -1 : bottom
     0 : bottom_alpha
     1 : bottom_alpha2

  4. Select the vertices in the "bottom_alpha" group (not alpha2!),
    except for the top and bottom rows, and shrink them in X and Z,
    maybe by a factor of 0.99. Do this for all of this groups morphs too.

  5. Make the normals point inside.
    In the groups tab, select the entire bottom_alpha group (not alpha2!).
    Faces menu, Reverse Vertex Order - your skirt now looks awful, but don't worry
    Vertex menu, Cat's Normal Smoother - your skirt now looks smooth and is lit
    from the inside because the normals point inside now.
    In the game, you will see the inside because the faces are reversed.

    Figure 4g


  6. Double check that each group has the correct number for its fat morph.
    For example, these are the groups I had...

    bottom
    ~00MORPHMOD.0
    bottom_alpha
    ~01MORPHMOD.0
    bottom_alpha2
    ~02MORPHMOD.0

    MorphRefNum: 0 <-- this is in the comment for bottom
    MorphRefNum: 1 <-- this is in the comment for bottom_alpha
    MorphRefNum: 2 <-- this is in the comment for bottom_alpha2

    If you made pregnancy morphs, double check that the reference numbers
    for them are correct as well.

Whew! Your mesh GMDC is done. Now, let's put it in a package file.




Mesh Package File

You now need to create a mesh *.package file. Since the mesh has multiple
groups, you will need to change a few things in the mesh file with SimPE.

The instructions in this section are almost taken verbatim from HystericalParoxysm's tutorial.

  1. Create a mesh package file the usual way, you should already know how.
    Export a GMDC, GMND, CRES, and SHPE of the appropriate age and clothing type,
    so in this case, teenage bottom, shorts or a skirt or pants, doesn't matter.
    Replace the GMDC, fix integrity, you know the drill.

  2. Select the GMND resource, and go into Plugin View.
    In the Blocklist drop-down, select tsDesignModeEnabled.

  3. Down at the bottom right, in the drop-down menu, Array should be selected.
    Click add to add an array to the list. Select your new list item just created,
    then type the name of the new group you added in Milkshape.
    You will see it change in the list as you type. So in our example,
    you need to do this for BOTH bottom_alpha and bottom_alpha2,
    the two new groups. Commit your changes!

  4. Select the SHPE resource. You should still be in Plugin View.
    Click on the Parts tab.

  5. Select the last entry in the list, then click Add.
    It will clone the last entry. Change the name of the group
    to the first new group you added. In this example, bottom_alpha.
    Do this for each group you have added to your mesh.
    In this example, you need to do this for both bottom_alpha and bottom_alpha2.
    Commit your changes!

  6. Save your mesh package file.

  7. Put the mesh package file in your Downloads folder.


Alpha Skirt Recolor

A recolor for an alpha skirt differs from single group, non-alpha recolors.
Most obviously, the texture has transparent areas that will appear invisible.
The recolor package must be aware that your mesh has several groups.
It has multiple textures for the different groups.
The legs get their own texture, and the skirt (inside and outside) gets
a separate texture. If you want the inside of the skirt to have a different
color / pattern than the outside, you must give the inside group its own
texture.


Test Textures and UV Map in MilkShape

Begin by making one set of test textures, and preview them in MilkShape.
They don't have to be lovely or perfect, but should give you a good idea
of whether your UV map is doing what you want or not. Here are the ones I used.
Remember, this skirt has no "modesty shield", so give the leg texture
some panties, shorts, tights, or leggings.

Figure 5a


Figure 5b - bottom texture

Figure 5c- bottom_alpha and bottom_alpha2 texture


Recolor Package File

Most of the text below is taken almost verbatim from HystericalParoxysm's tutorial.
I have made changes where needed specifically for alpha groups.

1. Add your CRES and SHPE and link them in the 3DIR to the correct age
as you usually do, to link the recolour package to your mesh. Remember to
delete the CRES and SHPE from the package when you’re done.

2. An alpha skirt needs at least two textures. Our example uses two.
Right click an existing TXTR resource and select Clone.

3. Now, make some changes to the new TXTR...
- Change the name of the TXTR resource, it needn't be a big change.
For example, I changed part of the name from "bottom" to "bottomAlpha".
- Right below the Filename box is "fix TGI", click this!
- Replace the image with your own, using Build DXT
(unless it is a bump map TXTR, then use Import or fix it in BodyShop later).
- Commit changes!

This will make for a much larger image, uncompressed, than running
it through Body Shop, so if you’re adding several images to your file,
you may consider making new projects of the files once complete to compress
the images. You can also run your recolor packages through jfade's Compressorizer.

3. Repeat step 2 for any further textures you may need to add.
Try to keep additional textures to a minimum.
Don't forget bump maps, but do not change their images in SimPE, do it in BodyShop later.
In this example, we will add ONE new TXTR, because both "bottom_alpha"
and "bottom_alpha2" use the same texture.
If you want the inside of the skirt to have a different color / pattern,
you need to add another TXTR for it.

4. Right click an existing TXMT resource and select Clone.
- Change the filename to match your new group name, in our case, bottomAlpha.
- Do "fix TGI"!
- Click the Content tab and Categorized Properties subtab.
- In Default Textures, change the name of the TXTR resource used for texturing,
and if using bump maps, find Default NormalMap and change the name
of the bump map TXTR too.
- In the Default Texture Blending section, set stdMatAlphaBlendMode to blend
This is needed for correct transparency.
- Click the cMaterialDefinition subtab.
- In the Type field, change SimSkin to SimStandardMaterial.
This is needed so transparent parts are transparent, not skin colored.
- In Description, change bottom to bottomAlpha.
- Commit changes!

5. Repeat step 4 for each of the groups you’re adding.
Remember that each group must have its own TXMT, but that multiple
groups can share TXTR resources, and that bottom_alpha
and bottom_alpha2 have the same texture and bump map.
Remember that the TXMT filename and Description for bottom_alpha2
should be different than for bottom_alpha.
DO THIS STEP TO SAVE DISK SPACE!

If you want the inside of the skirt to have a separate color / pattern,
you need to give it its own TXTR, but in this example, we don't do that.

Figure 6a


Figure 6b


6. Make a note of the Instance numbers given to your new TXMTs after you've
done "fix TGI". You’ll need these for the next step.

7. In the 3IDR, press the Package button. Look in the list of TXMTs for
the item with the Instance number of your first TXMT, and drag it to the bottom
of the list. Count down from the top line to find which line number your TXMT
is on. The first line in the file is 0, the second line is 1, and so on.
Make a note of what line your added TXMT is on. When I did this, I used
lines 7 and 8, but your line numbers may be different!

8. Repeat step 7 for any further parts you need to add TXMTs for, adding them,
in order, to the bottom, and making note of the line number.
So in our example, you would add a line for the TXMT for bottom_alpha,
and then a line for the TXMT for bottom_alpha2.
Make sure to commit your changes when you finish in the 3DIR.

Figure 6 1/2 - your line numbers may be different, this is just my example


9. In the GZPS (Property Set) in Plugin View, select the numoverrides line,
and change the value to the total number of groups in your mesh.
In our example, that would be 3 (bottom, bottom_alpha, bottom_alpha2).

10. Look down in the list and find the last override#shape entry.
Select it, and then click Add. This will clone it at the bottom of the list.
Change the name to add 1 to the number, i.e. if the last item was
override0shape, and you cloned that, then change the name to override1shape.
If the last item was override1shape, and you cloned it, the new one will be
override2shape. Leave the Type (dtUinteger) and value (0x00000000) parts alone.

11. Look in the list and find the last override#subset entry.
Select it, and then click Add. This will clone it at the bottom of the list.
Change the name to add 1 to the number, to match the override#shape entry
you just did. Leave the Type (dtString) alone, but under value, change it
to the name of the first group you are adding.
In our example, change "bottom", to "bottom_alpha".

12. Now select the last override#resourcekeyidx entry, then click Add.
Again, this will clone it at the bottom of the list. Change the name to add 1
to the number, to match the override#shape and override#subset entries you just
did. Again, leave the type (dtUInteger) alone. Change the value to the line number
of the first material definition you added in the 3DIR, the note you made in step 7.
Remember, we’re counting in hex here, 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 0A, 0B, 0C, 0D, 0E, 0F, 10, 11, etc.
If you’re unsure about what your line number would be in hex,
you can always use SimPE’s number converter or Windows calculator to check.

13. Repeat steps 10-12 for any additional groups you are adding.
You can clone your last entries you just added.
In our example, you just added 3 lines for "bottom_alpha",
so now you need to add 3 more lines for "bottom_alpha2".
Commit your changes when you’re done.

Figure 6b - this is just my example, your numbers may be different


14. In the GZPS resource, set the shoe sound.
Set the Shoe property appropriately for *each* recolor you make.

0 - this is a top, no shoe sound (don't use this one for a skirt, obviously)
1 - barefoot (don't use this one if you have shoes)
2 - heavy stompy boot
3 - heeled shoe, clicky sound
4 - generic, regular shoe
5 - floppy sandal
7 - armored, like a medieval knight in platemail

Commit changes!

15. Save your recolor package file.

16. Put it in Downloads.

Remember later, when you make more recolors with BodyShop, that it is silly
and will make TWO COPIES of a texture and alpha if you have two groups that
use the same texture. This wastes disk space. You can fix this by
editing the recolor package in SimPE. If you see *two* TXTR resources that
have *identical* images, get rid of the 2nd one. Then go to the TXMTs that
use that image, and make sure they both use the TXTR resource that is still there.


Test in BodyShop and the Game

Now that your mesh and recolor packages are finished, it's time to
make sure they work properly and make any necessary adjustments.
See the next section, Common Mistakes, for fixes for common errors.

  1. Start up BodyShop. Does your skirt appear in BodyShop?

  2. Go to the create a sim section of BodyShop. Make a fat sim.
    Dress this sim in your alpha skirt. Does the fat morph look fine?
    (As you can see below, my fat morph had a visible seam at the waist,
    I needed to adjust my normals to fix this.)

    Figure 7a

    top by lolie2 @ MTS2

  3. Make a recolor of your skirt using BodyShop.
    In the black and white alpha images for BOTH bottom_alpha and bottom_alpha2,
    put a big hole in the skirt. Just make a big black square.
    Import the recolor into the game. Do you see a big hole in the skirt?
    Can you see the sims' legs? Can you see the inside of the skirt?
    Now try making the black square grey. Does your skirt have a sheer panel?

    Figure 7b
    Figure 7c
    Figure 7d
    Figure 7e

  4. Exit BodyShop and start the game. Make a sim in CAS.
    Let the sim move around. Do the sims' hips, butt, and belly stay in the
    skirt? Do the sims legs stay in the skirt when the sim moves around?

  5. Make the sim fat. Repeat the test above.
Great! You're done! Now go make lots of lovely recolors. :)




Common Mistakes (and Fixes For Them!)

PROBLEM 1: Skirt is all bright blue.

FIX: Did you do something wrong or forget a step when creating the recolor file?
The renderer cannot find the material definition for the skirt.
Read the instructions for adding TXTRs and TXMTs again and double check
that you did all the steps. Did you make sure you changed the 3IDR resource?
Did you make sure you added lines to the GZPS resource?
Read those sections again, and double check your line numbers.
If none of that helps, create a whole new recolor package and try again.


PROBLEM 2: Leg silhouettes appear through the skirt, and/or it looks like the inside of the skirt is getting drawn on the outside.
(If your skirt is sheer, you should see legs through it, this error is for opaque skirts.)


FIX: Did you forget to change the Opacity value in the Comment for each
alpha group in MilkShape? Did you use the correct Opacity values?
For BOTH the alpha groups? Read the instructions for creating
the alpha mesh groups again.


PROBLEM 3: Skirt transparent areas are skin colored.

FIX: Did you forget to change the material from SimSkin to SimStandardMaterial
in the TXMT? For BOTH the alpha groups?
Read the instructions for adding and changing the TXMT in the recolor file again.


PROBLEM 4: Skirt transparent areas are black (or white, or some other color).

FIX: Did you forget to enable alpha blending in the TXMT? For BOTH the alpha groups?
Read the instructions for adding and changing the TXMT in the recolor file again.
If that doesn't fix it, did you do something wrong with your alpha? Is it all white?


PROBLEM 5: Sims' hips, butt, or belly poke out of the skirt when standing still.

FIX: Shrink the hips, butt and/or belly slightly, or expand the skirt slightly.


PROBLEM 6: Sims' hips, butt, belly, or legs poke out of the skirt when moving.

FIX: Adjust your mesh and/or your BONE WEIGHTS.
Especially in the butt/hip/belly area, you need to make sure the bone weights for the legs part and the skirt part are very, very similar or even identical. In the knees region, make sure the skirt has correct knee bone weights near the knees. Move that part of the skirt up or down if needed.


PROBLEM 7: Crack at waist or ankles when sim stands / moves.

FIX: Did you forget to merge vertex data and/or match bone weights
at the waist where the skirt/legs meet the shirt?
Or at the ankles where the new shoes meet the legs?
Mismatched vertices make a crack when the sims stands still.
Mismatched bone weights make a crack when the sim moves.
Read the mesh making instructions again.


PROBLEM 8: Visible seam at the waist / ankles.

FIX: Did you forget to merge normals at the waist and ankles?
Merge legs / skirt waist normals to a shirt or tanktop.
Merge ankle normals to leg normals before joining leg and shoes groups,
or do Align Normals before or after merging.
Read the mesh making instructions again.


  PROBLEM 4

cute skirt by fakepeeps7

PROBLEM 6


PROBLEM 8