Jump to content

[guide] my first per-tutorial swimsuit mod


g96885lurking

Recommended Posts

Posted

This is my first mod as done following Nightasy tutorial. I'm posting it here for technical feedback and reference regarding any model issues and such. If you're looking for a good swimsuit mod you're in the wrong thread.

I got around to the 25th video posted in youtube and skipped ahead to 71st for the automorph-script's weight slider part.

It's a quick super low-cut UNP swimsuit (bra low-poly conformed off a cylinder and the panties were done with the garment maker) with little to no attention for details regarding design but with some care for the actual model making. Textures are also minimal (no alpha and literally a single mouse over with the default fabric brush in 3dsmax's UVW modifier).

I have it setup as the default naked body since it's easier to test out with a fresh install AND I like leaving my victims with a shred of dignity as I strip their corpses for loot :D

 

3ds screenshots: post-937862-0-64224400-1441718744_thumb.png

download: bhY9el6rk7_bikini.7z

 

Thanks for any feedback!

 

Edit 1: Steps for creating the bra:

 

Prerequisite: Nightasy tutorial 1-25 and 71. (

)
When it seems I'm skipping some steps it's because the above tutorial covers them or I already did the same earlier here. This includes but not limited to proper importing, saving and exporting.

Setting up (personal preference):
0. Reset
1. Views -> Viewport -> Layout -> 3x3 Option -> Ok
2. Save As -> my documents\3dsmax\scenes\MaxStart.max
3. Reset (test out new default)
4. Utilities -> More... -> UVW Remove (sadly doesn't save in MaxStart)

Low-poly bra with thickness:
0.0. File (the 3ds logo) -> Import -> "femalebody_0.nif" (UNP, numbers following reflect that particular body)
0.1. Hide skeleton
0.2. Modify -> Editable Mesh
0.3. Modifier List -> Smooth no. 2
0.4. Freeze body
1.0. Create -> Geometry -> Standard -> Cylinder
1.1. Modify -> (13.5,9,8,2,32)(Radius,Height,Height Segments,Cap Segments, Sides)
1.2. right click menu -> Move -> F12 (Move transform Type In; Used for moving stuff with numbers instead of mouse)
1.3. abs(0,4,88.5) (Absolute:World, moves object relative to world; As opposed to offsetting relative to the selected object; Values are (x,y,z))
1.4. Create -> Name and Color -> rename Cylinder001 to bikiniTop
1.5. Freeze bikiniTop
2.0. Unfreeze body
2.1. Clone body
2.2. Freeze original body
2.3. Rename clone to refMidBody
2.4. Remove texture using UVW Remove
2.5. Create -> Name and Color -> left click the color box and select a visible color that isn't gray/white or whatever bikiniTop is using.
2.6. Delete refMidBody's vertices below belly button and above armpits using the front view. (the purpose is to remove the arms and anything else that might confuse Conform causing vertices to stick to the wrong places.)
2.7. Unfreeze and hide original body; Freeze refMidBody.
3.0. Select bikiniTop
3.1. Modify -> Modifier List -> Edit poly
3.2. Delete the top and bottom inner cap segment using vertex selection (from this point onward the steps of modifying the cylinder will differ from Nightasy tutorial and will require symmetric application of the move transformer. That is, right click => Move following the selection of properly aligned vertices)
3.3. Press Z (will focus on bikiniTop in all viewports)
3.4. See post-937862-0-61203200-1441718753_thumb.pngpost-937862-0-74133400-1441718758_thumb.png and note the following as you manually adjust the model for your preference:
3.4.0. except for the inner cap segments, everything was moved and scaled only on the Z axis and mostly only using hard selection or a very small soft-selection. This helps estimating the desired poly-count.
3.4.0. The inner cap segments (top and bottom) are aligned mid-section bellow nipple height (moved using the border selection to mid cylinder z:93). This affects the chemfer later on. The segments are hidden within the body and aren't clipping by using XY scaling and Y moving. The latter is mostly required for what's to follow.
3.4.1. The back-strap is aligned to Z:93 as well. this isn't required just a lazy design decision on my part.
3.4.2. The segment connecting the two cups is quite tall. This design choice is mostly due to laziness (again, and again. And again... :D ) but also keeps a low poly count. This isn't required and you can easily do half-cups, front-closure, full-supports, mastectomy padded, push-ups and so on if you know what you're doing and are willing to put the time and effort into it. I was doing a low-shelf, underwire strapless padded bra which you usually see on swimsuits since it was easy to do and I just wanted to move forward with the tutorials since I'm interested in doing armor pieces, not underwear. Also, note because the entire mesh will be conformed to the body, you can't do some shelf designs that keep the cleavage hanging open without adjusting refMidBody by connecting the breasts together by filling the gap. However, you might prefer using the Garment Maker for those designs.
3.4.3. There are vertices aligned from the center (0,0.~93)(x.y,z) to the nipple. This results in a decent fit once conformed that only needs minimal adjustments for clipping. The more polygons you add to the cylinder (in the form of Height Segments and Sides, or manually adding edges and faces around the cups area to get a more rounded design), the better the fit. However, past a certain point it's better to just start off with the Garment Maker since it's easier and more accurate to use.
3.5. Move the vertices as noted above or experiment with your own design. Remember the purpose here is to create a low-poly bra that isn't paper thin. If you want smooth contours be prepared to pay the price with extra vertices which will prolong the welding process and will slow down the rendering.
4.0. Create -> Geometry -> Compound objects -> Conform
4.1. refMidBody is the Wrap-To Object; Make sure to checkbox reference; You want to project towards the wrapper's center; Going with a projection distance of 2 and a standoff distance of 1 will save you the need to manually adjust vertices around the nipple since it won't clip. But, it will also create a rather thick fabric. I went with (1,0.3)(projection,standoff); Select under Update the Hide Wrap-To Object;
4.2. Manually move vertices to cover any clipping if you favored a thin fabric.
4.3. Delete refMidBody; Unhide the original body and freeze it. Convert to poly. Delete (ctrl+backspace) and weld unnecessary vertices and edges off the back strap and sides. See post-937862-0-13517700-1441718763_thumb.png for my result.
5.0. Apply smooth no.2 to the topBikini. If you're happy with the borders and want to have as little polys as possible, you can skip making a chamfer and go to step 6.
5.1. Back to the editable poly, with edge selection, select one of the edges on top of one of the cups. Using shift+left click, select an adjacent edge to the one you selected. This will result in the entire top border's edge getting selected. Switch to border selection just to make sure it's handled properly.
5.2. Modify -> Edit Borders -> Chamfer settings; A minimal (0.1,2)(edge chamfer amount, connect edge segments) will do.
5.3. Repeat the process for the low border.
5.4. You can go back and forth from the smooth modifier to the editable poly to see the results. Note the increase in poly count is multiplied off topBikini's Sides times the connect edge segments. So, 32 sides chamfered off top and bottom with 2 connect edges will result in 128 additional polygons. In my case that meant a 218 poly bra jumped up to 346.
6.0. Unfreeze the body.
6.1. Create -> Geometry -> Compound Objects -> ProBoolean; checkbox reference, subtraction, result, retain original material, remove. in advanced you'll find a quad option for zBrush if you're going to do a normal map there.
6.2. Pick Boolean -> Start Picking -> click the body. Your poly count just went up by 2000-4000 polygons.
6.3. Convert to editable poly.
6.4. Isolate the bra. Notice all those faces tightly fitting to the body but aren't visible? Remove them. This will half the polys since those were most of the added polygons ProBoolean created to conform the shape to the body.

Done. After applying a texture, you can use the automorph script to create a weight slider as explained in Nightasy no.71 tutorial clip. I ended up with a 781 poly count on my first try with a 0.3 thick bra tightly fit using the proBool and a chamfer. So, a better looking, lower poly-count bra is very feasible.

Edit 2: sexy panties:


0.0. File (the 3ds logo) -> Import -> "femalebody_0.nif" (UNP, numbers following reflect that particular body)
0.1. Hide skeleton
0.2. Modify -> Editable Mesh
0.3. Modifier List -> Smooth no. 2
0.4. Freeze body
1.0. Instead of moving line vertices around, just run this MAXScript instead:

/*
Originally I wanted to simply draw these two splines:
[-11.8, -8.4, 71][11.8, -8.4, 71][12, -8.4, 70][1, -8.4, 61][-1, -8.4, 61][-12, -8.4, 70]
[-11.8, 7.6, 71][11.8, 7.6, 71][12, 7.6, 70][4.525, 7.6, 67.5][1, 7.6, 61][-1, 7.6, 61][-4.525, 7.6, 67.5][-12, 7.6, 70]
However, for an unknown reasons the lines were assaigned to curves instead of planes when applying the garment maker modifier even after moving them side by side or drawing them side by side from the start.
After lots of trial and error I ended up with this workaround where I draw the lines on the xy plane and then rotate it back to place.
It's still unclear to me why this works. It really shouldn't.
*/

fn drawLineBetweenSixPoints Point1 Point2 Point3 Point4 Point5 Point6 =
(
    local ss = SplineShape pos:Point1
    addNewSpline ss
    addKnot ss 1 #corner #line Point1
    addKnot ss 1 #corner #line Point2
    addKnot ss 1 #corner #line Point3
    addKnot ss 1 #corner #line Point4
    addKnot ss 1 #corner #line Point5
    addKnot ss 1 #corner #line Point6
    close ss 1
    updateShape ss
    ss
)

fn drawLineBetweenEightPoints Point1 Point2 Point3 Point4 Point5 Point6 Point7 Point8 =
(
    local ss = SplineShape pos:Point1
    addNewSpline ss
    addKnot ss 1 #corner #line Point1
    addKnot ss 1 #corner #line Point2
    addKnot ss 1 #corner #line Point3
    addKnot ss 1 #corner #line Point4
    addKnot ss 1 #corner #line Point5
    addKnot ss 1 #corner #line Point6
    addKnot ss 1 #corner #line Point7
    addKnot ss 1 #corner #line Point8
    close ss 1
    updateShape ss
    ss
)
/*
-- values when positioned over the body
bikiniBottomFrontX = 0
bikiniBottomFrontY = -3.4
bikiniBottomFrontZ = 71
*/
-- values when positioned to the side of the body
bikiniBottomFrontX = -50
bikiniBottomFrontY = -11
bikiniBottomFrontZ = 71
bikiniBottomFront = drawLineBetweenEightPoints [bikiniBottomFrontX-11.8, bikiniBottomFrontY+11, bikiniBottomFrontZ]\
                                               [bikiniBottomFrontX+11.8, bikiniBottomFrontY+11, bikiniBottomFrontZ]\
                                               [bikiniBottomFrontX+12, bikiniBottomFrontY+10, bikiniBottomFrontZ]\
                                               [bikiniBottomFrontX+4.525, bikiniBottomFrontY+7.5, bikiniBottomFrontZ]\
                                               [bikiniBottomFrontX+1, bikiniBottomFrontY+1, bikiniBottomFrontZ]\
                                               [bikiniBottomFrontX-1, bikiniBottomFrontY+1, bikiniBottomFrontZ]\
                                               [bikiniBottomFrontX-4.525, bikiniBottomFrontY+7.5, bikiniBottomFrontZ]\
                                               [bikiniBottomFrontX-12, bikiniBottomFrontY+10, bikiniBottomFrontZ]
bikiniBottomFront.name = "bikiniBottomFront"
bikiniBottomFront.rotation.x_rotation = 90

/*
-- values when positioned over the body
bikiniBottomBackX = 0
bikiniBottomBackY = -19.4
bikiniBottomBackZ = 71
*/
-- values when positioned to the side of the body
bikiniBottomBackX = -80
bikiniBottomBackY = -11
bikiniBottomBackZ = 71
bikiniBottomBack = drawLineBetweenSixPoints [bikiniBottomBackX-11.8, bikiniBottomBackY+11, bikiniBottomBackZ]\
                                            [bikiniBottomBackX+11.8, bikiniBottomBackY+11, bikiniBottomBackZ]\
                                            [bikiniBottomBackX+12, bikiniBottomBackY+10, bikiniBottomBackZ]\
                                            [bikiniBottomBackX+1, bikiniBottomBackY+1, bikiniBottomBackZ]\
                                            [bikiniBottomBackX-1, bikiniBottomBackY+1, bikiniBottomBackZ]\
                                            [bikiniBottomBackX-12, bikiniBottomBackY+10, bikiniBottomBackZ]
bikiniBottomBack.name = "bikiniBottomBack"
bikiniBottomBack.rotation.x_rotation = 90

addAndWeld bikiniBottomFront bikiniBottomBack -1
bikiniBottom = bikiniBottomFront
bikiniBottom.name = "bikiniBottom"
bikiniBottom

select $bikiniBottom
subobjectLevel = 1

actionMan.executeAction 0 "40021"  -- Selection: Select All
max select all

splineOps.startBreak bikiniBottom
updateShape bikiniBottom

1.1. select all the vertices and break (the script tends to fail at this step so we'll redo it manually)
1.2. Modifier -> Modifier List -> Garment Maker
1.3. move the front panel to (0,7.6)(x,y)
1.4. move the back panel to (0,-8.4)(x,y)
1.5. attach seams
2.0. Modifier -> Modifier List -> Cloth
2.1. in object properties select the body as a collision object with a 0.3 offset.
2.2. set bikiniBottom as a cloth; load the Spandex preset; select Anisotropic (unlock U,V); change U Bend to 80 and V bend to 160;
2.3. simulate local

Done. You can now apply a texture and weight slider.

Good luck and have fun :)

Posted

Tested this out in game. It looks pretty good tbh. The top is the only part that looks off to me. Is that line in the middle part of the design? Aside from that, the bottom is really good. Maybe also try improving the texture as well. How long did this take you to make?

 

post-365778-0-77389900-1441669771_thumb.jpg

Posted

Tested this out in game. It looks pretty good tbh. The top is the only part that looks off to me. Is that line in the middle part of the design? Aside from that, the bottom is really good. Maybe also try improving the texture as well. How long did this take you to make?

 

attachicon.gifTESV 2015-09-07 19-47-11-02.jpg

 

Thanks! Regarding the design and timeline for the top part, the tutorial was instructing a manually sculpted low-poly mesh method (for practice purposes I suppose). Knowing it's going to be a low poly-piece, I started off looking around for those swimsuits that come with two cushions that interconnect in the middle vertical seam line*. After following the guide's manual instructions for a while, I got discouraged by the results, and lazy, and ended up looking online for an automated method to fit an arbitrary shape to another :)

I ended up using "conform compound" on a cylinder. The end-result for the top piece came after a few hours (about 4-6hrs?) of trial and error fitting and comparing to the real world bras I saw but with a bigger inter cup support segment since I wasn't planning on doing shoulder straps. I think I can replicate the full process now under an hour including the chamfer and the UVW.

 

The lower piece was similarly just following the guide's garment maker part with my own shape and then adjusting the cloth modifier with different material settings since the the panties were sliding off in the simulation without (unrealistic) material adjustments :P

 

Overall, this was a day's worth learning experience since I was deviating from the guide on every turn and was learning 3d modeling and how to use 3ds while doing so :D

 

As for any further work, feel free to do with it as you like :D I have my sights set on some pretty advance armor pieces and polishing this mod up will just slow me down :D Since I need a little break (I didn't do it all in one sitting. This took over a week!) I might take the time to document the exact steps and numbers I was using before moving on.

 

Thanks for the feedback it's really great to hear the lower part was good cause I really liked the end result there too :P

 

 

 

* This kind of bras usually have a shoulder straps connecting to the vertical seam line:

(6th google hit for "swimsuits top for women" using the large images option) http://www.dhgate.com/store/product/hot-women-s-sexy-beachwear-swimwear-swimsuit/193960204.html

http://www.aliexpress.com/item/Women-s-Lady-Sexy-Beachwear-Swimwear-Swimsuit-Bikini-Bathing-2-PCS-Push-Up-Padded-Underwire-Halter/1896433868.html

http://www.tillys.com/intl/Women-Swim-Tops/_/N-8ay

Posted

k I'm done adding all the steps in for both parts. took a little longer then expected to write down a script (I've done it manually the first run) but now it should be pretty trivial to follow at least the 2nd part.

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...