<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-2268804546541232239</atom:id><lastBuildDate>Sat, 21 Sep 2024 12:37:00 +0000</lastBuildDate><category>Stretchy Spine</category><category>introduction</category><title>Vanilla Rigging</title><description>Vanilla rigging in Maya and Houdini</description><link>http://vanillarigging.blogspot.com/</link><managingEditor>noreply@blogger.com (calin)</managingEditor><generator>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2268804546541232239.post-4951091940872720302</guid><pubDate>Sun, 20 Apr 2008 03:07:00 +0000</pubDate><atom:updated>2008-04-19T21:39:12.568-07:00</atom:updated><title>Spine Rig Part 2: Maya and Houdini implementation</title><description>&lt;div&gt;It&#39;s been a while since my last post, sorry about that but I&#39;ve been kind of busy. Anyway I found some time to put together 3 files, 1 Maya file and 2 Houdini files. &lt;/div&gt;&lt;div&gt;The Maya file is the 1:1 implementation of the diagram presented in my last post. For &lt;/div&gt;&lt;div&gt;implementation I used utility nodes. Here is the hypergraph shot with the relevant nodes:&lt;/div&gt;&lt;div&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9hf73boIXj08r9wYy5SxbLN1F_xvxKlI63pJZ1v-nMbbiBv6TIRxeGRrRMC6a_zBUXJzyKDU14-EXLq0XfguiPd-WhnLRUkDaTp03VOEIGkKWHFB7bcvOFweZO3oaX7D6f0tGQxB7xYMg/s400/mayaHypergraph.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5191167424448645394&quot; /&gt;&lt;/div&gt;&lt;div&gt;You can download the Maya file here:&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.mediamax.com/calincasian/Hosted/blog/post03/stretchySpineMaya.ma&quot;&gt;http://www.mediamax.com/calincasian/Hosted/blog/post03/stretchySpineMaya.ma&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;The first Houdini file is the 1:1 implementation of the diagram. Notice that instead of utility nodes I used expressions. The expression to compute the stretch ratio is on the spineCurve object in the Custom folder and it looks like this:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;((arclen(&quot;./OUT_ARCLEN&quot;, 0, 0, 1) - ch(&quot;originalLength&quot;)) * ch(&quot;../spineOptions/spineStretchiness&quot;) + ch(&quot;originalLength&quot;)) / ch(&quot;originalLength&quot;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;arclen() computes the arclength of the node, OUT_ARCLEN, inside the spineCurve object.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ch() is a channel reference to other parameters, something like connections in Maya.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Now that I have the ratio I wrote this expression in each bone length parameter:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;ch(&quot;../spineCurve/stretchRatio&quot;) * ch(&quot;originalLength&quot;)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Houdini file is located here:&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.mediamax.com/calincasian/Hosted/blog/post03/stretchySpineHoudini.hip&quot;&gt;http://www.mediamax.com/calincasian/Hosted/blog/post03/stretchySpineHoudini.hip&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As you can see in both files you have one parameter to control the stretchiness and the spine behaves in the same way but there are 2 different ways. One uses utility nodes and the other uses simple expressions. Now I could build a Maya file that uses expressions too but I&#39;m after the speed of the rigs and using utility nodes is the fastest way in Maya. &lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But some Houdini users may say that there must be a &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&quot;Houdini way&quot;&lt;/span&gt; build this spine. Next I&#39;m going to talk about this way, to please the users and point some interesting advantages.&lt;/div&gt;&lt;div&gt;The file in question is here:&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.mediamax.com/calincasian/Hosted/blog/post03/stretchySpineHoudiniWay.hip&quot;&gt;http://www.mediamax.com/calincasian/Hosted/blog/post03/stretchySpineHoudiniWay.hip&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once you open the file you&#39;ll notice that is significantly lighter than the other one. That&#39;s because I don&#39;t have the 20 bones anymore. I have small cubes where the bones should be. If you go inside the spineCurve node you&#39;ll discover this network:&lt;/div&gt;&lt;div&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikqex4bhMX5qJyUva4qXSjZLG55uumgLbClJrndON2ApzMlLIBAuCJVDmZymOruZXEqTZ3gdphDhx5Kd0TMLzdS0VsYAYEuixmlyNc0JY5iNuLjepQ-vVvHGsN6DXe4aRFXkQKgToXSExW/s400/houdiniCurve.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5191175606361344290&quot; /&gt;&lt;/div&gt;&lt;div&gt;This network is a bit different than the one that belong to the bones version by a couple of nodes. The most important one is the &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;carve&lt;/span&gt; node. The carve node lets you to cut a curve the way you want. In my case I&#39;ll cut it twice in U.&lt;/div&gt;&lt;div&gt;I jumped the gun here and implemented new features because it was very easy, the spine compression and hip/chest lead. &lt;/div&gt;&lt;div&gt;Spine compression is a parameter that allows you to compress the spine, or slide the spine down along the curve. &lt;/div&gt;&lt;div&gt;Hip/Chest lead will let you decide with which part of the body you want to lead. This translates into which part you want to stay put when stretchiness occur.&lt;/div&gt;&lt;div&gt;The other important piece in our puzzle is the &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;resample&lt;/span&gt; node after the carve. This node basically stands for the whole bone network. The node resamples the curve in linear segments, how many, in my case 20 because I had 20 bones in the other example.&lt;/div&gt;&lt;div&gt;Next I copied onto each curve point a cube. I&#39;ve done this for purely visualization purpose.  &lt;/div&gt;&lt;div&gt;Notice that the stretch ratio expression is the same but now instead the bone length expression I have 2 expressions on the carve node.&lt;/div&gt;&lt;div&gt;First U:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;(ch(&quot;../../spineOptions/hipChestLead&quot;)) * (1 - ch(&quot;../stretchRatio&quot;))&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Second U:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;ch(&quot;../stretchRatio&quot;) + (ch(&quot;../../spineOptions/hipChestLead&quot;)) * (1-ch(&quot;../stretchRatio&quot;))&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Play with the parameters and see how the two values changes.&lt;/div&gt;&lt;div&gt;The biggest advantage using this method is the fact that on stretchiness = 1 the last cube will always be where the control point is regardless how crazy the curve shape is. This doesn&#39;t happen in a regular spline IK solution. &lt;/div&gt;&lt;div&gt;Please watch the following movie for a short overview of the 3 files and to see what I meant by the advantage mentioned above. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.blogger.com/video.g?token=AD6v5dwYXFi14DmQm2d61lZ3uDQPejzKD6YmPdnURUMUO-E-l5wEefUc8LoQ_6E-_T_1L6_TWhUEExztIXLZPiLOYA&#39; class=&#39;b-hbp-video b-uploaded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is the same video in higher resolution:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.mediamax.com/calincasian/Hosted/blog/post03/blog01-StretchySpine.mov&quot;&gt;http://www.mediamax.com/calincasian/Hosted/blog/post03/blog01-StretchySpine.mov&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next blog entry should be on implementing the spine compression and hip/chest lead across the board and  twist/stabilizing the spine.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;see ya soon&lt;/div&gt;&lt;div&gt;calin&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description><enclosure type='video/mp4' url='http://www.blogger.com/video-play.mp4?contentId=73839af882598c1a&amp;type=video%2Fmp4' length='0'/><link>http://vanillarigging.blogspot.com/2008/04/spine-rig-part-2-maya-and-houdini.html</link><author>noreply@blogger.com (calin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9hf73boIXj08r9wYy5SxbLN1F_xvxKlI63pJZ1v-nMbbiBv6TIRxeGRrRMC6a_zBUXJzyKDU14-EXLq0XfguiPd-WhnLRUkDaTp03VOEIGkKWHFB7bcvOFweZO3oaX7D6f0tGQxB7xYMg/s72-c/mayaHypergraph.png" height="72" width="72"/><thr:total>6</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2268804546541232239.post-3356406379061853999</guid><pubDate>Sat, 22 Mar 2008 03:34:00 +0000</pubDate><atom:updated>2008-03-21T21:56:22.077-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Stretchy Spine</category><title>Spine Rig Part 1: Building a Stretchy Spine</title><description>Building a stretchy spine isn&#39;t much of a secret anymore. I&#39;m sure there are tons of scripts that build a spine for you, which is a good thing, but here I&#39;ll explain how to build one from scratch and what happens under the hood so YOU can build the script.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is a generic diagram of things you have to do to achieve a stretchy spine.&lt;/div&gt;&lt;div&gt; &lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNKSAcnQ4niiqBgqM1b0Wt4ocFV866sHj0wlmbIKfM48ChlyiPzhi3HU_qELOWRBTg6NFUrTZI99t2xg8640bAlyoAuE__hXXaW-itamV0itwAuHvgBJb5YZ3YSkcKhmIfqRlk_hXCEMWA/s400/stretchySpineGeneric.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5180407788378173314&quot; /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Here is a bigger version of the diagram.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://www.mediamax.com/calincasian/Hosted/blog/post01/stretchySpineGeneric.png&quot;&gt;http://www.mediamax.com/calincasian/Hosted/blog/post01/stretchySpineGeneric.png&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;As you can see there are a couple of constants as attributes and a variable parameter.&lt;/div&gt;&lt;div&gt;The term &#39;at creation&#39; means the state before we start to modify any attribute or parameter from that particular object.&lt;/div&gt;&lt;div&gt;The term &#39;current&#39; refers at the current state, after we modified attributes/parameters/point and so on for the object in question.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Original curve length is an constant and it stores the length of the curve at creation.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;The &quot;Original bone length&quot; is the length of the bone at creation.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Stretchiness is a parameter that takes values between 0 ad 1 and it represents the amount of stretchiness in the bones. &lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;The goal is to compute a scale ratio for the bone length in such a way that the sum of all bones will meet the stretchiness factor. It will be more clear later.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;We take the current curve shape and we find out it&#39;s arc length. By subtracting the original curve length we&#39;ll know if the current curve is longer or shorter and by how much. The next step will be to multiply the &quot;stretchiness&quot; parameter with the result of the subtract. This way we have the exact amount (positive or negative depending if the curve is longer or shorter) that we need to add to the original curve length in respect to the &quot;stretchiness&quot; parameter.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Now that we have the new current length we have to find a scale ratio for each bone. We do that by dividing the new curve length by the original curve length and we find the ratio. The ratio is greater than 1 if the current curve is longer, and between 0 and 1 if the curve is shorter. The ratio of 0 basically means that our current curve length is 0, in other words the curve is collapsed into a single point, very unlikely. It is this ratio that we need to multiply with the original bone length to find out the current bone length.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;That was the basics of a stretchy spine which has a parameter, &quot;stretchiness&quot;, that controls how much of a stretch we want.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;I hope you enjoyed it and please make sure you&#39;ll check the next post about stretchy spine implementation in Maya.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://vanillarigging.blogspot.com/2008/03/spine-rig-part-1-building-stretchy.html</link><author>noreply@blogger.com (calin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNKSAcnQ4niiqBgqM1b0Wt4ocFV866sHj0wlmbIKfM48ChlyiPzhi3HU_qELOWRBTg6NFUrTZI99t2xg8640bAlyoAuE__hXXaW-itamV0itwAuHvgBJb5YZ3YSkcKhmIfqRlk_hXCEMWA/s72-c/stretchySpineGeneric.png" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2268804546541232239.post-7769630299724131429</guid><pubDate>Sun, 16 Mar 2008 02:34:00 +0000</pubDate><atom:updated>2008-03-15T20:19:54.204-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">introduction</category><title>Why vanilla rigs?</title><description>Because I like vanilla ice cream? No, actually I don&#39;t like vanilla ice cream, chocolate is my favorite. Ok, let&#39;s not make this blog about culinary preferences, I&#39;m sure there are others out there with far more experience than I am in that matter.&lt;div&gt;&lt;br /&gt;&lt;div&gt;I DO like vanilla rigs. Why? simple because you take advantage of the package at hand. &lt;/div&gt;&lt;div&gt;What do I mean by vanilla rigs? Rigs that use only nodes, expressions and other tools made available by the software developers and no custom plug-ins of any kind, free or not. &lt;/div&gt;&lt;div&gt;I don&#39;t have anything against custom stuff but for the purpose of this blog I&#39;d like to keep everything within the boundaries of a specific application.&lt;/div&gt;&lt;div&gt;Productions these days can spread across continents and make use of vast number of applications. Because of that, vanilla rigs will make everybody&#39;s life easier.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ok I think you got my point and it&#39;s time to move on to the specifics of this blog.&lt;/div&gt;&lt;div&gt;I would like to create a series of video examples, not necessary tutorials on how to do stuff, and by stuff I mean rigs or rig bits, because everybody has their own way.&lt;/div&gt;&lt;div&gt;So... in the beginning there was a problem. Then there was a solution to that problem. I&#39;ll record how to implement that solution and share it with you. I&#39;ll let you decide if it&#39;s a good solution, a fast solution, a flexible solution or a crappy one. I very much appreciate any comments to the solution. Also any improvements to the solution are welcomed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I don&#39;t have a specific timeline, I do have a full time job, but I would like to post every week or every other week.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Please feel free to suggest problems in either form, comments to an existing entry or e-mailing me directly. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That&#39;s about it. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;cheers&lt;/div&gt;&lt;div&gt;calin&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://vanillarigging.blogspot.com/2008/03/why-vanilla-rigs.html</link><author>noreply@blogger.com (calin)</author><thr:total>4</thr:total></item></channel></rss>