{"id":406,"date":"2021-10-11T17:55:34","date_gmt":"2021-10-11T21:55:34","guid":{"rendered":"https:\/\/animation.monmouth.edu\/instruct\/?p=406"},"modified":"2022-09-09T10:50:23","modified_gmt":"2022-09-09T14:50:23","slug":"adding-controllers-to-a-rig","status":"publish","type":"post","link":"https:\/\/animation.monmouth.edu\/instruct\/autodesk-maya\/adding-controllers-to-a-rig\/","title":{"rendered":"Adding Controllers to a Rig"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Creating and Placing Controllers<\/h3>\n\n\n\n<p>Create the controller (a circle for instance: <strong>Create \u2192 Curves \u2192 Circle<\/strong>) exactly at the origin. Holding down <strong>x<\/strong> will activate snap to grid. The transformation and rotation should both be [0,0,0].<\/p>\n\n\n\n<p>You can use parenting to exactly place controllers at the joint they need to control, with the same orientation as that joint:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Name the new object &#8220;CTRL_Something&#8221;. Select it and shift select the joint it needs to control<\/li><li>Parent the controller to the joint, making sure you un-check the option <strong>Preserve Position<\/strong> (<strong>Edit \u2192 Parent \u2192 Option Box<\/strong>) This will move and rotate the controller into place.<\/li><li>Un-parent the controller, making sure <strong>Preserve Position<\/strong> is checked (<strong>Edit \u2192 Unparent \u2192 Option Box)<\/strong><\/li><\/ul>\n\n\n\n<p><br>If the orientation is not deemed important, you can simply snap the controller to the joint by holding down &#8220;v&#8221; (snap to point) &#8211; you may need to hide your geometry so it does not snap to its vertices.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Shaping Contollers<\/h3>\n\n\n\n<p>The controller has been placed and rotated properly, but may be inside your mesh and therefore hard to grab \/ select. To move the shape to a different spot you can use this trick:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Select the curve, and set the selection to <strong>Control Vertex<\/strong> (using the RMB pop up menu)<\/li><li>Select the control points. It is extremely annoying that, when trying to select points, Maya insists on selecting joints. If you have your joints in a separate display layer, you can turn their visibility off there, or you can un-check <strong>Joints<\/strong> from the <strong>Show<\/strong> menu at the top of the view panel.<\/li><li>Move, rotate and scale the control vertices to wherever you want them to go. This will not move pivot point of the control object.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Making Controllers Stick<\/h3>\n\n\n\n<p>Now that we have the controller in the right spot, we need to make sure it sticks to the skeleton. We are going to use a contraint for that. We could simple constrain the controller itself, but Maya will then refuse to animate the constrained channels. So we need to create a group containing the controller.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Select the Controller and place it in a group by itself (<strong>Edit \u2192 Group<\/strong> or <strong>CTRL-G<\/strong>)<\/li><li>For neatness, select the group, hit insert and snap the pivot of the group (by default located at the origin) to the joint to be controlled.<\/li><li>Select the joint that is the parent of the joint we want the controller to control<\/li><li>In the outliner, control select the group containing the controller<\/li><li>Parent constrain the controller&#8217;s group to the selected joint (<strong>Animation \u2192 Constraints \u2192 Parent \u2192 Option Box<\/strong>) making sure the option &#8220;Maintain Offset&#8221; is checked.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Making the Contoller Control a Joint Rotation.<\/h3>\n\n\n\n<p>Now that the controller is places and sticks to the skeleton, we need it to actually control something. If we want the controller to control the rotation of a joint follow the followin steps.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Select the controller and shift select the joint you want it to control<\/li><li>Create an orient constraint: <strong>Animation \u2192 Constraints \u2192 Orient<\/strong>. Since we made sure the controller has the exact same rotation as the joint it is to control, the &#8220;Maintain Offset&#8221; option should be irrelevant<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Controlling IK<\/h3>\n\n\n\n<p>The setup for IK controls is slightly different. We still want to parent constrain the group the controller is in to the rig, but what it should stick to is not as straight forward. It could just be the master controller (as with feet or hand controls) or the center (COG) joint (one of the other options for hand controllers)<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Select the controller and shift select the IK handle you want it to control<\/li><li>Create an point constraint: <strong>Animation \u2192 Constraints \u2192 Point<\/strong>. A <strong>Parent<\/strong> constraint will also work.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Double Controls<\/h3>\n\n\n\n<p>It is not uncommon for a hand IK controller to also control the orientation of the hand bone. This can be achieved by following both steps listed above: point contraining the IK handle to the controller AND orient constraining the hand joint to the controller<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cleanup<\/h3>\n\n\n\n<p>Once you have the controller all set up, lock and hide the channels you will not be using (translation and scale when controlling joint orientations for instance)<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n","protected":false},"excerpt":{"rendered":"<p>How to add controllers to a skeleton to create an articulated rig<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[85,14,3,15],"tags":[18,20],"class_list":["post-406","post","type-post","status-publish","format-standard","hentry","category-3d-computer","category-animation","category-autodesk-maya","category-rigging","tag-controllers","tag-rig-controllers"],"_links":{"self":[{"href":"https:\/\/animation.monmouth.edu\/instruct\/wp-json\/wp\/v2\/posts\/406","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/animation.monmouth.edu\/instruct\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/animation.monmouth.edu\/instruct\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/animation.monmouth.edu\/instruct\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/animation.monmouth.edu\/instruct\/wp-json\/wp\/v2\/comments?post=406"}],"version-history":[{"count":2,"href":"https:\/\/animation.monmouth.edu\/instruct\/wp-json\/wp\/v2\/posts\/406\/revisions"}],"predecessor-version":[{"id":408,"href":"https:\/\/animation.monmouth.edu\/instruct\/wp-json\/wp\/v2\/posts\/406\/revisions\/408"}],"wp:attachment":[{"href":"https:\/\/animation.monmouth.edu\/instruct\/wp-json\/wp\/v2\/media?parent=406"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/animation.monmouth.edu\/instruct\/wp-json\/wp\/v2\/categories?post=406"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/animation.monmouth.edu\/instruct\/wp-json\/wp\/v2\/tags?post=406"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}