Megan Letos's profile

Guo Pei Inspired Python Script

Guo Pei Couture Inspires Code-ture
INSPIRATION
For this project, we were asked to visit the Guo Pei exhibit at SCAD Fash in Atlanta. After looking at the dresses and gathering reference, we had to pick a dress or pattern to emulate and build in Python for Maya. I loved the dresses by Guo Pei, and I ultimately decided to use the Mushroom Dress (2008) as my reference.
I was really drawn to the crinoline and the stacking of the different skirts. I decided to move forward with this inspiration and create a Python script that would create a piece of the skirt, and then stack them and gradually scale as they moved upwards.
THE CODE
FIRST ATTEMPT
My first draft I used a sine wave deformer and a plane to try and recreate those ruffles/crinoline on the dress. I ran into some trouble with the sine wave deformer, and it turns out that non-linear deformers have some tricky syntax. It is kind of split up, so certain attributes, in this case wavelength, have to be defined in an edit rather than within the original non-linear deformer creation. After creating one ruffle, I duplicated it and rotated it around spacing 36 degrees between each ruffle. I placed these in a for loop that would go through and make 10 ruffles in total
I ended up not being satisfied with the results. It ended up looking more like a saw blade rather than a dress crinoline, so I decided to scrap the idea and head back to the drawing board.
ATTEMPT TWO
For my second attempt I was playing with NURBS circles and experimenting with the shapes I could make with the circle. I ended up giving it 100 cvs, and then started pulling every other cv up in Y, this created a wave-y shape and I thought that it would be a good starting point for a crinoline. I duplicated this and moved the duplicate circle up and scaled it down a little smaller, this created a sort of waistline making the bottom circle a hemline. I then made a curve between the two, and performed an extrusion. Following that, I needed to make a skirt fabric to lay on top of the crinoline. I used a NURBS sphere and then tried to shape it into a sort of topper. I then put all of this into a definition, makeCrinoline (), so that it could be called down later in the def that would stack these sections. I ran into trouble with the stack def because the makeCrinoline wasn't overly user friendly; there are absolutely no variables to tweak shapes and style, so this was something I needed to keep in mind moving forward.
After seeing the segments stacked together, I still felt unsatisfied. I really loved the Mushroom Dress, and I felt like I wasn't capturing the essence and/or aesthetic of the dress. So again I went back to the drawing board to see how I could maybe push the look development of this script further.
ATTEMPT THREE | FINAL ATTEMPT
So now the question becomes, how can I take what I have done and enhance it to achieve the look I want? I was satisfied with the workflow of the NURBS circles and I liked the general look I was getting out of them, so I decided to push this concept further. I ultimately decided I needed three different definitions: the first would define the shape of the crinoline, the second defines the shape of the skirt, and the final def would stack these components together to create the shape of the Mushroom dress.
CRINOLINE DEF
This crinoline def is a vast improvement compared to the first version. Rather than making an extrude, I tried a loft between two circles and it worked beautifully. I then decided to add a third circle so that the user can make even more complex shapes; for instance a crinoline that's more bulbous or rounded or something more along the lines of a sock-hop crinoline. I made sure to include variables to make it more adjustable and user friendly. This allows control over the radiuses of all three circles, and the positions along the Y axis. However putting these circles into a def caused some issues, specifically the selection of the cvs. It took a lot of trial and error to get the cvs selected, you have to call the variable and use %s and % to return/replace the circles being created within each circle variable. Once that got sorted out, this def was up and running!
SKIRT DEF
This is basically the same as the crinoline def, but it only uses two circles. I also lowered the amount of cvs to 20, this creates a light, flowy skirt that can rest on top of the crinolines.
SEW DRESS DEF | MAIN DEF
The sew dress is the main def of this script, and this is where the user should and does spend their time. The variables in this def control the number of skirts/crinoline sections in the stack, the position they stack in the Y axis, and the scale increment (scaling down as they move up). There are two for loops in this def, one that stacks the skirts and one that will stack the crinolines. The crinoline and skirt defs made above in the script are plugged into the for loops of this def; so if the user wanted to twear
RESULT
USER TESTING RESULTS
We did some user testing in class, but there wasn't a lot of time and I didn't really get good feedback. I was told my code was clear and understandable, but this was from a fellow peer who knows how to read code. So I took my code to someone who can navigate the script editor, but can't really write scripts or fully understand some of the logic behind it. I have suggested user settings to get the results that are shown above, but there are endless numbers and combinations that user could input. While the code won't error out, it will present some interesting results; meaning that the output won't really resemble a dress. My user plugged in lots of different things, and while I think it is fairly easy to understand what each variable does, maybe I need to further explore and define relationships between variables more clearly to avoid any confusion. My user also expressed interest in wanting to alter or control the amount of ruffles in the crinoline and the wrinkles in the skirt. I currently have all of that hard coded, but I do find the idea very interesting. I'm going to have to look into it more and it is going to require some serious noodling in order to get it working. The question it presents is how do we let the user set the number of cvs, while creating a line of code that will automatically select every other cv. 
CONCLUSION
I really enjoyed this project, it was a fun concept and idea to get to play with! There are a lot of to-do's yet to accomplish on this code. I'd love to a GUI in there, I just haven't gotten to experiment with Python GUIs yet. I'd want my GUI to give the user control over all the variables that I included within my code. I'm thinking just textfields, but I would consider sliders if I could code in live previews when the user scrubs through the slider. I also would like to experiment with a piece of code that will do what my user suggested during user testing. I'm not sure how to give the user control over the amount of cvs on a circle and how to have it select every other cv; regardless of what number of cvs the user inputs. I do think that this addition would make it way more versatile.

Coming over from MEL to Python was a little bit of a challenge, but once I was able to work through the different syntaxes between the two languages, it became more intuitive. I have really enjoyed learning how to script, and I hope to keep learning and practicing more scripting in the future. I love the problem solving aspects, and the satisfaction of finally nailing down a tricky bit of code that has me scratching my head. There are lots of applications for scripting skills, and I look forward to seeing where I can apply my new found love of coding!
Guo Pei Inspired Python Script
Published:

Guo Pei Inspired Python Script

Guo Pei inspired Python script that creates a stackable crinoline dress.

Published: