<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments for confectionary malfunction</title>
	<atom:link href="http://sugarandcyanide.com/blog/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://sugarandcyanide.com/blog</link>
	<description>i think i&#039;ve had a lot more than the bottle said to take</description>
	<lastBuildDate>Wed, 08 Dec 2010 03:44:41 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>Comment on a quick note on object snapping by kiki</title>
		<link>http://sugarandcyanide.com/blog/2009/07/05/a-quick-note-on-object-snapping/#comment-2032</link>
		<dc:creator>kiki</dc:creator>
		<pubDate>Wed, 08 Dec 2010 03:44:41 +0000</pubDate>
		<guid isPermaLink="false">http://sugarandcyanide.com/blog/?p=74#comment-2032</guid>
		<description>Heh busted. :) I used to do that more often to save on typing. Now I usually import maya.cmds as mc. It&#039;s something we&#039;ve standardized on at work and I&#039;m writing more class-based pipeline code, making namespaces more important. 

But as an example it&#039;s easier to read without namespacing. Yeah, that&#039;s my real excuse. ;)</description>
		<content:encoded><![CDATA[<p>Heh busted. <img src='http://sugarandcyanide.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I used to do that more often to save on typing. Now I usually import maya.cmds as mc. It&#8217;s something we&#8217;ve standardized on at work and I&#8217;m writing more class-based pipeline code, making namespaces more important. </p>
<p>But as an example it&#8217;s easier to read without namespacing. Yeah, that&#8217;s my real excuse. <img src='http://sugarandcyanide.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on a quick note on object snapping by Peter</title>
		<link>http://sugarandcyanide.com/blog/2009/07/05/a-quick-note-on-object-snapping/#comment-2031</link>
		<dc:creator>Peter</dc:creator>
		<pubDate>Wed, 08 Dec 2010 03:22:06 +0000</pubDate>
		<guid isPermaLink="false">http://sugarandcyanide.com/blog/?p=74#comment-2031</guid>
		<description>I know that theoretically it&#039;s bad form to put maya.cmds into the main namespace because of potential naming clashes between python and cmds... but has that ever happened to you? So daring!</description>
		<content:encoded><![CDATA[<p>I know that theoretically it&#8217;s bad form to put maya.cmds into the main namespace because of potential naming clashes between python and cmds&#8230; but has that ever happened to you? So daring!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on katt&#039;s mysterious 3D math lectures: how aim constraints work by Kirk</title>
		<link>http://sugarandcyanide.com/blog/2009/05/22/vector-is-that-you-its-me-and-im-blank-on-a-witty-finish/#comment-1684</link>
		<dc:creator>Kirk</dc:creator>
		<pubDate>Sat, 30 Oct 2010 20:47:00 +0000</pubDate>
		<guid isPermaLink="false">http://sugarandcyanide.com/blog/?p=62#comment-1684</guid>
		<description>This sounds like a great explanation for something that I&#039;ve been trying to figure out for a while, however, I have a question.

I understand a little bit about matrix math, but after carefully following your instructions to create the 4x4 matrix, I don&#039;t understand how to use that matrix to get the Euler rotations that the constrained object needs to assume in order to aim at the target.

Could you help me understand?

Thanks so much,
Kirk</description>
		<content:encoded><![CDATA[<p>This sounds like a great explanation for something that I&#8217;ve been trying to figure out for a while, however, I have a question.</p>
<p>I understand a little bit about matrix math, but after carefully following your instructions to create the 4&#215;4 matrix, I don&#8217;t understand how to use that matrix to get the Euler rotations that the constrained object needs to assume in order to aim at the target.</p>
<p>Could you help me understand?</p>
<p>Thanks so much,<br />
Kirk</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on returns by kiki</title>
		<link>http://sugarandcyanide.com/blog/2010/04/25/returns/#comment-1548</link>
		<dc:creator>kiki</dc:creator>
		<pubDate>Sat, 16 Oct 2010 23:46:35 +0000</pubDate>
		<guid isPermaLink="false">http://sugarandcyanide.com/blog/2010/04/25/returns/#comment-1548</guid>
		<description>Actually Blender runs perfectly on Macs. :)  Maya is the only 3D package that isn&#039;t properly Mac-compatible.  In fact, Ton (head of Blender) was coding on a G4 for ages.</description>
		<content:encoded><![CDATA[<p>Actually Blender runs perfectly on Macs. <img src='http://sugarandcyanide.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   Maya is the only 3D package that isn&#8217;t properly Mac-compatible.  In fact, Ton (head of Blender) was coding on a G4 for ages.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on returns by Mike</title>
		<link>http://sugarandcyanide.com/blog/2010/04/25/returns/#comment-1527</link>
		<dc:creator>Mike</dc:creator>
		<pubDate>Fri, 15 Oct 2010 12:37:14 +0000</pubDate>
		<guid isPermaLink="false">http://sugarandcyanide.com/blog/2010/04/25/returns/#comment-1527</guid>
		<description>I&#039;m guessing the MBP didn&#039;t run Blender that great either ( pesky drivers! ).  Damn! Like you said, nice laptops otherwise.</description>
		<content:encoded><![CDATA[<p>I&#8217;m guessing the MBP didn&#8217;t run Blender that great either ( pesky drivers! ).  Damn! Like you said, nice laptops otherwise.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on returns by katt</title>
		<link>http://sugarandcyanide.com/blog/2010/04/25/returns/#comment-1451</link>
		<dc:creator>katt</dc:creator>
		<pubDate>Mon, 26 Apr 2010 00:50:37 +0000</pubDate>
		<guid isPermaLink="false">http://sugarandcyanide.com/blog/2010/04/25/returns/#comment-1451</guid>
		<description>Launchy isn&#039;t bad.  I tried it on my machine at work when I first had to make the move to Vista.  Thing is, it&#039;s not Quicksilver, either, and IIRC there was some odd feature it had that got in the way of something else I needed more.

I&#039;m typing this on my third new MBP (the second one that I got this morning I brought home only to find out that it had dead pixels!), and things are looking up, finally, so I don&#039;t have to give up on Quicksilver just yet. :)</description>
		<content:encoded><![CDATA[<p>Launchy isn&#8217;t bad.  I tried it on my machine at work when I first had to make the move to Vista.  Thing is, it&#8217;s not Quicksilver, either, and IIRC there was some odd feature it had that got in the way of something else I needed more.</p>
<p>I&#8217;m typing this on my third new MBP (the second one that I got this morning I brought home only to find out that it had dead pixels!), and things are looking up, finally, so I don&#8217;t have to give up on Quicksilver just yet. <img src='http://sugarandcyanide.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on returns by John</title>
		<link>http://sugarandcyanide.com/blog/2010/04/25/returns/#comment-1450</link>
		<dc:creator>John</dc:creator>
		<pubDate>Sun, 25 Apr 2010 17:40:02 +0000</pubDate>
		<guid isPermaLink="false">http://sugarandcyanide.com/blog/2010/04/25/returns/#comment-1450</guid>
		<description>As a Quicksilver replacement, what about Launchy?

http://www.launchy.net/</description>
		<content:encoded><![CDATA[<p>As a Quicksilver replacement, what about Launchy?</p>
<p><a href="http://www.launchy.net/" rel="nofollow">http://www.launchy.net/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Katt&#039;s Mysterious 3D Lectures &#8211; Vector Application: A Better Rivet by katt</title>
		<link>http://sugarandcyanide.com/blog/2009/06/20/katts-mysterious-3d-lectures-vector-application-a-better-rivet/#comment-820</link>
		<dc:creator>katt</dc:creator>
		<pubDate>Sun, 20 Dec 2009 14:13:55 +0000</pubDate>
		<guid isPermaLink="false">http://sugarandcyanide.com/blog/?p=70#comment-820</guid>
		<description>Ahh sorry-- for some odd reason it converted my quotes?

I find that the number of points *does* in fact affect the result.  When you have non-1V degree surfaces, you end up with less intuitive motion on the locator.  It&#039;s not about evaluation time, but rather about keeping the tangent vectors crossing each other in predictable ways.

By clustering a line of V cv&#039;s and then rotating that line around the cluster, the path the U surface isoparms take through the surface becomes a bit skewed.

In the end as long as the rig doesn&#039;t flip out and makes pictures, that&#039;s all that matters; if you&#039;ve had success with the normal constraint then I can&#039;t say anything about that.  I don&#039;t use it because I haven&#039;t had any problems with my method and since I know the surface normal is created from the cross product tangent U and V vectors, I like using the source vectors.  The point of the post was that the rivet script which everyone uses can be improved upon, and that by using a script only as a black box of functionality you miss out on learning more about your software under the hood, as well as on potential fixes for poor behavior.</description>
		<content:encoded><![CDATA[<p>Ahh sorry&#8211; for some odd reason it converted my quotes?</p>
<p>I find that the number of points *does* in fact affect the result.  When you have non-1V degree surfaces, you end up with less intuitive motion on the locator.  It&#8217;s not about evaluation time, but rather about keeping the tangent vectors crossing each other in predictable ways.</p>
<p>By clustering a line of V cv&#8217;s and then rotating that line around the cluster, the path the U surface isoparms take through the surface becomes a bit skewed.</p>
<p>In the end as long as the rig doesn&#8217;t flip out and makes pictures, that&#8217;s all that matters; if you&#8217;ve had success with the normal constraint then I can&#8217;t say anything about that.  I don&#8217;t use it because I haven&#8217;t had any problems with my method and since I know the surface normal is created from the cross product tangent U and V vectors, I like using the source vectors.  The point of the post was that the rivet script which everyone uses can be improved upon, and that by using a script only as a black box of functionality you miss out on learning more about your software under the hood, as well as on potential fixes for poor behavior.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Katt&#039;s Mysterious 3D Lectures &#8211; Vector Application: A Better Rivet by exceptional basis</title>
		<link>http://sugarandcyanide.com/blog/2009/06/20/katts-mysterious-3d-lectures-vector-application-a-better-rivet/#comment-819</link>
		<dc:creator>exceptional basis</dc:creator>
		<pubDate>Fri, 18 Dec 2009 19:43:45 +0000</pubDate>
		<guid isPermaLink="false">http://sugarandcyanide.com/blog/?p=70#comment-819</guid>
		<description>Hey,

There&#039;s something happening with the &quot; symbol here which prevents code from running when copied from this thread and pasted into a script editor on OSX.  I had to run it through a plaintext converter to get it to work.

Anyway, your example works, but I was posting the above as an indicator of a situation of where it might not work, and a normal constraint would work a bit better.

Having a non-1 V degree won&#039;t affect the result of either example.  It&#039;s true that using a smaller number of points is more efficient, but maya eats NURBS for breakfast...you&#039;d need an incredibly huge ribbon before doubling the V CVs would make any difference in evaluation time.

Just because someone wrote it in a book, doesn&#039;t mean it&#039;s right!</description>
		<content:encoded><![CDATA[<p>Hey,</p>
<p>There&#8217;s something happening with the &#8221; symbol here which prevents code from running when copied from this thread and pasted into a script editor on OSX.  I had to run it through a plaintext converter to get it to work.</p>
<p>Anyway, your example works, but I was posting the above as an indicator of a situation of where it might not work, and a normal constraint would work a bit better.</p>
<p>Having a non-1 V degree won&#8217;t affect the result of either example.  It&#8217;s true that using a smaller number of points is more efficient, but maya eats NURBS for breakfast&#8230;you&#8217;d need an incredibly huge ribbon before doubling the V CVs would make any difference in evaluation time.</p>
<p>Just because someone wrote it in a book, doesn&#8217;t mean it&#8217;s right!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Katt&#039;s Mysterious 3D Lectures &#8211; Vector Application: A Better Rivet by katt</title>
		<link>http://sugarandcyanide.com/blog/2009/06/20/katts-mysterious-3d-lectures-vector-application-a-better-rivet/#comment-818</link>
		<dc:creator>katt</dc:creator>
		<pubDate>Sat, 12 Dec 2009 19:11:19 +0000</pubDate>
		<guid isPermaLink="false">http://sugarandcyanide.com/blog/?p=70#comment-818</guid>
		<description>Hi again EB,

I tried your code and tried plugging the .tv into the normalConstraint&#039;s worldUpVector.  I think I&#039;m fuzzy on what you&#039;re trying to accomplish.

From what I can see with your code, the reader object is behaving exactly as expected.  Now, in your example I do get some perceived shearing when I set reader.posU to 0.84.  Maybe that&#039;s what you&#039;re talking about?

The first problem I see here is that your V degree should be 1.  It was either in the original Art of Rigging or the Farenheit DVDs, but for a ribbon to work well you need to keep the number of points down to a minimum.  Here&#039;s an example modified from your code.  Scrub through the animation; you&#039;ll see that the Z axis always aims out properly.  Again there&#039;s a bit of perceived shearing in extreme circumstances, but in my experience that shearing never adversely effects a rig using ribbons.

If that&#039;s not what you mean, then I&#039;m a little lost here. :)


&lt;code&gt;file -new -force;

string $np[] = `nurbsPlane -d 3 -ch 0 -o on -po 0 -ax 0 1 0 -w 5 -lr .1`;
rebuildSurface -ch 0 -rpo 1 -rt 0 -end 1 -kr 0 -kcp 0 -kc 0 -su 3 -du 3 -sv 1 -dv 1 -tol 0.00393701 -fr 0  -dir 2 $np[0];

select -r nurbsPlane1.cv[0:1][0:1] ;
CreateCluster;

select -r nurbsPlane1.cv[2][0:1] ;
CreateCluster;

select -r nurbsPlane1.cv[3][0:1];
CreateCluster;

select -r nurbsPlane1.cv[4:5][0:1] ;
CreateCluster;

//make a hierarchy of the clusters
parent cluster2Handle cluster1Handle;
parent cluster3Handle cluster4Handle;

//make and connect a pointOnSurtfaceInfo node
string $posi = `createNode pointOnSurfaceInfo`;
connectAttr ($np[0] + &quot;.worldSpace[0]&quot;) ($posi + &quot;.inputSurface&quot;);

//add a reader group and give it attr for controlling the read point of the posi node,
//make the local axis visible and make it grabbable
string $readr = `group -em -n &quot;reader&quot;`;

addAttr -ln &quot;posU&quot; -dv .5 -min 0 -max 1 -at &quot;double&quot; $readr;
setAttr -e-keyable true ($readr + &quot;.posU&quot;);

addAttr -ln &quot;posV&quot; -dv .5 -min 0 -max 1 -at double $readr;
setAttr -e-keyable true ($readr + &quot;.posV&quot;);

setAttr ($readr + &quot;.displayHandle&quot;) 1;
setAttr ($readr +&quot;.displayLocalAxis&quot;) 1;

//make the aim constraint for conversion of the output vectors of the posi node to euler rotations
string $aim = `createNode aimConstraint`;

//drive the reader&#039;s translation
connectAttr ($posi + &quot;.position&quot;) ($readr + &quot;.t&quot;) ;

//hook up the UV driver attrs to the posi node
connectAttr ($readr + &quot;.posU&quot; ) ($posi + &quot;.parameterU&quot; );
connectAttr ($readr + &quot;.posV&quot; ) ($posi + &quot;.parameterV&quot; );

//connect aim constrain as specified
connectAttr ($posi + &quot;.tangentU&quot;) ($aim + &quot;.target[0].targetTranslate&quot;) ;
connectAttr ($posi + &quot;.tangentV&quot;) ($aim + &quot;.worldUpVector&quot;) ;
connectAttr ($aim + &quot;.constraintRotate&quot; ) ($readr + &quot;.r&quot; );

setAttr &quot;cluster1Handle.ty&quot; 2.5;
setAttr &quot;cluster4Handle.ty&quot; 1.25;
setAttr &quot;cluster2Handle.rx&quot; -80;
setAttr &quot;cluster4Handle.ry&quot; 140;
setAttr &quot;cluster1Handle.ry&quot; 85;
setAttr &quot;cluster4Handle.ry&quot; 45;

currentTime 1;
setAttr reader.posU 0;
setKeyframe &quot;reader.posU&quot;;

currentTime 24;
setAttr reader.posU 1;
setKeyframe &quot;reader.posU&quot;;&lt;/code&gt;</description>
		<content:encoded><![CDATA[<p>Hi again EB,</p>
<p>I tried your code and tried plugging the .tv into the normalConstraint&#8217;s worldUpVector.  I think I&#8217;m fuzzy on what you&#8217;re trying to accomplish.</p>
<p>From what I can see with your code, the reader object is behaving exactly as expected.  Now, in your example I do get some perceived shearing when I set reader.posU to 0.84.  Maybe that&#8217;s what you&#8217;re talking about?</p>
<p>The first problem I see here is that your V degree should be 1.  It was either in the original Art of Rigging or the Farenheit DVDs, but for a ribbon to work well you need to keep the number of points down to a minimum.  Here&#8217;s an example modified from your code.  Scrub through the animation; you&#8217;ll see that the Z axis always aims out properly.  Again there&#8217;s a bit of perceived shearing in extreme circumstances, but in my experience that shearing never adversely effects a rig using ribbons.</p>
<p>If that&#8217;s not what you mean, then I&#8217;m a little lost here. <img src='http://sugarandcyanide.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><code>file -new -force;</p>
<p>string $np[] = `nurbsPlane -d 3 -ch 0 -o on -po 0 -ax 0 1 0 -w 5 -lr .1`;<br />
rebuildSurface -ch 0 -rpo 1 -rt 0 -end 1 -kr 0 -kcp 0 -kc 0 -su 3 -du 3 -sv 1 -dv 1 -tol 0.00393701 -fr 0  -dir 2 $np[0];</p>
<p>select -r nurbsPlane1.cv[0:1][0:1] ;<br />
CreateCluster;</p>
<p>select -r nurbsPlane1.cv[2][0:1] ;<br />
CreateCluster;</p>
<p>select -r nurbsPlane1.cv[3][0:1];<br />
CreateCluster;</p>
<p>select -r nurbsPlane1.cv[4:5][0:1] ;<br />
CreateCluster;</p>
<p>//make a hierarchy of the clusters<br />
parent cluster2Handle cluster1Handle;<br />
parent cluster3Handle cluster4Handle;</p>
<p>//make and connect a pointOnSurtfaceInfo node<br />
string $posi = `createNode pointOnSurfaceInfo`;<br />
connectAttr ($np[0] + ".worldSpace[0]") ($posi + ".inputSurface");</p>
<p>//add a reader group and give it attr for controlling the read point of the posi node,<br />
//make the local axis visible and make it grabbable<br />
string $readr = `group -em -n "reader"`;</p>
<p>addAttr -ln "posU" -dv .5 -min 0 -max 1 -at "double" $readr;<br />
setAttr -e-keyable true ($readr + ".posU");</p>
<p>addAttr -ln "posV" -dv .5 -min 0 -max 1 -at double $readr;<br />
setAttr -e-keyable true ($readr + ".posV");</p>
<p>setAttr ($readr + ".displayHandle") 1;<br />
setAttr ($readr +".displayLocalAxis") 1;</p>
<p>//make the aim constraint for conversion of the output vectors of the posi node to euler rotations<br />
string $aim = `createNode aimConstraint`;</p>
<p>//drive the reader's translation<br />
connectAttr ($posi + ".position") ($readr + ".t") ;</p>
<p>//hook up the UV driver attrs to the posi node<br />
connectAttr ($readr + ".posU" ) ($posi + ".parameterU" );<br />
connectAttr ($readr + ".posV" ) ($posi + ".parameterV" );</p>
<p>//connect aim constrain as specified<br />
connectAttr ($posi + ".tangentU") ($aim + ".target[0].targetTranslate") ;<br />
connectAttr ($posi + ".tangentV") ($aim + ".worldUpVector") ;<br />
connectAttr ($aim + ".constraintRotate" ) ($readr + ".r" );</p>
<p>setAttr "cluster1Handle.ty" 2.5;<br />
setAttr "cluster4Handle.ty" 1.25;<br />
setAttr "cluster2Handle.rx" -80;<br />
setAttr "cluster4Handle.ry" 140;<br />
setAttr "cluster1Handle.ry" 85;<br />
setAttr "cluster4Handle.ry" 45;</p>
<p>currentTime 1;<br />
setAttr reader.posU 0;<br />
setKeyframe "reader.posU";</p>
<p>currentTime 24;<br />
setAttr reader.posU 1;<br />
setKeyframe "reader.posU";</code></p>
]]></content:encoded>
	</item>
</channel>
</rss>

