<?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; Maya</title>
	<atom:link href="http://vlookr.com/tag/maya/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>单骨骼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>
