In barycentric coordinates - part 1 I showed a way to compute the barycentric coordinates for an interior point in a triangle, and described how the result could be used in a simple constraint example.
In part 2 I am going to show a python OpenMaya code example that could be used as the basis for some kind of data interpolation between meshes with differing topology.
Barycentric coordinates are useful when you want to transfer data between meshes that have different topology because they provide the basis for some simple interpolation. Take smooth skin binding for example. It is a commmon workflow, when painting weights, to start with a low resolution version of your mesh. When you are happy with the weighting you can use maya's copySkinWeights command to transfer those weights from the low resolution mesh to the detailed high resolution mesh, which may even be made up of several pieces. copySkinWeights interpolates the weights from the verts on the lo res mesh and copies the result to the hi res mesh. The smooth result you get with this workflow is usually something that would have been very difficult to achieve if you had tried to paint the weights directly on the hires mesh.
Since I don't get the time to update this blog much anymore, I thought I'd just drop in quickly to recommend a google groups mailing list that I have been contributing to for a while now. If you feel like some question/answer type discussions focused specifically on problem solving in maya this might be the place for you. There are a great bunch of knowledgeable people posting there already from time to time, but more will always be welcome. Just enter "maya he3d" in the google groups search.
Yesterday I wrote about my experiences with the OpenMaya modules for python in maya, and showed some code to get the closest vertex on a mesh from the position of a locator. Today I'm going to show the same code, rewritten to use the new Maya Python API 2.0, which, according to the intro in the manual, " is a new version of the Maya Python API which provides a more Pythonic workflow and improved performance." (more...)
Recently I was writing a python function where I needed to find the mesh vertex closest to a locator. I already knew how to get a list of vertices from my mesh, how to get their worldspace locations and how to iterate through them calculating the distance between each one and the locator to determine the closest. But the brute force approach would have been pretty slow on a dense mesh.
I'm not very familiar with the OpenMaya classes, but I was pretty sure one of them would have a method that would make this task much faster, so I began to google the problem.
Here is what I found... and what I had to do to get it to work. Advanced coders will probably find this trivial, but I'm guessing there are others like me that will find it interesting. (more...)
A few people have asked me if there is a way to use my uv layout script, djPFXUVs, on a paint FX mesh that is animating. The answer is "yes". Keep reading if you are interested in knowing how...
While browsing the interwebs recently, I noticed that for $20, you can buy something called "universal uv randomization script" on creativecash. Seeing this made me realize I should give my scripts way cooler names from now on. So get in quick and grab a copy of djPFXUVs, while it's still free. Soon it will be simply called "XP€N$IV $H1T".
A while back I posted a script called djPFXUVs that could be used to quickly re-layout uv's for paintFX leafs to help with the task of building and assigning more interesting textures. Today I thought I'd share an updated version of that script, which as you can see here, even has a UI.
Update 2012-07-28: The script has been updated with new features, which include a user interface replacing the command-line stuff. The leaf layout details explained here are still relevant and correct, except for the command to run the script. The new command can be found at the end of the new post.
There is a long, long thread on cgTalk called "Forests in maya mental ray". The discussion is all about techniques for creating and rendering the vast numbers of polygons needed to make convincing grass and trees in large numbers.
Maya's paintFX can be used to make trees which can be converted to polygons with leaves that consist of just a few polys per leaf. Texture maps (color, opacity, bump etc) are then applied. The default output from the paintFX conversion has each leaf mapped to fill the standard uv quadrant, so each leaf gets a copy of the texture. This can look pretty good, but the repetition is usually very obvious. You could break the leaf mesh into a few parts and assign variations of the leaf textures to each part. But a more efficient way is to layout the uv's so that groups of leaves are mapped to different parts of the uv quadrant in a 4x4 tiled patternfor example. Then you can make a texture map with leaf variations arranged in the same 4x4 tile pattern. Now you can have 16 different looking leaves on the tree, almost as easily as you can have one.
Default paintFX conversion gives you this
But what you really want is something like this 4x4 tile pattern (or maybe 2x2 or 3x3)
The problem is that you might have 50,000 leaves on your tree. It would be very difficult to select and edit the uv's for different leaves by hand. This is something that needs to be automated (more...)
This time last year I started a new job at a new studio. For me, this was a big change since I had been at the previous studio (one that I helped build from almost nothing) more than 20 years.
My new job has given me the opportunity to learn several new applications and as a result I have found little time to update my blog and it has been very much neglected.
So to begin a new year of enthusiastic blogging, I've decided to write a (long, possibly boring) post about what I've been doing the last 12 months. It is just a quick rundown of changes affecting my general workflow. If you are still interested, keep reading (btw... the photo is my new puppy, Hollywood) (more...)