2008-11-30

两年的绑定学习过程日志

这个是这两年来学绑定的日志,现在发出来算是个年终总结吧。日志是从去年10月份开始的,不过学习绑定早就开始了,只不过开始没有这个习惯呢。目的很明确,自己记性不好,有些原来解决过的问题后以后再遇到就忘了,写了这个就OK了,嘿嘿。回头看看也比较有成就感,每走一步的记录在案,看看自己的学习进程,从最开始不知道绑定动画应该是分开的专人负责(其实我原本是想学动画地 馋 ),到现在写自动绑定系统、表情系统,速度非常慢,进步也很慢,困难无奇数,但从来没动摇,市场不好我等,工资不高我认,我只相信实力,我用实力说话,或许我现在的能力还不够高,或许我的经验还不够多,只要坚持就有希望,只要不放弃就有机会,继续蛰伏,蓄势待发。我此生注定为动画而生,此生注定为动画而狂,不管前面是康庄大道还是荆棘密布,我要一如既往的继续走我的动画梦之路,谱写我的动画人生!

OOO*** 要先做水平的骨骼然后直接添加ik,才能保证添加ik的时候骨骼不旋转,然后再调整骨骼的位置和旋转

2007.10.3
可開關的拉伸彈性手臂ik完成
用两个condition和一个multiply节点完成对骨骼的缩放控制
??? IK/FK切換有問題,不能跟隨ik進行延長
@@@ 需要在drv的x scale上面添加condition控制他的縮放屬性,跟隨ik的時候由ik控制,跟隨fk的時候由fk控制縮放
jEdit調試好了,嘿嘿
2007.10.4
@@@ 右側手臂控制器可以實現跟骨胳一樣的對稱旋轉,身體其它部分的控制器都需要重新做,右腳ik control
@@@ Arm's ik/fk switch and stretchy are finish.
@@@ Arm ik/fk mel switch finish,互相隱藏其他類型的控制器
2007.10.5
@@@ make spine ribbon skeleton
2007.10.6
@@@ finish ik fk spine. first add parent constrain, and then createNode md, make new group x and z axis is negative
2007.10.7
@@@ 優化了mySelectMM.mel,只是用一個快捷鍵就可以完成兩個MM,使用鼠標左右鍵來切換同一個物體的不同MM
2007.10.9
OOO make foot skeleton
OOO drv scaleX follow ik/fk
2007.10.10
OOO inverse foot skeleton
OOO start make leg ik/fk switch and stretchy
2007.10.11
===========================
*** Mirror Control:
1) 複製控制器的所在組,然後繼續成組,把新組的X軸設置為-1
2) Unparent new group,here original group scale Z is -1, and then Freeze it, change to positive 1.
3) X axis rotate 原来的值 + 180 degree,Y axis is negative of original.
4) and then adjust curve control CVs,relative scale x = -1 y = -1.
===========================
OOO set up right leg drv's bone scale follow ik or fk.
OOO finish leg ribbon setup
@@@ 在設置腳部旋轉的時候,要跟隨fk/ik旋轉,複製兩個inverseFoot_con
成爲fk/ik控制器的子物體,用這兩個骨骼來orient inverseFoot_con
OOO hands and foots fk/ik orient finish
SSS setup foot control.
2007.10.13
??? 反轉腳于腳部的ik控制器有衝突
@@@ 腳部bone全部完成,並完成foot 與ik/fk變換跟隨

2007.10.14
@@@ 開始設置ik/fk自動捕捉匹配
OOO objExists 可以判斷場景中是否存在某個物體的名稱
2007.10.15
OOO 解決ik switch to fk問題 使用一個locator成爲l_arm01_fk的子物體,然後
l_armPoleVec01_ctl捕捉到上面就可以了
2007.10.16
@@@ 繼續完善fk/ik auto snap mel
OOO 基本完成L arm fk/ik auto snap 還差ik scale有點問題
??? iK拉長以後,再切換回fk還有點問題
OOO 全部完成左右手臂的 arm fk/ik auto snap 歐也!!!
2007.10.17
OOO 繼續完成其他部位的 ik/fk auto snap
2007.10.18
OOO 右侧手臂骨骼的 transformX 為負數, fk to ik mode 要注意,把長度數值變爲負數
OOO 左右手臂的fk/ik auto snap全部完成 歐也!
OOo 右臂drv skeleton ScaleX Ik mode 要跟每段的fk/ik骨骼相匹配
2007.10.19
??? they are not orient match of foot ik control and fk control
*** Leg drv skeleton 每一個scaleX都要用單獨的cnd運算連接
OOO 完成左腿的ik/fk auto snap

2007.10.20
OOO 全部完成四肢的 ik/fk auto snap操作,帶縮放可控制的 :)
*** 做雙關節骨骼兩個要素,才能保證ik變化時候2和3的角度一致
(1) 1根3段的骨骼長度要一致
(2) 2根3段骨骼默認的Joint Orient要一致
(感謝manitou的靈感)
2007.10.21
@@@ 開始製作腳部控制器
2007.10.22
OOO 修改腳設計,把反轉腳改稱層級控制,簡化腳部骨骼,用CSik來控制骨骼
2007.10.23
??? 發現了一條骨骼鏈的ik fk seamless switch 測試一下
2007.10.24
@@@ 重新製作limb骨骼系統,使用單獨一套骨骼,重新優化mel,繼續使用雙關節骨骼
按照雙關節要素來做
*** 夢工場那人的mel使用了下面這種命名方式,可以使用IkFk_switch( "giant01", "_l_", "arm" );這種調用方式,場景中的任意角色都可以使用通一段mel來實現ikfk_switch
global proc IkFk_switch( string $nameSpace, string $side, string $limb )
而不用不同的角色使用不同的mel,而且還大大的簡化了mel數量,牛逼阿
不愧是greamwork的

2007.10.25
OOo 完成左臂的新獨立骨骼ik/fk轉換
??? 左臂還有問題,切換到fk的時候,ik控制器位置不變,身體移動,長度發生變化,影響骨骼長度,需要在切換fk的時候就把骨骼的長度修改,縮放值恢復到1,然後關閉縮放功能即可
OOO 左右臂的ikfk切换全部完成,注意控制其和骨骼的Rotate Order is xzy, not xyz
2007.10.26
OOO 完成左右手的跟隨設置,復制兩個手部根部con骨骼,分別命名為ori,然后設置orient約束到手部,并且指定給ik fk子物體
@@@ start modify leg skeleton
OOo left leg finish 
OOO 四肢的新的独立骨骼的ik/fk切换完成,同一段mel,實現左右自動切換
2007.11.2
arclen -ch 1 這個節點返回曲線的長度值
pow 2 6;的意思是2的6次冪 (乘方,冪power) 
sqrt 是平方根 square root
*** 做stretchy ik 用expression 比節點連接要方便許多***不愧是牛人
1) Stretchy the spine chain 
2) Twisting the spine chain
4) Enhancing the Stretch
2007.11.3
OOO frameCache的用法:
stream給定一個動畫曲線,然后通過vary time來返回一個數值。
for example, stream是一段1-6幀的弧形曲線,當vary time為1的時候,返回就是曲線第一幀的數值,當vary time為3的時候,返回的就是曲線在第三幀時候的數值,以此類推,可以通過動畫曲線來控制一個幾個物體屬性的變化值。又弄明白一個節點
2007.11.4
OOO 按住ctrl鍵可以在outliner里面添加ik

2007.11.8
2007.11.9
@@@ 繼續制作右腳rigging
優化mel,規范制作流程,命令規則,把制作量減小到最少,代碼盡量能夠少修改,重復使用
OOO 右腳rigging完成,使用層級控制方法
沒有必要保持transform為0的物體就不用加group
2007.11.11
*** ribbon原始場景有嚴重重名,所有物體包括組都不要重名,否則experssion會有問題
2007.11.12
OOO orient 各骨骼鏈條
2007.11.13
@@@ 繼續orient bone chain
OOO 設置fk根部控制器Follow
*** 設置關節鏈跟隨的時候,把復制的兩個組的屬性全部 hide and lock,然后再進行約束,和parent
OOO 四肢 Follow設置完成
2007.11.14
OOO head ik/fk ok
OOO head fk/ik switch finish(include mel)
*** mel里面設置約束的時候,需要先設置關鍵幀再刪除約束,這樣位置才不會有變化
OOo 基本完成骨骼設置
@@@ 開始skin
??? 新問題,膝關節大腿部骨骼有反轉現象
OOO 把大腿下端的segRibbon方向約束到leg01_drv上,使其方向與上面一致
2007.11.17
@@@ 開始制作character Selection GUI (感謝夢工廠的牛人)
OOO Giant01 GUI v0.1界面完成
@@@ GUI 0.2 鏈接代碼生成 內部命名規范化
2007.11.18
OOO \为mel的转义符(escape character),在后面可以添加一些特殊的符號,如"
2007.11.19
OOO 腿部反轉問題解決,修改頭部控制器歸零,然后完成右手控制器,開始skin

*** sdk = set driven key
2007.11.26
??? 大問題啊,切換ik/fk做動畫的時候,互相的動作不能顯示,調ik的時候,fk的動畫就沒有了,fk的時候ik的動畫也沒有了,弄了一大天,弄出來一個垃圾rigging,呵呵
2007.11.29
@@@ 開始解決骨骼問題,關鍵幀和ik手臂旋轉問題
*** mel里刪除臨時約束的時候要先key幀,然后再刪除,不然控制器會跳回上一個關鍵幀的位置
找到問題了,物體的visibility屬性也要打關鍵幀,然后kz_ikFkSwitch里面,armIk01_con的orient約束沒有setKey,愚蠢的錯誤
OOO OK,mel問題解決了
??? finger bone scale is not assign
OOO GUI里面加了Head IK/FK Switch控制v0.23 :)
2007.11.30
OOO GUI的mel基本上調節完畢了(還應該改成四根手指和五根手指可調的效果,以后再弄)
OOO clavicle_con用移動方式來控制 clavicle bone旋轉,更直觀
2007.12.1
OOO 修改GUI mel,設置了Reset Selection效果,很實用,人家設計的牛逼啊
2007.12.2
OOO Create autoClavicle feature.
*** Create autoClavicle attribute on shoulder control.
OOO MirrorBlendShape update mel
2007.12.3
OOO 優化了GUI,設置了四根手指的界面
OOO 手指的骨骼上級再添加一個joint, 就可以作為驅動幀來使用了,不用在制作額外的控制器
擴展名用 _sdk means set driven key
*** zero group must clear attributes to preserve position and rotate state.
OOO all button 的作用是用來選擇所有控制器然后歸零的
2007.12.8
OOO 弄好了卡通眼球材質
2007.12.10
_arm ribbon rotate must set rotate decay,跟随arm01_drv骨骼就可以,像前臂一样
2007.12.15
OOO enum控制兩個約束的開關更方便,blendcolor來控制三套骨骼比約束更方便
2007.12.16
OOO hide object visibility attribute will be hide all child objects, but hide object shape visibility attribute to only hide himself.
OOO it is very cool that use expression to control objects visibility.
OOO fk/ik切換,只要把切換屬性設置關鍵幀就好,其他fk/ik控制器顯示屬性不用打關鍵幀
OOO 手指不用特殊的控制器,把selection handle打開就好了,有干凈有方便
2007.12.20
*** emnu屬性,fk始終為零,也就是第一個屬性,ik為1
2007.12.23
@@@ hand setup
2008.1.1
@@@ 第二次重新rig,用新方法做fk/ik,重寫mel
2008.1.2
*** 制作好骨骼以后一定要調整 local rotation axis,使其與上級控制器一致
2008.1.4
OOO 修改了segRibbon模板,可以squash stretch,globalScale也沒問題了
2008.1.5
OOO 模型又改了,手部修改一下
2008.1.8
OOO 手部rig完成
??? 發現segRibbon的旋轉有問題,超過90度上部關節后兩個jnt會有反轉問題
XXX 使segRibbon里面的nurbs Surface法線朝向骨骼的旋轉方向即可解決,旋轉根部組即可
2008.1.9
OOO 優化了segRibbon模板,解決了旋轉的時候反轉問題,為segPos01_geo制作四個cluster
然后兩個兩個分組,在重新給他們約束,用parent約束,但是要只選擇幾個旋轉軸可以達到
理想的過度旋轉效果
2008.1.10
@@@ 應該做l_leg 方向約束了
2008.3.1
*** min为最小值返回命令,返回后面给定的两个数值中最小的数值;
2008.3.2
*** linstep(0, 10, 5) // Result: 0.5 //
linstep 1 3 2.5; // Result: 0.75 //
linstep返回一个浮点数值 =(第三变量 - 第一变量)/(第二变量 - 第一变量)
第一个变量为最小值,第二个变量为最大值,如果第三个变量小于第一个变量,则返回0,如果第三个变量大于第二个变量则返回1.
l_ball_loc.rotateX = (linstep(0,$toeLift,$roll)) * (1-(linstep( $toeLift,$toeStraight,$roll))) * $roll;
这行可以让ball关节的度数这样变化,随着roll的在0到45的时候,ball也从0到45,也就做到了脚跟抬起脚掌不动
在roll从45到90的时候,ball会从45返回到0,也就做到了向前走步的时候,脚掌抬起,但脚变成了直的了
@@@ 腿部的绑定分为fk、ik驱动drv骨骼,
ik由noFlip和poleVector互相驱动,noFlip也是RP Solver,只不过把vector控制器放到了旁边,这样就能实现环绕无翻转了,然后通过knee spin属性来控制膝盖的方向。
pv骨骼就是正常的RP Solver来控制,添加一个Pole Vector控制器来控制膝盖方向。
这种方法更加灵活,提供了多样的控制方式,动画师可以根据自己的喜好进行选择;牛人,怎么想出来的呢,佩服啊
2008.3.4
OOO 解决blendshape in-between 模型问题,使用animToBlend脚本命令直接产生,把目标删除就好了
2008.3.27
hand controls name:
curl thumb_curl scrunch thumb_scrunch relax cup spread mid_spread thumb_spread twist lean
finger controls
curl scrunch spread twist lean bend_1 bend_2 bend_3 bend_4 length
thumb controls
curl scrunch spread orbit twist bend_1 bend_2 bend_3 length
2008.3.29
OOO 足球形象二次修改,比较满意,继续rig四肢
2008.3.30
@@@ start football rig leg
2008.3.31
use low res model hen split segment.
2008.4.28
l_arm01_drv and l_arm02_drv的scale也要跟fk和ik_drv blend上,这样在fk 切换到ik的时候才能匹配长度
在l_armIk01_drv和02_drv上要加上length,默认长度的时候等于1,以此倍增。
2008.4.29
fk ik切换调试完成,fk拉伸,ik拉伸相互切换,之后reset都没有问题了
###开始做 switching spaces
2008.5.3
Char GUI优化基本完毕,fk/ik switch mel分离出来了 v0.91a
添加一些新功能:
只有选择了控制器才能允许弹出界面,不选择物体的话会出现提示按钮。
优化了mel里面的命名方式,全部以变量的名称进行命名,方便修改。
优化resetSelection,不会出现找不到物体的错误提示了
添加了手部 r01AllBttn l01AllBttn 按钮,可以选择全部三个手指的后三节骨骼
手部只做一个控制器就好,不用添加太多的手指形状控制,对手指控制用控制器倒不太方便,可以后面用poseLib来做

2008.5.4
Character GUI v0.91a
Features
01 根据选择不同角色的控制器来确定角色名称,里面的各项功能也都会针对相应的角色
conform character name according as selected control
02 低分辨率和高分辨率模型切换显示
03 镜像选择控制器
04 恢复选择的控制器到默认数值状态
05 可控制身体各部分的显示状态(如头、身体、左臂。。。)
06 可在面板直接选择角色各个部位的控制器
07 Fk手臂的方向无缝转换跟随
08 手臂和腿部Ik的方向位置无缝转换跟随
09 可拉伸的四肢Fk Ik.
10 手臂和腿部的Fk Ik 无缝转换,并且可以匹配各种模式下的不同的长度
11 各个手指每个方向快速选择(如食指的三个关节,或者食指中指小拇指的第一个关节)

2008.5.6
写了kz_createIkLenMdn.mel, 可以直接根据选择的节点来添加Ik骨骼的length参数和IkLen_mdn节点
2008.5.7
下午左臂完成绑定,比较顺利了
2008.5.8
??? ribbon出现新问题,global scale有问题了
OOO 在expression里面修改下面这行就可以,把golbalScale连接到##01_all_ctl上面就行了
$scale = segRibbon2008_seg_curveInfo.normalizedScale/giant01_all_con.golbalScale
修改了ribbon模板,在拉长的时候正常收缩,保持体积,在弯曲的时候不进行缩放了
优化了gui mel,在切换fk follow的时候在反馈行可以显示出跟随的不同部位,比较满意 :)
2008.5.14
优化了gui mel的reset功能
腿部的rig流程制作完成,
2008.5.15
镜像流程制作完成。
应该在镜像物体之后再清理场景,锁定和隐藏控制器属性,要不然不能镜像骨骼
2008.5.16
*** 在镜像完成以后,再统一设置控制器的可见性。
Fk腿部也可以暂不设置跟随
2008.5.17
2008.10.18
前些天写了面部表情建立系统,可以复制头部需要的表情目标,建立blendshape,建立表情控制器面板,链接控制器到blendshape。
眼皮跟随的上下效果不用单独制作blendshape目标,使用闭眼的目标即可,在控制器操作上需要特殊设置一下,控制眼球的控制器也来调节闭眼的blendshape目标
2008.10.22
优化了表情系统,现在可以随便的添加bs中间过度目标,全部可以自动加到bs里面了1.0诞生了,哈

下面是自动绑定系统的一些更新日志,直接写道mel里面了 :)
Ver 0.1 Update: Nov 12, 2008
可以建立左臂骨骼,fk ik链接完成,并自动建立设置组,显示控制组
Ver 0.2 Update: Nov 14, 2008
建立简单界面
Ver 0.3 Update: Nov 15, 2008
整合表情系统,建立界面基础分类功能
Ver 0.5 Update: Nov 18, 2008
rig leg and foot
Ver 0.51 Update: Nov 19, 2008
left foot rig finished.
Ver 0.52 Update: Nov 23, 2008
symmetrize function finished, hand guide bone.
Ver 0.53 Update: Nov 26, 2008
rigging fingers
Ver 0.54 Update: Nov 28, 2008
rigging torso

4 comments:

Anonymous said...

佩服!我是前年开始学绑定的,不过很局限,我不会MEL,肢使用命令。也没你勤奋,希望以后能多交流。QQ;327875782

hmaya said...

:)很好,走的很踏实。不容易,赞。

Hung said...

你好~最近再找有關手部鎖定頭部軀幹及臀部的方法,本來想到的方法會因使用reference而失效或使用constrain後會有偏移問題,在這邊有看到類似的功能,想請問它的原理是什麼?謝謝

Hung said...

目前想到另一種的解決方法~只是還沒在REFERENCE去測試,偏移的問題以解決,非常感謝你