<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3269636004740581152</id><updated>2012-02-16T10:36:55.162+01:00</updated><category term='Modular Rigging'/><category term='Understanding'/><category term='Research'/><category term='Facial Rigging'/><category term='Scripts'/><category term='Notes'/><category term='Coding Notes'/><category term='Ideas'/><category term='Kinematics'/><category term='API'/><category term='Tips and Tricks'/><category term='Rigenerator'/><category term='Demo'/><category term='Issues'/><title type='text'>Maulik's Technical Art Blog</title><subtitle type='html'>Maulik's blog about technical art, the dark side of creating computer graphics art :)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>66</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-1025626300759152334</id><published>2012-01-25T19:24:00.000+01:00</published><updated>2012-01-25T19:26:11.559+01:00</updated><title type='text'>Notes: Building a multi-way (group) constraint</title><summary type='text'>I have been highly inspired by the work that Andrea Maiolo and Tim Naylor did on multi-way constraint system, particularly what they presented at Siggraph 2006 on "Bi-Directional Constraining". I think I first saw their Siggraph work when I was at school in 2008 and that's what got me into understanding Maya's DG and matrix mathematics for 3D transformations. Since then I have tried to solve this</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/1025626300759152334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2012/01/notes-building-multi-way-group.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/1025626300759152334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/1025626300759152334'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2012/01/notes-building-multi-way-group.html' title='Notes: Building a multi-way (group) constraint'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-hGH_yLp-XA4/Tx7Uqm9r-yI/AAAAAAAAArw/nuTu-ktg67A/s72-c/rotational-noncummutative.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-1491500579742505656</id><published>2012-01-12T14:31:00.000+01:00</published><updated>2012-01-12T16:06:35.836+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Understanding'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>Mysterious "geometry" attribute and Geometry Constraint</title><summary type='text'>Geometry constraint is a bit special because it does not connect its output to transform attributes of a constrained node allowing us to key them. Out of curiosity I looked at the connections in hyper graph and I see that output of the constraint node is connected to "geometry" attribute of the constrained node (any transform node). One would think that this attribute would have something to do </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/1491500579742505656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2012/01/mysterious-geometry-attribute-and.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/1491500579742505656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/1491500579742505656'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2012/01/mysterious-geometry-attribute-and.html' title='Mysterious &quot;geometry&quot; attribute and Geometry Constraint'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-910611558869163532</id><published>2012-01-05T17:30:00.000+01:00</published><updated>2012-01-06T16:00:01.711+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Coding Notes'/><title type='text'>MPoint '=' assignment operator and float[3]</title><summary type='text'>All 3d packages define a 3D point as (x,y,z,w). Last property 'w' is included based on how homogeneous coordinate system works. And this 'w' always needs to be 1 when we do calculations. Maya's implementation of this 3D point is done in MPoint class. This class also defines '=' operator which will copy the values of a float[3] to the given point. But it's really not a good idea to do the </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/910611558869163532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2012/01/mpoint-assignment-operator-and-float3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/910611558869163532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/910611558869163532'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2012/01/mpoint-assignment-operator-and-float3.html' title='MPoint &apos;=&apos; assignment operator and float[3]'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-5408887510694845887</id><published>2012-01-04T16:58:00.000+01:00</published><updated>2012-01-06T10:22:32.287+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Understanding'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>Freedom of a constrained node</title><summary type='text'>When you constrain a transform node using Maya's constraints, it stops inheriting transformations from its top hierarchy. However, if you just connect (for example) translation attributes directly or using simple arithmetic nodes, the connected node continues to inherit transformations from its parent. The difference is because of how a constraint calculates the final output. Let's do a simple </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/5408887510694845887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2012/01/freedom-of-constrained-node.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/5408887510694845887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/5408887510694845887'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2012/01/freedom-of-constrained-node.html' title='Freedom of a constrained node'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-U379DpTT5DM/TwVvw9SkbXI/AAAAAAAAAqQ/7YSH8fIW6CQ/s72-c/pointconstraint-space.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-3137696819803803175</id><published>2011-12-20T10:08:00.001+01:00</published><updated>2011-12-20T10:08:52.355+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rigenerator'/><category scheme='http://www.blogger.com/atom/ns#' term='Research'/><title type='text'>Rigenerator: A Short Introduction</title><summary type='text'>I am updating Rigenerator slowly, but steadily with exciting updates coming soon. Before I post any updates I thought it would be a good idea to post some introduction about this tool.

At a basic level Rigenerator is a tool to regenerate rigs in Maya. It allows you to gather information about selected rig by doing advanced traversal through Maya's scene graph. After gathering information and </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/3137696819803803175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2011/12/rigenerator-short-introduction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3137696819803803175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3137696819803803175'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2011/12/rigenerator-short-introduction.html' title='Rigenerator: A Short Introduction'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-118465417687626157</id><published>2011-12-10T14:02:00.001+01:00</published><updated>2012-01-12T14:37:17.119+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Coding Notes'/><title type='text'>Some python goodies</title><summary type='text'>I love coding in python and every time I work with it, I feel enthusiastic about this programming language. While coding it is also exciting to learn new features and figure out what you can do with it. Following are some useful snippets that I am using in my rigging framework.  

1. Assign values from a list that is shorter or longer than the original list
I find this simple function handy since</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/118465417687626157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2011/12/some-python-goodies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/118465417687626157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/118465417687626157'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2011/12/some-python-goodies.html' title='Some python goodies'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-9156269888441263111</id><published>2011-10-15T19:29:00.001+02:00</published><updated>2011-10-15T19:33:47.450+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Demo'/><title type='text'>Eggroll setup update</title><summary type='text'>I meant to post this for a while, but never got around to finish a demo of it. Inspired by Mike Best's eggroll setup, I wanted to do a similar setup because it was a good challenge. After my previously failed attempt I switched to a special matrix(found from google) to calculate rotation of the object around an axis using maya expression. This worked very well and I finally got the rolling </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/9156269888441263111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2011/10/eggroll-setup-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/9156269888441263111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/9156269888441263111'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2011/10/eggroll-setup-update.html' title='Eggroll setup update'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-6398977848282939490</id><published>2011-10-15T17:38:00.000+02:00</published><updated>2011-10-15T17:38:40.674+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rigenerator'/><title type='text'>Bare essential commands that create Maya's scene</title><summary type='text'>If you open .MA maya file in notepad, you will see many lines of code based on your scene size. If you go through the code, no matter how big the scene is or how many nodes are there, the whole scene is created by only 4 commands! That's it! It's very easy to find this information, but what amazes me is that the programmers were able to abstract the logic of scene creation to the following atomic</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/6398977848282939490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2011/10/bare-essential-commands-that-create.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/6398977848282939490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/6398977848282939490'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2011/10/bare-essential-commands-that-create.html' title='Bare essential commands that create Maya&apos;s scene'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-604985969490470810</id><published>2011-04-14T11:52:00.003+02:00</published><updated>2011-04-14T13:20:12.947+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Understanding'/><title type='text'>Making Animatable Pivot: Part 2</title><summary type='text'>In the first part, we looked at the basics of how pivot works and what is the main challenge in making pivot animatable. In this part we take a look at the implementation detail to build a system which will calculate movement around given pivot point. Here is the hierarchy I am using for this system.

netPivotShift|_object   |_ pivot_loc   |_ object_rot

Instead of step by step tutorial, I will </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/604985969490470810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2011/04/making-animatable-pivot-part-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/604985969490470810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/604985969490470810'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2011/04/making-animatable-pivot-part-2.html' title='Making Animatable Pivot: Part 2'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-sM7LQafumrQ/Taa7jEVm1TI/AAAAAAAAAjY/h3EN2b1pqxw/s72-c/pivot-initial-final.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-2541393825178338632</id><published>2011-04-09T12:11:00.004+02:00</published><updated>2012-01-12T14:38:10.863+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>WIP: Unsuccessful attempt at rolling an egg(unknown type)</title><summary type='text'>


I can think of two ways to implement rolling egg.
1.  Use aim constraint to point in the direction of movement and have  rolling axis as your up vector. The object can then roll about this up  vector. I will implement this approach later.
2. Calculate rolling rotation around the rolling axis using matrix calculations.  
!These approaches do not simulate the actual physics.!
  
I am currently </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/2541393825178338632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2011/04/wip-unsuccessful-attempt-at-rolling.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2541393825178338632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2541393825178338632'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2011/04/wip-unsuccessful-attempt-at-rolling.html' title='WIP: Unsuccessful attempt at rolling an egg(unknown type)'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-1359008193418332461</id><published>2011-04-03T22:28:00.001+02:00</published><updated>2011-04-12T18:20:26.492+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Understanding'/><title type='text'>Making Animatable Pivot: Part 1</title><summary type='text'>First concept here to understand is the rotation operation and how it is affected by pivot point. Here is a post I wrote on my blog last year to understand how pivot works.

Understanding Pivot Point
First we will look at how rotation around pivot point is calculated in simple steps. 
1. Translate the object from its current location to the pivot point location
2. Rotate the object
3. Translate </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/1359008193418332461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2011/04/making-animatable-pivot-part-1.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/1359008193418332461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/1359008193418332461'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2011/04/making-animatable-pivot-part-1.html' title='Making Animatable Pivot: Part 1'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-7910324592291315068</id><published>2011-03-20T10:30:00.002+01:00</published><updated>2011-06-16T17:25:35.687+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>Removing multiple items from textScrollList</title><summary type='text'>I have started working more with Maya UI and I can see why people get frustrated sometimes with handling UI interaction using mel. For example, there is no function to get an item at a given index.

Deletion of multiple items from a list or an array is always tricky because, while deleting multiple items the indices are updated automatically. One solution is to start deleting at the highest index</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/7910324592291315068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2011/03/removing-multiple-items-from.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/7910324592291315068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/7910324592291315068'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2011/03/removing-multiple-items-from.html' title='Removing multiple items from textScrollList'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-1447038939075416740</id><published>2011-03-14T10:48:00.001+01:00</published><updated>2011-03-14T10:50:07.457+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rigenerator'/><title type='text'>Rigenerator Update</title><summary type='text'>I have switched back to rigging related work. I have resumed my work on Rigenerator by analyzing my existing code. It can be very helpful to take a break from the work and revisit it later. I found many ideas to improve and more importantly simplify the logic for Rigenerator. Earlier it was not very bad, but I always felt that the code and logic I had written was a bit twisted and difficult to </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/1447038939075416740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2011/03/rigenerator-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/1447038939075416740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/1447038939075416740'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2011/03/rigenerator-update.html' title='Rigenerator Update'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-2754609755959853629</id><published>2011-02-12T23:11:00.003+01:00</published><updated>2011-03-07T22:57:42.494+01:00</updated><title type='text'>New Year New Adventure</title><summary type='text'>It's been very very long since I posted any updates. I have been working on many projects simultaneously so it's been difficult to find time. I have done facial rigging for a friend of mine and I am also working on my Rigenerator project. For Rigenerator, I have started working on converting code for special nodes into the code that uses node's own command, e.g. cluster. Later I have a plan to </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/2754609755959853629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2011/02/new-year-new-adventure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2754609755959853629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2754609755959853629'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2011/02/new-year-new-adventure.html' title='New Year New Adventure'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-4227894395470320975</id><published>2010-08-02T18:09:00.002+02:00</published><updated>2012-01-12T14:35:36.839+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Issues'/><title type='text'>MSyntax Flag Definition &amp; Invalid Flag Error</title><summary type='text'>I had some frustrating moments in making flags work for a command using MSyntax. A part of it was my ignorance in reading the function detail, but the other one I am not sure is mentioned in docs. Here is what it says in the doc. for MSyntax::addFlag(const char* shortFlag, const char* longFlag, ......)

shortName  the string representing the short (&lt; 4 character) version of the flag
longName   </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/4227894395470320975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/08/msyntax-flag-definition-problems.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/4227894395470320975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/4227894395470320975'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/08/msyntax-flag-definition-problems.html' title='MSyntax Flag Definition &amp; Invalid Flag Error'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-7041322179209478479</id><published>2010-07-20T15:41:00.004+02:00</published><updated>2011-03-20T10:23:10.914+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rigenerator'/><title type='text'>Rigenerator: Update 1</title><summary type='text'>The major change in the new version is the rule based DG traversal. Earlier DG traversal was unrestricted and it will fetch all the nodes involved in the scene. In the new version I have added rules that are stored in a simple dictionary structure which can be updated dynamically. This allows me to select a DAG structure and Rigenerator will only get the rig involved in that selected DAG tree.

</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/7041322179209478479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/07/rigenerator-update-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/7041322179209478479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/7041322179209478479'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/07/rigenerator-update-1.html' title='Rigenerator: Update 1'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-2820782037770780373</id><published>2010-07-19T14:54:00.001+02:00</published><updated>2010-07-20T22:45:00.983+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>FreeMind: Mind mapping tool</title><summary type='text'>It is very important to organize not only your code but the thought process and all the ideas that come up during planning of a project. I started with my rigging framework and then branched to make Rigenerator, which by itself is now a big project. Each feature of Rigenerator requires good amount of planning to consider all possible cases. At the current stage  code of Rigenerator is turning </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/2820782037770780373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/07/freemind-mind-mapping-tool.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2820782037770780373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2820782037770780373'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/07/freemind-mind-mapping-tool.html' title='FreeMind: Mind mapping tool'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_YaF97CrfShk/TEWcOj1xFKI/AAAAAAAAAgE/3E-nmiab9n8/s72-c/specialcmds_map.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-4429272367165243708</id><published>2010-07-14T14:34:00.000+02:00</published><updated>2012-01-12T14:35:36.842+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rigenerator'/><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>Rigenerator : Converting deformer network into its command</title><summary type='text'>While developing my Rigenerator tool, I am studying more and more about Maya DG graph and how to reproduce it. Right now I can create all the nodes individually and put them together to recreate the rig. However, I want to be able to replace those individual commands with a specific command e.g. use cluster instead of individual create, addAttr, setAttr, connectAttr commands for each node </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/4429272367165243708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/07/rigenerator-converting-deformer-network.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/4429272367165243708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/4429272367165243708'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/07/rigenerator-converting-deformer-network.html' title='Rigenerator : Converting deformer network into its command'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-3011701660876763331</id><published>2010-07-13T13:14:00.002+02:00</published><updated>2012-01-12T14:35:36.835+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>Cluster Deformer Weights</title><summary type='text'>Each component affected by a cluster has its own weight stored in the deformer attribtue .wl (weightList). This attribute is inherited from weightGeometryFilter node. ".wl" is a two dimensional array with first dimension specifying an array related to each geometry object a cluster affects.e.g.
cluster1.wl[0] =&gt; array of weight values for nurbsCurve1cluster1.wl[1] =&gt; array of weight values for </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/3011701660876763331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/07/cluster-deformer-weights.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3011701660876763331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3011701660876763331'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/07/cluster-deformer-weights.html' title='Cluster Deformer Weights'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-3944222151322657315</id><published>2010-06-22T16:27:00.002+02:00</published><updated>2010-06-23T10:36:44.784+02:00</updated><title type='text'>maulik13: New Design coming soon...</title><summary type='text'>I am going a bit slow on my rigging framework since I decided to redesign my website (maulik13). I needed more space to put some content and share some of my scripts. And I wanted to add a simple database so that I can update downloads and portfolio easily. It's taking some time, but I have finished the new logo, layout, colors, login and database connectivity. So hopefully I will have my </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/3944222151322657315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/06/maulik13-new-design-coming-soon.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3944222151322657315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3944222151322657315'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/06/maulik13-new-design-coming-soon.html' title='maulik13: New Design coming soon...'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-7266740204515162425</id><published>2010-06-21T16:22:00.000+02:00</published><updated>2010-07-14T14:35:37.871+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rigenerator'/><category scheme='http://www.blogger.com/atom/ns#' term='Ideas'/><category scheme='http://www.blogger.com/atom/ns#' term='Research'/><category scheme='http://www.blogger.com/atom/ns#' term='Modular Rigging'/><title type='text'>Rigenerator: Rules Based Graph Traversal</title><summary type='text'>It is not very difficult to traverse the whole graph in Maya and make a data structure to be able to analyze it. In "Rigenerator" I can select one node in the outliner and I am able to get all the nodes related to it in anyway possible. The next step I want to add is to be able to specify rules in the graph traversal algorithm so that I can restrict the network within the specified hierarchy. </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/7266740204515162425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/06/rigenerator-rules-based-graph-traversal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/7266740204515162425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/7266740204515162425'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/06/rigenerator-rules-based-graph-traversal.html' title='Rigenerator: Rules Based Graph Traversal'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-7290169026173076898</id><published>2010-06-06T18:58:00.003+02:00</published><updated>2010-07-14T14:35:37.873+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rigenerator'/><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><category scheme='http://www.blogger.com/atom/ns#' term='Research'/><category scheme='http://www.blogger.com/atom/ns#' term='Modular Rigging'/><title type='text'>Rigenerator: Rig Code Generator, Milestone 1</title><summary type='text'>Rigenerator is one of the toolsets from my modular rigging framework (which is still in very very early stage). My goal with this tool is to help riggers speed up the coding and modularizing of the rig components. This can also be used for copying, mirroring rigs of any kind. The first step for this tool is to generate the raw code which is the same as .MA file commands. There are some very </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/7290169026173076898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/06/rigenerator-rig-code-generator.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/7290169026173076898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/7290169026173076898'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/06/rigenerator-rig-code-generator.html' title='Rigenerator: Rig Code Generator, Milestone 1'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_YaF97CrfShk/TAvZcFRBngI/AAAAAAAAAfw/U6tjZ5s-6E8/s72-c/rigenerator-milestone1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-3635851620123602414</id><published>2010-06-02T12:36:00.002+02:00</published><updated>2010-06-02T12:37:08.847+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><title type='text'>Parenting a Shape the Right Way</title><summary type='text'>I had written a script some time ago to parent a shape to a given transform. I took into account frozen transformation on both source and target. However, script would not place the shape on to pivot point of the target in some cases. Recently I fixed this script as I need to use it quite often. I had to change the logic compeltely to parent a shape to account for different orientations on the </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/3635851620123602414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/06/parenting-shape-right-way.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3635851620123602414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3635851620123602414'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/06/parenting-shape-right-way.html' title='Parenting a Shape the Right Way'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-8510635787086434499</id><published>2010-05-06T10:48:00.003+02:00</published><updated>2010-05-20T11:37:12.407+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Coding Notes'/><title type='text'>Conditions: No Need for Extra "else"</title><summary type='text'>Sometimes when I am writing code quickly and jumping between functions, I miss a bit obvious logic and end up having multiple "else" statements. Below are two examples doing the same thing. Here the logic itself is not important, this is just to make a note. 
...
   if trueKey != "":
       modObj = pkgDict[trueKey]
       if modObj.__dict__.haskey(className):
           return modObj.__dict__[</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/8510635787086434499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/05/conditions-no-need-for-extra-else.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/8510635787086434499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/8510635787086434499'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/05/conditions-no-need-for-extra-else.html' title='Conditions: No Need for Extra &quot;else&quot;'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-4924237291691633751</id><published>2010-04-30T15:20:00.003+02:00</published><updated>2012-01-12T14:37:17.127+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Coding Notes'/><title type='text'>Python: Import a Module and Get a given Class</title><summary type='text'>Python offers different ways to import a module. The most flexible one is to use __import__ function. This allows script to load a module dynamically. So we can load a particular module based on user input.

Since everything in python is an object even the python module has some useful properties. One of them is __dict__ property. This is how you can use it.
className = 'MyClass'
modObj = __</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/4924237291691633751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/04/python-import-module-and-get-given.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/4924237291691633751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/4924237291691633751'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/04/python-import-module-and-get-given.html' title='Python: Import a Module and Get a given Class'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-8925295541525179304</id><published>2010-04-30T12:47:00.006+02:00</published><updated>2010-05-01T11:17:11.784+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ideas'/><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><category scheme='http://www.blogger.com/atom/ns#' term='Modular Rigging'/><title type='text'>Modular Rigging System : Goals</title><summary type='text'>As I have started writing my modular rigging system, I am constantly thinking about the main goals. I feel that at each stage as I put a concept on paper or write code that should satisfy the main goals. After a lot of thinking I have decided on the following goals,
One should be to be able to change/extend pretty much everything in the system
All the parts of the system should be as much </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/8925295541525179304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/04/modular-rigging-system-goals.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/8925295541525179304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/8925295541525179304'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/04/modular-rigging-system-goals.html' title='Modular Rigging System : Goals'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-8455955632611000642</id><published>2010-04-29T14:46:00.001+02:00</published><updated>2012-01-12T14:37:17.130+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Coding Notes'/><title type='text'>Being Pythonic</title><summary type='text'>I mentioned in my earlier post that we can assign a tuple/list to multiple variables. However both number of elements should match on both sides. One of the options is to assign only fixed number of elements to variables like this
mylist = [1,2,3,4,5]
x,y,z = mylist[:3]mylist[:3] will return 3 elements from the beginning.</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/8455955632611000642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/04/being-pythonic_29.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/8455955632611000642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/8455955632611000642'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/04/being-pythonic_29.html' title='Being Pythonic'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-1632678826602069283</id><published>2010-04-28T12:14:00.004+02:00</published><updated>2012-01-12T14:37:17.124+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Coding Notes'/><title type='text'>Being Pythonic</title><summary type='text'>Tuple is a very important data structure in python. You can directly assign tuple elements to variables like this.

Tuple assignmenttup = (3,'xyz',[1,2,3])
ind, myKey, myList = tup This is called unpacking. It is wise to do this only on tuples since they are immutable and it is sure that the number of elements being unpacked is same as the number of variables on the left side. This can be very </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/1632678826602069283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/04/being-pythonic.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/1632678826602069283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/1632678826602069283'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/04/being-pythonic.html' title='Being Pythonic'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-8706173754539773946</id><published>2010-04-28T11:35:00.006+02:00</published><updated>2010-06-02T12:07:01.410+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>And Now I am a Python Fan</title><summary type='text'>I was a little hesitant towards learning one more language since I get mixed up easily after working with many different languages: c, c++, ActionScript, mel, php, .Net, qlikview and now python (no boasting but I get surprised myself thinking what human brain can do). For example,

String concatenation,
php : $str1.$str2c++: str1 + str2vb: str1 &amp; str2
Defining functions,
mel : global int[] proc </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/8706173754539773946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/04/and-now-i-am-python-fan.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/8706173754539773946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/8706173754539773946'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/04/and-now-i-am-python-fan.html' title='And Now I am a Python Fan'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-6255346460425005973</id><published>2010-04-24T23:57:00.014+02:00</published><updated>2010-06-22T16:31:39.523+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>Coding Tricks Using Arithmetic</title><summary type='text'>When I was in 4th semester (if I remember correctly) of computer engineering studies I had a light bulb moment about using simple arithmetic in programming to avoid many if conditions. This was when I looked at my classmate's (who is now my life partner :) ) C program and found out how modulas operator can save me if conditions while implementing a program to convert decimal to binary.

From that</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/6255346460425005973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/04/coding-tricks-using-arithmetic.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/6255346460425005973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/6255346460425005973'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/04/coding-tricks-using-arithmetic.html' title='Coding Tricks Using Arithmetic'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-3487301515722829577</id><published>2010-04-23T15:16:00.000+02:00</published><updated>2010-04-23T15:16:17.184+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ideas'/><title type='text'>Procedural Rigging System vs Auto Rigger</title><summary type='text'>This is somewhat subjective, but I have started believing that there is a fundamental difference between procedural rigging system and auto rigging scripts.

Auto rigging scripts basically automates tasks for you and generates rig or rigging parts. Many times they are limited by many assumptions or fixed concepts. On the other end procedural rigging system defines how the rig will be generated </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/3487301515722829577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/04/procedural-rigging-system-vs-auto.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3487301515722829577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3487301515722829577'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/04/procedural-rigging-system-vs-auto.html' title='Procedural Rigging System vs Auto Rigger'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-2953190757323688175</id><published>2010-04-21T23:20:00.000+02:00</published><updated>2010-04-21T23:20:51.049+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>Reason for Cycle Errors While Constraining</title><summary type='text'>When creating a constraint system many times we encounter cycle errors even if we know that some transfroms should not change. For example if a joint is affecting translation of a locator in some way and locator calculates the rotation of this joint, they should be unaffected by each other because they change different parts of the transformation. However, we end up having cycle because we are </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/2953190757323688175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/04/reason-for-cycle-errors-while.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2953190757323688175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2953190757323688175'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/04/reason-for-cycle-errors-while.html' title='Reason for Cycle Errors While Constraining'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-2129082966779710838</id><published>2010-04-21T23:02:00.001+02:00</published><updated>2010-05-05T09:32:06.137+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><category scheme='http://www.blogger.com/atom/ns#' term='Issues'/><title type='text'>Using curve 'normal' from PointOnCurveInfo</title><summary type='text'>We can use PointOnCurveInfo node to get information about any point along the given curve. I have been using it for constraining a locator on a curve. It is the same logic used in constraining a transform on a NURBS surface. In this method normal and tangent vectors are used to aim constraint a locator to get the right orientation on the geometry. However, since curve is one dimensional in size, </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/2129082966779710838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/04/using-curve-normal-from.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2129082966779710838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2129082966779710838'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/04/using-curve-normal-from.html' title='Using curve &apos;normal&apos; from PointOnCurveInfo'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-4583492155161339080</id><published>2010-03-17T20:29:00.008+01:00</published><updated>2010-04-25T00:12:14.152+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ideas'/><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><title type='text'>ScriptNode and Sequence of Loading</title><summary type='text'>This is from Maya docs,
"If a scene         contains several script nodes, there is no guaranteed order of  execution         and the scripts should not depend on a specific execution  sequence."

So this means that there is no way to make sure that a particular script node gets executed first. This creates a problem because If I want to modularize my script nodes and have all the procedures in </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/4583492155161339080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/03/scriptnode-and-sequence-of-loading.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/4583492155161339080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/4583492155161339080'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/03/scriptnode-and-sequence-of-loading.html' title='ScriptNode and Sequence of Loading'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-2425679603049896864</id><published>2010-03-17T09:49:00.002+01:00</published><updated>2010-04-25T00:11:27.798+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>MEL: Cleaning Memory</title><summary type='text'>One of the problems with MEL is that we don't have much control over deleting variables from memory. The only command available for this purpose is clear and it only works with array. But, we can use this function to clear up very long string data.

We can store string variables in an array for cases where string holds a large amount of data (string holding a script). In this case we can clear </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/2425679603049896864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/03/mel-cleaning-memory.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2425679603049896864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2425679603049896864'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/03/mel-cleaning-memory.html' title='MEL: Cleaning Memory'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-3659766749064729893</id><published>2010-03-08T22:40:00.001+01:00</published><updated>2010-03-18T10:43:11.262+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>Dirty Bit Propagation</title><summary type='text'>I have been looking for more information on how and when Maya marks nodes dirty. First thing I have come to understand is that for an attribute two dirty bits can be set, connection and datablock. See isDirty command for these two options. I am still not clear how using these two flags Maya decides to call compute method. And what has confused me more is that if I don't mark a datablock clean </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/3659766749064729893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/03/dirty-bit-propagation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3659766749064729893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3659766749064729893'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/03/dirty-bit-propagation.html' title='Dirty Bit Propagation'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-8493610560998726847</id><published>2010-03-07T19:03:00.002+01:00</published><updated>2010-03-18T10:42:41.424+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>compute Method and Dirty Bit</title><summary type='text'>Working at the lower level functioning of Maya, is a very different experience as there are lots of obvious elements to consider. Basic rule of Maya is that a node is computed only if there is a need of new output from that node. So if there is no output attribute or if it's not connected  then the node is not computed. There has to be another node dependent on output of our node for Maya to call</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/8493610560998726847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/03/compute-method-and-dirty-bit.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/8493610560998726847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/8493610560998726847'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/03/compute-method-and-dirty-bit.html' title='compute Method and Dirty Bit'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-68865081085612190</id><published>2010-02-23T21:08:00.004+01:00</published><updated>2010-02-23T21:12:00.729+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Demo'/><category scheme='http://www.blogger.com/atom/ns#' term='Research'/><title type='text'>Animatable Pivot System</title><summary type='text'>
This is a working demo of my solution for animatable pivot in Maya. I believe it is quite flexible and fast. It allows animators to shift pivots very easily and only one object needs to be keyed. No adjacent two key mechanism necessary, but you can do it if you want.

Most of the logic is implemented using Node network. There is one sctiptJob for each pivot which calls a function. This function </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/68865081085612190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/02/animatable-pivot-system.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/68865081085612190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/68865081085612190'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/02/animatable-pivot-system.html' title='Animatable Pivot System'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-4721532712177127674</id><published>2010-02-22T16:35:00.001+01:00</published><updated>2012-01-12T14:35:36.846+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>Attribute Change Event</title><summary type='text'>If you have a boolean attribute set to 0. And you set the value again to 0 then the attribute change event is still fired even if it is the same value as before. That means the network will be evaluated again even if the actual value does not change. Hence a dirty bit is set whenever you set a value, it does not matter if it's the same as before. I concluded this from testing with expression node</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/4721532712177127674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/02/attribute-change-event.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/4721532712177127674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/4721532712177127674'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/02/attribute-change-event.html' title='Attribute Change Event'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-5318739229600054082</id><published>2010-02-19T14:26:00.012+01:00</published><updated>2012-01-12T14:35:36.850+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>Interesting Notes @ Expression Node</title><summary type='text'>Expression in maya is basically a node that takes inputs and processes them with MEL and gives output.

If you want to create an Expression node without connection to the actual objects, you can do the following. 
.O[0] = .I[0];
.O[1] = .I[1];
.O[2] = .I[2];
After this you can connect the inputs and outputs to this Expression node manually through connection editor. If you want your expression to</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/5318739229600054082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/02/interesting-notes-expression-node.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/5318739229600054082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/5318739229600054082'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/02/interesting-notes-expression-node.html' title='Interesting Notes @ Expression Node'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-7584758881176089278</id><published>2010-02-17T12:26:00.003+01:00</published><updated>2010-02-26T15:50:56.149+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Understanding'/><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>Understanding Pivot Point</title><summary type='text'>Generally we rotate an object about the origin. But we can also rotate an object around any arbitrary point in space. This arbitrary point is the pivot which is a reference point for rotating or scaling the object. So how does pivot point affect the object's transformation?

In essence, the pivot point just translates the object. It does not affect the orientation of the object in any way. This </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/7584758881176089278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/02/understanding-pivot-point.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/7584758881176089278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/7584758881176089278'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/02/understanding-pivot-point.html' title='Understanding Pivot Point'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_YaF97CrfShk/S3vSECbsRYI/AAAAAAAAAdM/kKxoHVKwcOE/s72-c/pivot-example.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-6542212881908350492</id><published>2010-02-12T16:47:00.006+01:00</published><updated>2011-01-05T11:54:50.589+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>API: Node start and end functions</title><summary type='text'>Following are what I call startup and ending functions that are called during some kind of (un)initializing process. I have also described at what event they are called in Maya.

-initializePlugin()-uninitializePlugin()-Constructor-Destructor-MPxNode::initialize() 
Sequence in which these functions are called:

MPxNode::initialize()
When a node plugin is loaded this is the first function to be </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/6542212881908350492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/02/api-node-start-and-end-functions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/6542212881908350492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/6542212881908350492'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/02/api-node-start-and-end-functions.html' title='API: Node start and end functions'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-7339020965695292566</id><published>2010-02-12T12:52:00.002+01:00</published><updated>2010-02-22T16:41:42.440+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>animCurveTA update after set key</title><summary type='text'>While looking into how set keyframe event works, I found that animCurveTA nodes (or any other animation curve nodes) don't get recalculated until time changes. And this makes sense considering input for animCurveTA node is time1.outTime. So here is what happens,
- You set a key on the object.
- animCurveTA node creates a key-value pair, but it does not recalculate its "output" attribute. (I think</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/7339020965695292566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/02/animcurveta-update-after-set-key.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/7339020965695292566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/7339020965695292566'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/02/animcurveta-update-after-set-key.html' title='animCurveTA update after set key'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-5452189943563956570</id><published>2010-02-11T10:48:00.002+01:00</published><updated>2010-02-23T20:09:21.043+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><category scheme='http://www.blogger.com/atom/ns#' term='Issues'/><title type='text'>ScriptJob for Keyable Attribute Change Event</title><summary type='text'>Reading from forums it seems that there is a resistance in using ScriptJobs amongst character TDs. And there are reasons for that. But, I think there are some good uses of scriptJob without hitting the performance.

I was trying to make an attribute that is boolean and it jumps from one value to the other like a step key. And I wanted to detect change in this attribute. So I used scriptJob to do </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/5452189943563956570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/02/scriptjob-for-attribute-change.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/5452189943563956570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/5452189943563956570'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/02/scriptjob-for-attribute-change.html' title='ScriptJob for Keyable Attribute Change Event'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-1493804239941839533</id><published>2010-02-08T21:47:00.000+01:00</published><updated>2010-02-08T21:47:39.552+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>Using Constraints in Scripts</title><summary type='text'>Sometime we require to align one object to another object or do some other kind of matching in our scripts. We can use dynamically created constraints in a script for such purpose and delete the constraint once we get the data. However, while using constraints in this way one should make sure that the object on which constraint is applied does not contain any animation curve. Because if animation</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/1493804239941839533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2010/02/using-constraints-in-scripts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/1493804239941839533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/1493804239941839533'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2010/02/using-constraints-in-scripts.html' title='Using Constraints in Scripts'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-8154368266722441721</id><published>2009-12-25T01:10:00.012+01:00</published><updated>2010-02-19T23:47:31.369+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Issues'/><title type='text'>commandPort problems with Maya 2009 and vista</title><summary type='text'>Some time ago my jEdit MayaEditor plug-in (which sends commands to maya) stopped working and it was really annoying because I had to source my script manually each time after modification! After so many frustrating efforts and a long time I found that all the macros and plugins could not connect to Maya because connection was being refused. So the problem must be with maya's commandPort command </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/8154368266722441721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/12/commandport-problems-with-maya-2009-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/8154368266722441721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/8154368266722441721'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/12/commandport-problems-with-maya-2009-and.html' title='commandPort problems with Maya 2009 and vista'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-8136169613058304543</id><published>2009-10-15T04:51:00.004+02:00</published><updated>2012-01-06T10:07:53.725+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facial Rigging'/><title type='text'>Face setup: Blendshape vs Joint</title><summary type='text'>I advocate both methods and I want to utilize both of these methods to get the desired results. Here are few notes from my current Face Setup research I am doing.

Blendshape:
-&gt; One main problem I have with blendshape besides them being liner is that if not modeled correctly it is difficult to show skin sliding and fleshy feeling of the surrounding skin area of the muscle that moves. For example</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/8136169613058304543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/10/face-setup-blendshape-vs-joint.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/8136169613058304543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/8136169613058304543'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/10/face-setup-blendshape-vs-joint.html' title='Face setup: Blendshape vs Joint'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-537440329726791155</id><published>2009-07-18T20:15:00.003+02:00</published><updated>2009-07-18T20:26:58.913+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>Rig : Feature Notes</title><summary type='text'>While animating I realized that following behaviors are more desirable.-&gt; Clavicle should not affect arms, in FK or IK. (But, still have an option for arm to follow clavicle)-&gt; Knee should be able to move independently from the foot.-&gt; Neck should have an option for following spine or align with world space. By default it should follow the spine, as overlapping action is easier (for my workflow).</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/537440329726791155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/07/rig-feature-notes.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/537440329726791155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/537440329726791155'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/07/rig-feature-notes.html' title='Rig : Feature Notes'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-3428361420481350182</id><published>2009-07-18T20:06:00.003+02:00</published><updated>2009-07-18T20:15:38.100+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>Rig : Testing &amp; Bugs</title><summary type='text'>I have been animating this quarter and I have realized that true problems with any rig behavior can be identified only after animating it for at least one animation. If you use the rig for say 1 or 2 weeks you become comfortable with new features and you also find bugs or problematic behaviors.It is mostly like software engineering. Rigs should always go through QA (quality assurance) testing. </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/3428361420481350182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/07/rig-testing-bugs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3428361420481350182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3428361420481350182'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/07/rig-testing-bugs.html' title='Rig : Testing &amp; Bugs'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-535824533516345111</id><published>2009-06-25T07:47:00.001+02:00</published><updated>2009-06-25T07:48:22.636+02:00</updated><title type='text'>Finally, my own website!</title><summary type='text'>I feel very excited to have my own website. I am still in the process of updating the pages with more detail and better layout. But mainly I have my demo reel up!I want to say thank you to my lovely wife :)http://maulik13.com</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/535824533516345111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/06/finally-my-own-website.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/535824533516345111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/535824533516345111'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/06/finally-my-own-website.html' title='Finally, my own website!'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-3515774571433419514</id><published>2009-06-04T02:16:00.002+02:00</published><updated>2009-06-04T03:43:16.544+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><category scheme='http://www.blogger.com/atom/ns#' term='Facial Rigging'/><title type='text'>Facial Rigging Notes</title><summary type='text'>I have been studying the face anatomy and looking at different reference videos to see how the different areas in the face deform. My main interest is in looking for a particular relationship between different muscles. There are two main types of research for facial rig.1. Follow anatomically correct deformation. This also includes exaggerated emotions that are based on realistic deformations. </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/3515774571433419514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/06/facial-rigging-notes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3515774571433419514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3515774571433419514'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/06/facial-rigging-notes.html' title='Facial Rigging Notes'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-5451112422150646971</id><published>2009-05-26T03:09:00.004+02:00</published><updated>2009-06-26T06:23:29.048+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ideas'/><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>Making a local orient constraint</title><summary type='text'>In my research project, at one stage I needed an orient constraint that works locally, i.e. it works only on the hierarchy below a particular transform. I believe we could do that by re-connecting orient constraint's targetMatrix. However, since I don't know how orient constraint works under the hood and it does not allow me to have dynamic offset, I had to come up with my own constraint using </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/5451112422150646971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/05/making-local-orient-constraint.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/5451112422150646971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/5451112422150646971'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/05/making-local-orient-constraint.html' title='Making a local orient constraint'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-5954650459213339807</id><published>2009-05-26T02:56:00.003+02:00</published><updated>2009-06-01T05:11:35.560+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ideas'/><title type='text'>Continue on Twist</title><summary type='text'>The best way to understand twist is to think of the joint as a vector and twist is a spin around that vector. This leads to the topic of how quaternion transform works. More on that later.When it comes to vector related implementation two tools mentioned below are a great help.-&gt; Single IK chain with pole vector can act as a vector. And spin is defined by pole vector or twist attribute.-&gt; Aim </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/5954650459213339807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/05/continue-on-twist.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/5954650459213339807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/5954650459213339807'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/05/continue-on-twist.html' title='Continue on Twist'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-510841962507115573</id><published>2009-05-09T03:22:00.005+02:00</published><updated>2009-05-09T04:01:28.996+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>Twist Setup Notes</title><summary type='text'>When doing a twist setup to distribute the rotation uniformly there are some important things to consider. Following are some notes from my experience while working on forearm and shoulder twist setups.-&gt; Twist cannot be associated with any single axis. Due to the nature of Euler angle, based on your rotation order axis that twist the joint could change.For example,A shoulder joint with zxy </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/510841962507115573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/05/twist-setup-notes.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/510841962507115573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/510841962507115573'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/05/twist-setup-notes.html' title='Twist Setup Notes'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_YaF97CrfShk/SgTiRGEIxqI/AAAAAAAAAYE/4o2erq88EQE/s72-c/twist-example.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-5423911419525460711</id><published>2009-05-06T06:09:00.006+02:00</published><updated>2012-01-12T14:35:36.853+01:00</updated><title type='text'>Scale Constraint on Joints</title><summary type='text'>It does not work properly. As I had posted earlier, joints use a special scale connection with inverseScale attribute (only joints have this tranform property) when you create a chain hierarchy. This gives a special behavior when scaling a parent joint. And using scale constraint messes up this inverseScale calculation in joint transform and so the child joints scale weirdly when scaling the </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/5423911419525460711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/05/scale-constraint-on-joints.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/5423911419525460711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/5423911419525460711'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/05/scale-constraint-on-joints.html' title='Scale Constraint on Joints'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-910832443259523157</id><published>2009-04-29T05:40:00.003+02:00</published><updated>2009-04-29T05:52:16.229+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>BlendShapes 1</title><summary type='text'>If somehow (or by doing something stupid like I did) if you have blendshapes created which don't have the same vertex order as your base geometry or if geometry changes in the base model, don't panic! You can use already created blendshapes to make new ones. Use a wrap deformer to do this as explained below.-&gt; Take all old blendshape geometry and add them to old base geometry using "Blend Shape" </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/910832443259523157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/04/blendshapes-1.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/910832443259523157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/910832443259523157'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/04/blendshapes-1.html' title='BlendShapes 1'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-2501846140745797572</id><published>2009-04-20T03:13:00.003+02:00</published><updated>2009-06-13T06:14:32.955+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Notes'/><title type='text'>Direction connection for rotation</title><summary type='text'>From my experience so far, connecting rotation values directly is not a good practice. There are some pre-conditions that have to match in order for this to work. So you end up loosing quite a bit of flexibility and you have to make 110% sure that those conditions would not change after you make connections. Here are some main conditions that I learned.1. Rotation orders have to be the exact same</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/2501846140745797572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/04/don.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2501846140745797572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2501846140745797572'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/04/don.html' title='Direction connection for rotation'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-2309629377476412165</id><published>2009-04-19T01:24:00.007+02:00</published><updated>2009-04-19T02:30:42.658+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ideas'/><category scheme='http://www.blogger.com/atom/ns#' term='Issues'/><title type='text'>FK controllers - not as simple as I had thought</title><summary type='text'>FK controllers are trickier than they seem to be. They are not simple! Here are some questions and thoughts I encountered while doing an arm setup.1. How to bind controllers to the joints: Parent shapes? Constraint? Connections? Or combination of all these?2. Constraint works, but you cannot take advantage of joint's inveseScale attribute directly. Connections have more issues, and it starts </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/2309629377476412165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/04/problems-with-fk-controllers.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2309629377476412165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2309629377476412165'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/04/problems-with-fk-controllers.html' title='FK controllers - not as simple as I had thought'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-5469618055655989633</id><published>2009-04-18T08:45:00.007+02:00</published><updated>2010-02-20T00:37:39.006+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>True on the fly Rotation Order Change</title><summary type='text'>True on the fly rotation order change means that the object should not jump from its current pose. I started looking into matrix to achieve this. Basically, I thought if I can formulate the equation that involves rotation values and rotation order I can solve that equation to get the rotation values that will keep the object in the same pose. I found that I could actually have separate matrices </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/5469618055655989633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/04/true-on-fly-rotation-order.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/5469618055655989633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/5469618055655989633'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/04/true-on-fly-rotation-order.html' title='True on the fly Rotation Order Change'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-5462674452694426505</id><published>2009-04-17T05:08:00.006+02:00</published><updated>2009-04-17T05:37:01.558+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ideas'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>"Easy Select" or "Proxy Select"</title><summary type='text'>In the latest rigging project I have been working on this idea to make selection of controllers quick and easy. Generally the problem with curve controllers is that you cannot select them quickly because you have to be accurate in clicking the thin curves (unless you are an avid shooting game player and you have very high accuracy). In my experience sometimes it becomes a little annoying when it </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/5462674452694426505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/04/easy-select-proxy-select-with-dummy-geo.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/5462674452694426505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/5462674452694426505'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/04/easy-select-proxy-select-with-dummy-geo.html' title='&quot;Easy Select&quot; or &quot;Proxy Select&quot;'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_YaF97CrfShk/Sef3Ykq0hEI/AAAAAAAAAXM/XVTL3EECtB8/s72-c/easySelect_areaGeo.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-2005223543632491246</id><published>2009-04-17T04:51:00.005+02:00</published><updated>2009-04-17T05:15:16.327+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>Connecting Geo Display Type</title><summary type='text'>Generally you can link geometry display type by adding them to a layer and switch between "template", "reference" or "normal". Alternatively you can change its display override type to reference directly in the attribute editor. In later case it become difficult to debug, if you have to go back and find that geometry and change display type to "normal".I find it more organized if I have an </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/2005223543632491246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/04/connecting-geo-display-type.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2005223543632491246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/2005223543632491246'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/04/connecting-geo-display-type.html' title='Connecting Geo Display Type'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_YaF97CrfShk/Sef0McC0ssI/AAAAAAAAAXE/j9uiEqPSzgM/s72-c/GeoDispAtt.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-9145709517599943393</id><published>2009-04-09T21:18:00.008+02:00</published><updated>2012-01-12T14:35:36.857+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>Default Joint Connections</title><summary type='text'>I have been using Hypergraph a lot lately. Today I found out that when you create a skeleton hierarchy, joints have scale-&gt;inverseScale connection by default. So when you scale the joints the children joints do not scale, they just move. But if you delete the scale connection joints follow the normal parent scale transform. Here are the screenshots. Simple, but useful.Edit: I forgot to mention, "</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/9145709517599943393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/04/default-joint-connections-i-didnt-know.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/9145709517599943393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/9145709517599943393'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/04/default-joint-connections-i-didnt-know.html' title='Default Joint Connections'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_YaF97CrfShk/Sd5LHnvmHhI/AAAAAAAAAWk/BBIzZSDaNi8/s72-c/jnt_connectedScale.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-3699761438541436093</id><published>2009-04-09T19:31:00.003+02:00</published><updated>2009-04-09T19:47:05.841+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Issues'/><title type='text'>putenv command on Vista</title><summary type='text'>I am not sure if its vista (you bug me a lot sometimes) or Maya but when I use putenv command to create a custom environment variale it does not save the value. After I set the environment variable and then use "getenv" to read the value it works. But when I restart maya the variable is gone! It's set back to null. This is really annoying.edit:It looks like windows does not remember the </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/3699761438541436093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/04/putenv-command-on-vista.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3699761438541436093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/3699761438541436093'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/04/putenv-command-on-vista.html' title='putenv command on Vista'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-7778860404031471888</id><published>2009-04-06T19:48:00.006+02:00</published><updated>2009-04-17T05:08:19.369+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips and Tricks'/><title type='text'>A trick to increment a string in Maya</title><summary type='text'>I was developing a script to increment version &amp; save the current file where the script checks for version tag (*_v1.ma) and then increments it. I took a long path first where I extract the version tag then extract the number and increment it. And ofcourse Maya will give you a warning when it converts string to integer. So to solve that working I was wondering what to do and it clicked to me that</summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/7778860404031471888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/04/trick-to-increment-string-in-maya.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/7778860404031471888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/7778860404031471888'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/04/trick-to-increment-string-in-maya.html' title='A trick to increment a string in Maya'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-7083665694740009637</id><published>2009-03-18T10:03:00.013+01:00</published><updated>2009-03-18T22:52:36.223+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kinematics'/><title type='text'>IK vs FK part 1</title><summary type='text'>I have been studying the nature of IK and FK chains to study which one does better at what kind of movement in animation. Here are few simple observations that I wanted to note down.FK Advantages:The greatest advantage I see with FK is ease in achieving overlapping action, e.g. between upper arm and forearm.Natural Arcs while interpolating between keys.When elbow is planted or when we just need </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/7083665694740009637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/03/ik-vs-fk-part-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/7083665694740009637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/7083665694740009637'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/03/ik-vs-fk-part-1.html' title='IK vs FK part 1'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3269636004740581152.post-6463670723419829623</id><published>2009-03-17T08:11:00.005+01:00</published><updated>2009-06-13T06:13:49.540+02:00</updated><title type='text'>Dedicated to "Hello world!"</title><summary type='text'>Any programming language learning is incomplete without a nice "Hello world!" program. It is a different kind of joy when you start learning programming and see this program for the first time. And hence I am dedicating my first post to this program, "Hello world!".I want to use this blog as my notepad to share ideas on rigging and any kind of technology related with character animation and art. </summary><link rel='replies' type='application/atom+xml' href='http://leftbulb.blogspot.com/feeds/6463670723419829623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://leftbulb.blogspot.com/2009/03/dedicated-to-hello-world.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/6463670723419829623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3269636004740581152/posts/default/6463670723419829623'/><link rel='alternate' type='text/html' href='http://leftbulb.blogspot.com/2009/03/dedicated-to-hello-world.html' title='Dedicated to &quot;Hello world!&quot;'/><author><name>Maulik Kataria</name><uri>https://profiles.google.com/115044719878634842463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-CEhRXk9yq64/AAAAAAAAAAI/AAAAAAAAAo0/O8ZNwYE5b5I/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
