<?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; Victor Vinyals</title>
	<atom:link href="http://vlookr.com/tag/victor-vinyals/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>整合自定义右键菜单实现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>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>
	</channel>
</rss>
