There is annoying behaviour that exists for wraps in both 3DS Max and Maya. When wrapping geometry to an influence that is scaling at the component/sub-object level, the thickness of the wrapped geometry does not scale and the mesh becomes jagged when reaching certain thresholds. It makes sense since polygons do not actually have any thickness, however, this is bad news for making your rigs scalable.
I was having trouble finding a solution to the problem when searching the internet. The best solution I found was to pass the wrapped geometry through a blendshape node and then scale that node. This was not a suitable solution for what I needed as the rig I was dealing with had far too many wraps. It would have meant a huge pain to get working and also a much slower rig in the end.
Read MoreI’ve been working on writing a skin weights importer/exporter the past few days. Searching online for what the fastest methods are, all I could find were web pages stating that setAttr was the fastest method for setting skin weights. Unfortunately for me, this is already what I was using and it was far too slow. After trying many different approaches for trying to improve speed, most of which were failures and none of which were fast enough, I created a simple poly cube, a two joint chain, skinned the cube to the joints and then saved out an ma file. This lead to quite the epic discovery.
This whole time that I was using setAttr, I could not understand why I was not able to just set all weights for a vert rather than having to assign a weight for each influence affecting each vert. This, I knew for certain, was what was slowing me down. I went through the same song and dance when collecting the skin weights: doing a getAttr on weightList[#].weights[#] for every single vert and influence was slow, but doing a getAttr on weightList[#].weights was fast. Made good sense. However, whenever I tried to do a setAttr on weightList[#].weights I would receive an error message telling me they had to be set individually. This is what the simple ma file helped me get around.
Read MoreI have finally released my first Shotgun API wrapper (I have another one that won’t be coming for another while yet). This one is called DoubleBarrel, and it is called that because it provides two methods of connecting to the Shotgun database.
This wrapper is intended mainly for tools that will connect to Shotgun to retrieve one piece of data and then disconnect. Think tools like frame-range fetchers for when a scene is opened in Maya or Nuke. The wrapper will provide good speed improvements in these scenarios.
Read MoreSomething that bothered me when I first started working with Python in Maya was reloading of modules. When working on tools that have multiple modules importing each other, it can be a pain to have to change something in one of the imported modules. There are a number of situations that arise where your modules just do not reload correctly. You might have imported an object from a module, or you might have imported a method with the same name as the module you imported it from, or you might have imported using an alias.
A situation came up last week at work that was somewhat related to this issue. Another one of the TDs was in the process of writing a daemon script, and we needed a way of ensuring that all of our modules get updated automatically without re-starting the daemon every single time we commit a change.
Read MoreLast week, I had to come up with a way of separating one blendshape into multiple blendshapes. So basically, imagine we have one blendshape of a full smile and we need to separate it into left and right.
If you go to the Edit Deformers menu, there is an option to paint blendshape weights. This is the tool we will be using, but the tricky part of separating blendshapes like this is the overlap area between the shapes. Since blendshapes are additive, if the overlap area is not done properly, when both blendshapes are enabled you may run into areas where it is morphing more or less than what you intended.
Read MoreI’ve been playing around lately with Maya’s assets, and I think they’re pretty cool. Following the example provided in Maya’s documents, I wasn’t too happy with the result. I had to play around a bit before figuring out how I want to use them. Here are my thoughts on some points after playing around.
There are two levels of encapsulation when working with assets: black boxing and attribute locking. Black boxing basically just hides any non-published nodes from the Outliner so the animators can’t go getting into trouble with the guts of the rig. The guts of the rig is the proverbial “big red button”: leave a note saying “DO NOT TOUCH”, and it only increases temptation. Attribute locking goes through the entire asset and locks any attributes that have not been published.
Read More