<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ALA's HOME &#187; CG</title>
	<atom:link href="http://vlookr.com/category/cg/feed" rel="self" type="application/rss+xml" />
	<link>http://vlookr.com</link>
	<description>Ain't No High Mountain</description>
	<lastBuildDate>Sun, 09 May 2010 09:08:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>六种方法将物体吸附在模型上</title>
		<link>http://vlookr.com/2010/05/6-ways-to-attach-objects-on-mesh.html</link>
		<comments>http://vlookr.com/2010/05/6-ways-to-attach-objects-on-mesh.html#comments</comments>
		<pubDate>Sun, 09 May 2010 09:06:26 +0000</pubDate>
		<dc:creator>XRacZ</dc:creator>
				<category><![CDATA[绑定]]></category>
		<category><![CDATA[djRivet]]></category>
		<category><![CDATA[hyperRealMeshParent]]></category>
		<category><![CDATA[Maya]]></category>
		<category><![CDATA[rivet]]></category>
		<category><![CDATA[rivet EX]]></category>
		<category><![CDATA[setup]]></category>
		<category><![CDATA[Surface Attach]]></category>
		<category><![CDATA[粒子发射器]]></category>

		<guid isPermaLink="false">http://vlookr.com/?p=438</guid>
		<description><![CDATA[好久没写教程分享经验了，因为出来工作后一直没有电脑（都腐败到摄影器材去了，==！），也很忙就一直没时间整理。今天和大家分享下这段时间积累的一些关于将物体吸附在模型表面上的方法。以下多数方法我都在实际项目中测试和使用过。
1、rivet
rivet脚本可以说是实现面吸附的最经典做法，并且在此基础上发展出了其它更成熟的插件。主要由curveFromMeshEdge、loft、pointOnSurfaceInfo几个节点来实现。
用法：选polygon上任意两边，执行rivet，在两边之间会创建一个locator，用此locator去约束任意你想吸附的物体。
缺点：1、只能用在polygon上。
             2、经常出现模型变形时会翻转的情况，解决起来需要用到复杂的方法。
             3、模型smooth后会飞掉，因为smooth后模型上原有边的ID号变了，curveFromMeshEdge节点里记录的值就失效了。
2、rivet EX
rivet的增强版，可实现单边创建吸附，还可以在nurbs面上选Isoparm线、在nurbs线上选点来吸附。
用法：选模型一条或两条边，或者nurbs线上的点，执行rivet即可。创建出来的locator还有属性可调节位置，原理是通过改变UV值的方式。
缺点：除了可以用在polygon之外的物体上以外，其它缺点和rivet一样。
3、hyperRealMeshParent
来自当年Alias超写实绑定系列里的插件，含金量相当高，核心上还是rivet，它利用closestPointOnMesh节点（现已经改为nearestPointOnMesh）来计算被吸附物离模型的最近距离位置，实现同时对多个物体做吸附。此外还有算法来查找最佳对边来杜绝模型变形时发生翻转的情况。真不愧是大师写的插件。
用法：先在插件管理器里开启decomposeMatrix和nearestPointOnMesh两个插件，选择吸附物，往后选择的全部是被吸附物，执行hyperRealMeshParent；
缺点：1、依然不能smooth模型。
             2、会在模型上产生太多节点，影响性能。
P.S：提供我修改过的hyperRealMeshParent下载，原先版本仅适用与Maya 7或更早版本，hyperRealMeshParent.zip
4、djRivet
应该说是hyperRealMeshParent的改良版，但核心技术上用的是hair里的毛囊节点，此法彻底解决了模型smooth后飞掉和变形翻转的问题，此外还可同时对多个物体做吸附。
用法：选择一个或多个被吸附物体，最后选吸附体，执行djRivet即可。操作和hyperRealMeshParent相反。
缺点：毛囊法和UV有关，UV变了毛囊也发生位移了，在模型未分好UV前别用！
5、粒子发射器
此法跟毛囊法类似，就是选面在面上创建粒子发射器，发生率打零即可。此法缺点也是相当明显的，首先还是smooth的问题，然后就是创建出的发射器不会随着面的形变有角度上的改变，若用发射器对被吸附体做父子约束，模型发生形变时对被吸附的影响仅是位移上的，旋转始终为零。当然可以在模型中心或什么地方放一个locator对发射器做目标约束修正这个问题，但显然太麻烦了，我从来没有在项目中使用此法。
6、Surface Attach
来自肌肉系统里的Surface Attach可以说是最成熟的技术，算是提取了hyperRealMeshParent和rivet EX的精华改良而来，针对模型smooth和变形翻转它都提供了解决方案，被整合进Maya当之无愧！这是我目前在项目中稳定使用的技术，还利用它写了一个批量将骨骼钉在选定模型面上的插件。
用法：选择polygon的两边或面，或者选择nurbs进入surface point模式，在面上选一个位置，执行Muscle &#8211;&#62; Bonus Rigging &#8211;&#62; Surface Attach。创建出来的cMuscleSurfAttach吸附物有一个Fix Poly Flip属性，默认为off，若在模型变形时出现翻转的情况，打为on即可。模型smooth后飞掉，选择所有cMuscleSurfAttach物体，执行Bonus Rigging菜单里的Fix Surface Attach to allow for Poly Smooth即可还原正确位置。
以上是我目前所知道的所有方法，此外我还看到一些商业插件可实现吸附（没搞到手），但原理上应该离不开以上这些，尤其是经典的rivet。
]]></description>
		<wfw:commentRss>http://vlookr.com/2010/05/6-ways-to-attach-objects-on-mesh.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>整合自定义右键菜单实现FK/IK无缝切换</title>
		<link>http://vlookr.com/2009/03/maya-dagmenuproc-script-controls-right-mouse-button-for-fkik-seamless-switch.html</link>
		<comments>http://vlookr.com/2009/03/maya-dagmenuproc-script-controls-right-mouse-button-for-fkik-seamless-switch.html#comments</comments>
		<pubDate>Mon, 09 Mar 2009 12:44:07 +0000</pubDate>
		<dc:creator>XRacZ</dc:creator>
				<category><![CDATA[CG]]></category>
		<category><![CDATA[绑定]]></category>
		<category><![CDATA[dagMenuProc]]></category>
		<category><![CDATA[FK/IK Seamless]]></category>
		<category><![CDATA[Maya]]></category>
		<category><![CDATA[Mel编程]]></category>
		<category><![CDATA[Rigging Demo]]></category>
		<category><![CDATA[Victor Vinyals]]></category>
		<category><![CDATA[右键菜单]]></category>
		<category><![CDATA[无缝切换]]></category>

		<guid isPermaLink="false">http://vlookr.com/?p=241</guid>
		<description><![CDATA[原创文章，转载请注明出处！！！
今天又拿Victor Vinyals的Rigging Demo 说事了，没办法，实在太经典了，有很多东西值得去挖，比如本文要介绍的自定义右键菜单实现FK/IK无缝切换，如果您还不知道如何实现无缝切换，请先学习《单骨骼FK/IK无缝切换技术》，至于整合Mel进.ma（.mb）文件，请参见《将Mel整合进.ma（.mb）文件》。此外，虽然无法下到Victor的源文件，但有个叫Nimo的免费Rigging也为我们的研究提供了很好的参考，本文将借鉴里面的代码来说说实现的方法。

如何改造右键菜单？
Maya自带的dagMenuProc.mel（在Autodesk\Maya&#60;版本号&#62;\scripts\others目录可找到）提供了一系列Maya右键菜单的实现方法，我们不必深究每行代码的意思，只需知道如何改造dagMenuProc(string $parent, string $object)这个函数里的内容即可，因为它才是关键！我们还需要另外定义一个函数来存储自定义右键菜单，再用dagMenuProc来调用它，这是一种较科学的方法，因为当我们需要为自己的右键菜单定义新功能或修改的时候，不必去翻dagMenuProc里的一大堆代码，我们尽可能保留它的原样，存储在一个脚本节点里，只需修改自定义右键菜单函数里的内容即可。
本文将借用Seith的源文件（已绑定好）来做范例，推荐下载来学习本教程：custom_right_click_button_for_fkik_seamless_switch_init.ma
步骤：
1、打开这个文件（custom_right_click_button_for_fkik_seamless_switch_init.ma）。进入表达式编辑器（Expression Editor）,在Select Filter菜单里选中By Script Node Name。
2、在表达式编辑器的Script Node Name里填入FKIK_switch_Node，我们将创建这个脚本节点来存储FK/IK无缝切换的代码，将ikfk_switch_002.zip里的代码粘贴进脚本（Script）框，点击“创建”，并把执行条件（Execute On）改为Open/Close。
3、同上方法，创建一个叫customMenu_Node的脚本节点来存储以下代码：
global proc customMenu (string $shortName)
{
if($shortName==&#8221;L_wrist_JNT&#8221; &#124;&#124; $shortName==&#8221;L_elbow_JNT&#8221; &#124;&#124; $shortName==&#8221;L_shoulder_JNT&#8221;)
{
menuItem   -label &#8220;FK&#124;IK Switch&#8221;    -command &#8220;IkFk_switch( \&#8221;\&#8221;, \&#8221;L_\&#8221;, \&#8221;arm\&#8221; );&#8221;    -enable 1   -radialPosition &#8220;N&#8221;    -enableCommandRepeat 1;
}
}
这就是我们要定义的自定义右键菜单函数，其实很容易理解，if语句用来判断了当鼠标指在哪个物体上时，创建什么样的菜单，这里我定义了在L_wrist_JNT、L_elbow_JNT、L_shoulder_JNT这几个骨骼上弹出指定的菜单，“&#124;&#124;”符号表示或者。
menuItem命令是用来创建菜单的，-label标签用来记录菜单名；-command标签用来记录要执行的Mel命令，记住，命令里标点符号前要加&#8220;\&#8221;；-radialPosition用来记录菜单的方位：
N——北、S——南、W——西、E——东、SW——西南、SE——东南、NW——西北、NE——东北
其它标签不做详细介绍，懂得照着用就行。
4、现在我们要改动下dagMenuProc.mel文件，记得复制一份出来修改，而不是修改默认目录里的那个。找到dagMenuProc(string $parent, string $object)这个函数，在string $shortName = `substitute &#8220;.*&#124;&#8221; $object &#8220;&#8221;`;一句下面加入这段:
if($shortName==&#8221;L_wrist_JNT&#8221; &#124;&#124; $shortName==&#8221;L_elbow_JNT&#8221; &#124;&#124; $shortName==&#8221;L_shoulder_JNT&#8221;)
{
customMenu $shortName;
}
该判断将调用customMenu函数在指定的位置生成自定义菜单，此时还得把后面一大段（即代码最后“} else {……}”前）用else {……}括起来，即在其他位置依然弹出Maya默认菜单。把修改后的dagMenuProc代码，全部添加进表达式编辑器，创建一个叫dagMenuProc_Node的节点来保存即可（方法还是同上）。可以下载我修改的文件来参考下：dagmenuproc_mod.mel
5、最后这步相当重要，再新建一个脚本节点executeOnFileLoad，里面填入一句scriptNode [...]]]></description>
		<wfw:commentRss>http://vlookr.com/2009/03/maya-dagmenuproc-script-controls-right-mouse-button-for-fkik-seamless-switch.html/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>将Mel整合进.ma(.mb)文件</title>
		<link>http://vlookr.com/2009/03/maya-mel-and-ma-file-integrate-tutorial.html</link>
		<comments>http://vlookr.com/2009/03/maya-mel-and-ma-file-integrate-tutorial.html#comments</comments>
		<pubDate>Sat, 07 Mar 2009 08:39:16 +0000</pubDate>
		<dc:creator>XRacZ</dc:creator>
				<category><![CDATA[CG]]></category>
		<category><![CDATA[绑定]]></category>
		<category><![CDATA[.ma]]></category>
		<category><![CDATA[createNode script]]></category>
		<category><![CDATA[Maya API]]></category>
		<category><![CDATA[Mel编程]]></category>
		<category><![CDATA[nimo]]></category>
		<category><![CDATA[Script Node]]></category>
		<category><![CDATA[整合]]></category>

		<guid isPermaLink="false">http://vlookr.com/?p=226</guid>
		<description><![CDATA[原创文章，转载请注明出处!!!
其实非常简单，但是发现这方面的资料就是少得可怜啊，是不是高手们都不屑于写这样的教程啊，这不利于大家的共同进步啊！近日我因困扰于这个问题，狂扒nimo rigging里的代码，还在论坛上发贴求助，虽然没有得到什么完整的答案，但是几个朋友的提示还是给了我莫大的启发。迫不及待写这份教程来和大家分享。
两种方法，大家按喜好取舍。
先分析下吧，比如我们要将这段代码（灰色斜体字为自己定义的函数和变量名）整合进.ma文件：
global proc string mel_integrate_test1()
{
if (`window -exists showUI`) delete showUI;
window showUI;
rowColumnLayout -numberOfColumns 1 -columnWidth 1 60;
text -label &#8220;Hello!World!&#8221;;
showWindow showUI;
return 1;
};
我们只要创建一个脚本节点（Script Node）来存储这段代码即可，看步骤，方法一：
1、打开Maya，新建场景（废话），什么都不用往里面加，我们只是做测试，给大家介绍方法。
2、在命令栏或者脚本编辑器运行   createNode script -n &#8220;mel_integrate_test1&#8220;;   命令，创建一个叫mel_integrate_test1的脚本节点。
3、打开大纲（Outliner）窗口，在Display里面取消DAG Objects Only的选项，会看到一堆隐藏节点，其中就有我们刚创建的mel_integrate_test1节点，选中。
4、进入表达式编辑器（Expression Editor），注意，一定要选中mel_integrate_test1节点，然后把上面那段代码粘贴进表达式（Expression）输入框，单击创建，如果代码没错，创建会成功的。在命令栏或者脚本编辑器执行mel_integrate_test1，看看是不是有个窗口弹出来了，哈哈，大功告成！
方法二，更简单：
1、同上
2、进入表达式编辑器（Expression Editor），在Select Filter菜单里选中By Script Node Name，在Script Node Name处填入mel_integrate_test1，把文中示例代码填入脚本（Script）框，点击创建，创建完毕后把Execute On（执行条件）改为Open/Close，再点击编辑即可。完成！
两种方法有什么区别？其实原理上是一致的，都是需要一个脚本节点来存储代码，只是第一种还需要借助表达式节点来帮助存储，而第二种直接存储在脚本节点中。个人推荐第二种，简单而且标准。
P.S：文中示例文件下载：mel_integrate_test1.ma
]]></description>
		<wfw:commentRss>http://vlookr.com/2009/03/maya-mel-and-ma-file-integrate-tutorial.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>搞笑的Wall-E，在奥斯卡上把小金人都给扔了</title>
		<link>http://vlookr.com/2009/02/wall-e-joke-at-the-81st-annual-academy-awards-animation-2008.html</link>
		<comments>http://vlookr.com/2009/02/wall-e-joke-at-the-81st-annual-academy-awards-animation-2008.html#comments</comments>
		<pubDate>Sat, 28 Feb 2009 08:22:07 +0000</pubDate>
		<dc:creator>XRacZ</dc:creator>
				<category><![CDATA[CG]]></category>
		<category><![CDATA[81st Annual Academy]]></category>
		<category><![CDATA[Animation 2008]]></category>
		<category><![CDATA[Oscar]]></category>
		<category><![CDATA[Pixar，皮克斯]]></category>
		<category><![CDATA[Wall-E]]></category>
		<category><![CDATA[动画]]></category>
		<category><![CDATA[奥斯卡]]></category>
		<category><![CDATA[恶搞]]></category>
		<category><![CDATA[搞笑]]></category>

		<guid isPermaLink="false">http://vlookr.com/?p=216</guid>
		<description><![CDATA[这是我截取的81届奥斯卡中08年最佳动画长片颁奖的一个片段，Wall-E再次展现出其超乎常人的可爱一面，从垃圾堆里挖出了小金人和一盘标记着&#8221;81st Academy Awards&#8221;的录影带，打量了一番，便把小金人扔到脑后了，带着这盘录像带回家，兴高采烈的看奥斯卡（动画片），哈哈～真笑翻了，喜欢Wall-E的朋友别错过！

优酷视频（网速慢的试试）：

经彩截图：










]]></description>
		<wfw:commentRss>http://vlookr.com/2009/02/wall-e-joke-at-the-81st-annual-academy-awards-animation-2008.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>动画界传奇人物John Lasseter畅谈七大创意原则</title>
		<link>http://vlookr.com/2009/02/john-lasseter-talk-about-7-principles-of-creative.html</link>
		<comments>http://vlookr.com/2009/02/john-lasseter-talk-about-7-principles-of-creative.html#comments</comments>
		<pubDate>Fri, 27 Feb 2009 05:19:53 +0000</pubDate>
		<dc:creator>XRacZ</dc:creator>
				<category><![CDATA[CG]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[Creative]]></category>
		<category><![CDATA[John Lasseter]]></category>
		<category><![CDATA[Pixar]]></category>
		<category><![CDATA[创意]]></category>
		<category><![CDATA[动画]]></category>

		<guid isPermaLink="false">http://vlookr.com/?p=213</guid>
		<description><![CDATA[最近皮克斯，动画界传奇John Lasseter在接受一家德国媒体《南方德国报》采访时畅谈了他所谓坚持的“七大创意原则”，他表示这七大原则是他实现其动画电影创作目标的根源所在。 2月号的业界知名杂志《动画》（Animation Magzine）刊登了这“七大创意原则”的英文版本。

John Lasseter
关于John Lasseter：皮克斯创始人之一。《玩具总动员》《虫虫危机》《玩具总动员2》《汽车总动员》和多部皮克斯动画短片的导演，皮克斯所有作品的监制。 2006年迪士尼收购皮克斯后被任命为迪士尼动画部首席创意官，迪士尼乐园首席幻想工程师，同时保留皮克斯动画工作室里的职务，2009年威尼斯电影节决 定授予John Lasseter终身成就奖已表彰他对动画界做出的贡献。多家媒体甚至称John Lasseter是动画界今日的华特迪士尼。
 原则之一：永远不要只抱着一个点子
&#8220;不管你是去写一本书，还是去设计一件家具，又或是像我一 样去制作一部动画电影，一开始，你不能只抱着一个点子，你至少应该有三个点子在脑袋中。这么做的原因非常简单，如果一个制片人只向我提议一个新的制作企划 项目，那么他肯定为这个项目绞尽脑汁，钻研了太久了，这无疑限制了他的想象力。我给他的回答是非常简单的，等你同时想出了三个企划项目的时候再来找我，而 且我不是意味着这三个是一个出色的，两个糟糕的。我的要求是这三个都非常好的点子&#8211;好到你自己都难以评判哪个是最好的一个。然后，我们再坐下来决定你会 实现你的哪一个想法。&#8221;
&#8220;有创意的人经常会全神贯注的研究自己的一个想法，而这么做带来的后果就是他们从一开始就限制了自己的选 择的空间。我认为每个有创意的人都应该去考虑同时去企划三个点子的做法。你会惊讶的发现这样做会使你去思考你之前从没有思考的东西，你必然会发现新大陆。 并且，请相信我，这个世界上永远同时会有三个好点子供你去思考。&#8221;
 原则之二：记住创作过程中的第一次欢笑
&#8220;创作过程中所面临的一个巨大问题就是你怎么去完善自己的想法。使得你的主意尽善尽美无疑是非常重要的，但是这么做也会带来一些危险。当你有一个故事， 一个点子或是一个笑话，你把它们记录下来，它们对你的影响力是会随着时光的推移而不断减弱的。很简单，当你第二次听到同一个笑话时，你或许还会真诚的欢 笑，但是到了第三，第四次，你或许只能偶尔笑笑了，当你听这个笑话听到第一百次的时候，不管这个笑话本身有多好，你会讨厌它。&#8221;
&#8220;所以我对我的创作者们说，一定要记住你们创作过程中的第一次欢笑，有必要的话要写下来。也许有时这是一件麻烦的事情，但它无疑是重要的。很多情况下，好的点子流失就是因为人们忘了他们第一次听到这个好点子时的反应。&#8221;
 原则之三：质量是最大的商业计划
&#8220;有一个我永远都不会妥协的重要原则，那就是无论制作周期或是经费上的限制，一旦你有了一个更棒的想法，你就要重头来过，重做一遍。你必须这么做。在任 何一个创意产业，从长期考虑，质量是唯一的商业计划。许多管理者不能够理解这点，但是观众们深深明白。创作过程只有等真正有创意的人说完成的时候它才算完 成，这不代表创作人没有压力。压力是永远都有的，但是每一个创作者都应该拥有最后的决定权！&#8221;

原则之四：团队就是一切
&#8220;一个关键的问题到底是团队还是个人更具有创意。我的回答是，在大多是情况下，是团队。作为一个管理者，废除一个团队里的任何等级制度是我的责任，对我 们来说很重要的一条规则就是到底是哪一个个体想出了这个点子并不重要。一个团队的确必须真诚的，直接的，努力去帮助每一个创意个体，但是你还是要记住，团 队就是一切。&#8221;
 原则之五：快乐激发创意，而不是竞争
&#8220;曾有不少人这么认为，当你 把两个不能互相容忍对方的人放在一起，借助他们之间的消极对抗竞争，或许你就会得到一个伟大的创意。我个人不同意这样的看法，我认为合作，自信和快乐才是 创意的缔造者。有创意的人需要相信每一个参与者对他们都有极大的信任才能制造出一部伟大的电影。有创意的人很容易感觉无聊，他们十分情绪化。你必须想尽办 法去为他们创造快乐，去关心他们。有创意的人只有当你创造性的去挑战他们的时候才能贡献出伟大的创意。作为管理者，你的一大任务就是使得有创意的人衷心热 爱他们正在做的东西，让他们为自己作为某项计划的一分子而感到自豪。你必须要经常的给有创意的人有创造性的挑战，这是一项相当艰巨的任务。不过反过来说， 没人认为管理有创意的人是一件简单的事情。&#8221;
原则之六：创意品的输出永远能反映出这个公司高层的实质
&#8220;一个不够格的管理者会阻碍创作过程的进行。一个到处使坏脾气，禁止他的员工玩乐的管理者无疑会削弱这个团队的创造力，并且伤害到整个团队的凝聚力。我肯定的炒掉这样一个管理者，我没有钱去冒这个风险，让他伤害到我的生意。&#8221;
原则之七：让你自己被你所相信的创意人员所包围
&#8220;只把那些你认为和你一样有天赋或者比你更有天赋的人带入你的创作团队（如果他们愿意并且好性情的话）。许多管理者认为雇佣那些比他们更有天赋的人会使 得他们在团队中的位置不稳，有不安全感。我要说的是不安全感是不可能和创造力共存的。许多管理者让他们的周围布满了那些听从自己指示的人，其带来的结果就 是他们只能给观众带来一部糟糕的电影。&#8221;
]]></description>
		<wfw:commentRss>http://vlookr.com/2009/02/john-lasseter-talk-about-7-principles-of-creative.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Non-Roll绑定技术教程</title>
		<link>http://vlookr.com/2009/02/non-roll-rigging-technical-tutorial.html</link>
		<comments>http://vlookr.com/2009/02/non-roll-rigging-technical-tutorial.html#comments</comments>
		<pubDate>Wed, 25 Feb 2009 18:48:58 +0000</pubDate>
		<dc:creator>XRacZ</dc:creator>
				<category><![CDATA[CG]]></category>
		<category><![CDATA[绑定]]></category>
		<category><![CDATA[Maya Tutorial]]></category>
		<category><![CDATA[Maya教程]]></category>
		<category><![CDATA[non roll rigging]]></category>
		<category><![CDATA[Victor Vinyals]]></category>
		<category><![CDATA[无翻转]]></category>
		<category><![CDATA[绑定教程]]></category>

		<guid isPermaLink="false">http://vlookr.com/?p=202</guid>
		<description><![CDATA[原创文章，转载请注明出处！！
相信很多人看过Victor Vinyals的Rig Demo Reel，里面很多技术亮点让人好奇，如FK/IK无缝切换，Non-Roll肩膀……等，笔者最近就着迷于Non-Roll技术而四处搜寻教程却只找到了Victor的原帖，而且他提供的源文件也因时间过长而无法下载，好在通过animator.k大哥找到了源文件。于是苦心研究了两天，总算弄明白其中的原理，特地写份教程来和大家分享。
何为Non-Roll技术？
即无翻转技术，相信很多动画师在K动画时遇到的一个问题是旋转过度时模型会翻转的问题，尤其是肩膀，而Victor的Non-roll技术彻底杜绝了这个问题，而且还能保证正常的动画。
Non-Roll的原理是什么？
简单的说就是通过两套骨骼来分别控制蒙皮的和控制旋转、位移，后者带这前者走，但是其旋转的时候还不会带着前者一起旋转，因为给前者做了个IK，并且给了极向量约束，自然旋转被锁住了，翻转的问题就解决了。
我将尽可能简化Victor的源文件来写这份教程，省去弹性骨骼、圆滑控制……的方法，重点集中在Non-Roll技术上。
P.S：本教程用到的模型为Victor的源模型，希望Victor看到不要见意，嘿嘿～
首先你要搭建了这样一套骨骼（如图），建议下载我的源文件(Maya 8.5以上)。



1、l_shoulder_rollBone1至l_shoulder_rollBone2做IK，命名为l_shoulder_rollIKHandle；
l_forearm_rollBone1到l_forearm_rollBone2做IK，命名为l_forearmRoll_ikHandle；
l_shoulder_jnt到l_wrist_jnt做IK，命名为l_arm_ikHandle；
l_wrist_jnt到l_wrist_ballJnt做IK，命名为l_wrist_ikHandle。
2、创建locator，命名为l_shoulder_rollLocator，吸附至骨点l_shoulder_rollBone2，并且P给l_shoulder_jnt；
创建locator，命名为l_forearmRoll_locator，吸附至骨点l_forearm_rollBone2，并且P给l_elbow_jnt；
创建locator，命名为l_shoulder_rollPole，放置在骨点l_shoulder_jnt下方；
创建locator，命名为l_forearmRoll_pole，放置在骨点l_elbow_jnt下方。
3、l_shoulder_rollLocator对l_shoulder_rollIKHandle作点约束，l_shoulder_rollPole对l_shoulder_rollIKHandle做极向量约束；
l_forearmRoll_locator对l_forearmRoll_ikHandle作点约束，l_forearmRoll_pole对l_forearmRoll_ikHandle做极向量约束。
4、创建控制器l_hand__Control，放置手掌，并将轴心吸附至l_wrist_jnt（注意要Freeze，将数值归零，以下类同），将l_arm_ikHandle和l_wrist_ikHandle P给这个控制器；
创建控制器l_arm__upVector，放置肘部后端，并对l_arm_ikHandle做极向量约束；
创建控制器l_shoulder_FK_ctrl，对其打组，命名为l_shoulder_FK_ctrl_grp，吸附至骨点l_shoulder_jnt，对齐旋转轴，l_shoulder_FK_ctrl对l_shoulder_jnt做旋转约束，将l_shoulder_FK_ctrl_grp P给上级骨骼spine_end_jnt；
创建控制器l_elbow_FK_ctrl，对其打组，命名为l_elbow_FK_ctrl_grp，吸附至骨点l_elbow_jnt，对齐旋转轴，l_elbow_FK_ctrl对l_elbow_jnt做旋转约束，将l_elbow_FK_ctrl_grp P给上级骨骼l_shoulder_jnt；
5、至此，绑定结束，很简单吧，关键是蒙皮，必须注意的是控制旋转、位移的骨骼（l_shoulder_jnt、l_elbow_jnt、l_wrist_jnt）不参与蒙皮！！！而其它骨骼影响模型的相应位置！其中l_wrist_ballJnt影响整个手掌。
大家可以下载我做得每个步骤的文件来参考和测试。本教程只是简单阐述Non-Roll绑定的方法，其中提供的文件都是不完整而且不能用于实际生产的，只希望大家能从中学到一种思路，拓展自己绑定的思维。
有什么问题，欢迎留言，大家一起交流！
]]></description>
		<wfw:commentRss>http://vlookr.com/2009/02/non-roll-rigging-technical-tutorial.html/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>从“火星”归来，奉上我参与的第一部动画</title>
		<link>http://vlookr.com/2009/01/my-first-animation-work-duopo-final.html</link>
		<comments>http://vlookr.com/2009/01/my-first-animation-work-duopo-final.html#comments</comments>
		<pubDate>Thu, 22 Jan 2009 06:15:46 +0000</pubDate>
		<dc:creator>XRacZ</dc:creator>
				<category><![CDATA[CG]]></category>
		<category><![CDATA[个人作品]]></category>
		<category><![CDATA[48期Maya影视动画长期班]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[duopo]]></category>
		<category><![CDATA[hxsd]]></category>
		<category><![CDATA[Original Works]]></category>
		<category><![CDATA[short film]]></category>
		<category><![CDATA[动画]]></category>
		<category><![CDATA[原创]]></category>
		<category><![CDATA[夺魄]]></category>
		<category><![CDATA[火星时代]]></category>
		<category><![CDATA[短片]]></category>

		<guid isPermaLink="false">http://vlookr.com/?p=179</guid>
		<description><![CDATA[这是我在火星时代学习时参与的毕设作品，算是我做的第一部动画，虽然还有很多不成熟的地方，但是它记录着我们（火星时代48期Maya影视动画班的同学）的梦想、成长、友谊和共同奋斗过的经历。
想下载高清源文件，先去vimeo注册一个帐号，然后到这下载：http://www.vimeo.com/3509569


动画《夺魄》 from xracz on Vimeo.
或者可以选择YouTube观看，支持我的话多上YouTube给我留言啊！

人物设定：

部分分镜头：

气氛图：



]]></description>
		<wfw:commentRss>http://vlookr.com/2009/01/my-first-animation-work-duopo-final.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>单骨骼FK/IK无缝切换技术</title>
		<link>http://vlookr.com/2009/01/arm-rig-setup-for-seamless-fk-ik-switching.html</link>
		<comments>http://vlookr.com/2009/01/arm-rig-setup-for-seamless-fk-ik-switching.html#comments</comments>
		<pubDate>Tue, 20 Jan 2009 12:59:20 +0000</pubDate>
		<dc:creator>XRacZ</dc:creator>
				<category><![CDATA[CG]]></category>
		<category><![CDATA[绑定]]></category>
		<category><![CDATA[Arm Rig]]></category>
		<category><![CDATA[FK IK Seamless]]></category>
		<category><![CDATA[FK IK Setup]]></category>
		<category><![CDATA[FK IK Switching]]></category>
		<category><![CDATA[FK/IK]]></category>
		<category><![CDATA[Maya]]></category>
		<category><![CDATA[SeithCG]]></category>
		<category><![CDATA[动画师]]></category>
		<category><![CDATA[无缝切换]]></category>
		<category><![CDATA[绑定技术]]></category>

		<guid isPermaLink="false">http://vlookr.com/?p=164</guid>
		<description><![CDATA[[原文作者]：Seith
[原文地址]：Arm Rig Setup For Seamless FK/IK Switching
[译文作者]：XRacZ
[译文地址]：单骨骼FK/IK无缝切换技术
相信很多动画师在K动画时最头疼的就是进行FK/IK切换时，骨骼会自己摆动回以前的状态，然后再手工对位把物体对回去，这不仅降低了K动画的效率，还难以把握位置的准确，我也曾因此被困扰了许久，于是带着问题在Google搜寻，还真找到几篇关于FK/IK无缝切换的文章，但从实现的效果来看，只有Seith的Arm Rig Setup For Seamless FK/IK Switching最完善。鉴于目前国内此类文章较少，所以决定将此文翻译出来奉献给大家。
译者注：原文有很多地方利用编程来实现，我尽可能给每句代码加上注释便于大家理解。还有，转载请注明出处！！
本教程假设你已经创建好了这样一套简单的骨骼:

一个名为 L_shoulder_JNT 的骨点
一个名为 L_elbow_JNT 的骨点
一个名为 L_armIk_CON 的手臂控制器 (采用点约束对IK手柄进行控制)
一个名为 L_armPole_CON 的极向量控制器

你也可以下载我做好的 Maya (6.0以上版本) 源文件: armRig_001.ma.

本教程的目的在于通过对一个简单手臂的绑定来详细阐述FK/IK无缝切换的实现方法，即在进行FK/IK切换的时候不会出现骨骼自己摆动的情况，这对于动画师给角色摆Pose将非常有用（尤其在K动画方面）。切记，此方法只使用一套骨骼。

在本案例中，手臂IK和极向量控制器用Nurbs曲线来制作，但你也可以按自己的喜好用别的物体来代替。当然也可以使用我的源文件: armRig_001.ma.
请记住一定要在一个绝对平面上创骨骼。 肘部弯曲正常，而且不带扭曲（即骨骼不能带旋转值）!
1) 用MEL来绑定:
现在我们已经有了一套简单的骨骼和几个控制器, 下一步来进行绑定. 以下代码用于优化该场景中的骨骼和控制器使其适于做FK/IK切换（其实就是用代码来完成一些手工操作）:
// 1) 锁上肘部骨点的Y、Z旋转(这是为了使其像真实肘部那样运动)。
setAttr "L_elbow_JNT.jointTypeY" 0; //取消骨点L_elbow_JNT的Y轴自由角功能（对应骨骼属性栏里的Degrees of Freedom）
setAttr "L_elbow_JNT.jointTypeZ" 0; //取消骨点L_elbow_JNT的Z轴自由角功能（对应骨骼属性栏里的Degrees of Freedom）
setAttr -lock true -keyable false "L_elbow_JNT.ry"; //锁上骨点L_elbow_JNT的Y轴旋转，并使其不可K帧
setAttr -lock true -keyable false "L_elbow_JNT.rz"; //锁上骨点L_elbow_JNT的Z轴旋转，并使其不可K帧
//
// [...]]]></description>
		<wfw:commentRss>http://vlookr.com/2009/01/arm-rig-setup-for-seamless-fk-ik-switching.html/feed</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
	</channel>
</rss>
