Mel Matrix, “The Swarm” – VSFX 705: Programming Concepts for Visual Effects, Spring 2013
I have continued to work on the final image of the Mel Matrix project in order to continue exploring shaders and lighting. I’d like to come up with a compelling, abstract piece that shows an improvement in composition, textures, lighting, and background. Here are some renders that have been part of that process, ranging in order from the most recent to the earlier attempts:
I approached my revisions by immediately adding an HDR image to the scene, which the final render of the project (shown directly below) did not have. Then, I added a mental ray subsurface shader to begin my exploration of that type of shader.
Before this, I had never used subsurface shaders, and I am still learning about their functionality and how to get the most out of them. So far, I like them! Although there is only one subsurface shader that is applied to all of the pieces, the images shown above appear to have multiple colors attached to them, as a result of the subsurface scattering that results from light shining through the shader.
For the background, I added a plane underneath the disks to get some shadows (cast from area lights), and I turned the reflectivity of the HDR on, which I was then able to blur through its attribute editor.
Conclusions at this point:
I am still having a bit of trouble with the sampling, which is why the final image(s) appear to be noisy. I will continue exploring the subsurface shader as well as the lighting.
Final Swarm Image
The Mel Matrix Project allowed me to become more comfortable with basic programming concepts by using them in the context of Maya’s scripting language, Mel. I created an abstract design that would be generated procedurally by my Mel script and would allow the user to control certain parameters of the design with GUI that accompanies it.
Mel Matrix (Swarm) algorithm:
1. Create disk
2. Duplicate, scale, rotate and move disk to create ring
3. Duplicate, move and scale ring to create “Swarm” design
4. Adjust parameters for number of disks, disk radius and height, number of rings (levels), and ring radius using GUI
short video breakdown of rendered images
Below is a preliminary sketch I had done to determine what my procedural design might look like. I was strongly influenced by the images that follow the sketch as my sources of inspiration. I wanted to use a flat disk shape and arrange it into various circles or rings that created a complex, abstract pattern. I was interested in using a simple shape like a flattened cylinder and using it to created something intricate.
This is an illustration project I completed during my final semester as a Fine Arts major in college. Its an abstract, illustrative definition of the word “swarm” done in various Indian Inks and acrylic gloss gel.
Another source of Fine Art inspiration: painter Oliver Vernon. I was particularly interested in the disk shape he uses in this painting, as well as what he does with the shape. I was also inspired by his line work and swirling patterns.
Disney Animation Studios’ “Tangled” – primarily inspiring for animation of lantern shapes and color palette/mood
This is a screenshot of the code in the Script Editor in Maya, along with the GUI and the original design that results from the initial execution of the code. The GUI has a relatively low number of adjustable parameters because I wanted to use the command “rand” as much as possible for this design; “rand” means ‘random’, and it randomly selects a number between two values you provide for it. For instance, this command is used in the direction that each individual disk is rotated, the position that each disk is in within each respective ring, and the radius of each ring.
Difficulties, Solutions, and Final Thoughts
I ended up enjoying this assignment very much! I tend to have a difficult time with programming, and I wasn’t sure how to achieve the exact design I had in mind. While the final design has changed slightly from the original sketch, I found myself becoming increasingly more interested by the possibilities that Mel holds and the effects I was getting with my code.
I wanted to use the “rand” command as much as I could for a few reasons. First, it sparked my excitement when I learned about it in class because I thought it was cool how the computer could randomly select variables and values for the user, resulting in a different output each time the code is run. Second, I wanted this design to remain abstract and maintain some of the spontaneity that occurs in traditional art. Since I was mostly inspired by Fine Arts pieces for this project, I liked the idea of using that spontaneity and variety that does occur outside of the computer.
Some difficulties I ran into pertained to finding the proper coding commands and connecting things properly. For example, I included the command “select -all; delete;” in the procedure so that the geometry would be deleted each time the user ran the code. However, when it came time to light and texture my geometry, everything would disappear – including the default shaders in Maya’s Hypershade window. I needed to figure out how to select and delete only the geometry and nothing else in the scene.
Once that problem was solved, I wanted to create “reset” button in the GUI, and had a bit of difficulty establishing the connection between the GUI button and the actual command. In the end, I labeled the button “Change Design” because I was not able to figure out how to reset the values of the design to their original states.
Finally, the scene was getting too heavy and slowing down due to the amount of geometry that my procedure generates, and so I had to cut back on the amount of subdivisions that each disk had. When I created my initial disk, I gave it 40 subdivisions to ensure it would be smooth. However, once the procedure grew into two procedures, with multiple for loops, and a “pow” (exponential power) command, the amount of geometry was simply too large to accommodate for all of those faces. However, after having lowered the number of subdivisions, the scene is still extremely slow, which I cannot figure out how to improve.
I am happy with the results – and excited about the programming I did and the problems I solved for this project! – but I think I will continue to play with the texture and lights until I find something that is more intriguing.