談到這js的設(shè)置,兩大亮點(diǎn),兩大難點(diǎn):
1.腿部的表達(dá)式
2.手部的bend系統(tǒng)
OK,先說(shuō)腿部那的經(jīng)典表達(dá)式,Roll系統(tǒng):
腿部的控制器分別有三個(gè)屬性:roll,toeLift,toeStraight
三個(gè)要聯(lián)合使用
roll可以立刻看到效果
toeLift意思是ball到多少度腳尖開(kāi)始抬起
toeStraight意思是腳尖到多少的時(shí)候ball關(guān)節(jié)變回直的
就像人走路,跑步時(shí)候腳掌的角度變化:
Jason這里用了一招挺有特色的,其實(shí)也是經(jīng)常用了,做特效的人幾乎時(shí)刻都面對(duì),沒(méi)有什么特別的,只是用在這設(shè)置上有點(diǎn)創(chuàng)意,那就是linstep,其實(shí)還有smoothstep,clamp,一大堆操作節(jié)點(diǎn),只要靈活聯(lián)想,都可以出到很好的效果,特效的同事應(yīng)該清楚了,當(dāng)時(shí)沒(méi)有看JS的時(shí)候我是用判斷節(jié)點(diǎn)和clamp節(jié)點(diǎn)做的,一樣的道理
OK,分析一下他這段函數(shù)
ball_loc.rotateX = (linstep(0,$toeLift,$roll)) * (1-(linstep($toeLift,$toeStraight,$roll))) * $roll;
linstep(X,Y,Z)意思是給定一個(gè)范圍 (大于X小于Y)
我們輸入Z,當(dāng)Z小于X的時(shí)候linstep輸出為0
當(dāng)Z大于Y的時(shí)候linstep輸出為1
當(dāng)Z大于X小于Y輸出的就是當(dāng)中的比例值
JS表達(dá)式分開(kāi)了兩部分,互相相乘,我覺(jué)得這個(gè)挺有趣的,有點(diǎn)像以前的小學(xué)簡(jiǎn)單數(shù)學(xué)
這兩部分分別是(linstep(0,$toeLift,$roll))
(1-(linstep($toeLift,$toeStraight,$roll)))
(linstep(0,$toeLift,$roll)) : 我們輸入roll值,當(dāng)roll小于0的時(shí)候 ,
(linstep(0,$toeLift,$roll)) = 0
相乘后 ball_loc.rotateX = 0 ,ball關(guān)節(jié)沒(méi)有旋轉(zhuǎn)
當(dāng)roll大于0,小于$toeLift , (linstep(0,$toeLift,$roll)) 輸出0-1的比例值
當(dāng)roll 大于$toeLift ,(linstep(0,$toeLift,$roll))輸出為1
在看另外一段:(1-(linstep($toeLift,$toeStraight,$roll)))
我們先分析里面的一段: linstep($toeLift,$toeStraight,$roll)
當(dāng)roll小于$toeLift的時(shí)候 ,linstep($toeLift,$toeStraight,$roll) = 0
整段 1-(linstep($toeLift,$toeStraight,$roll)) = 1-0 =1
當(dāng)roll大于$toeLift,小于$toeStraight , linstep($toeLift,$toeStraight,$roll) = 0 輸出0-1的比例值,是慢慢增大的值,但是
整段 1-(linstep($toeLift,$toeStraight,$roll)) 就相反了,輸出1-0的比例值,是慢慢減少的
當(dāng)roll 大于$toeStraight ,(linstep(0,$toeLift,$roll))輸出為1
整段 1-(linstep($toeLift,$toeStraight,$roll)) = 1-1 =0
那么兩段相乘,非常好,
(linstep(0,$toeLift,$roll)) * (1-(linstep($toeLift,$toeStraight,$roll))) * $roll
當(dāng)$roll值在0,$toeLift 的時(shí)候 ,第二段為 (1-0=1),計(jì)算以第一段為準(zhǔn) 例如 :X * (1-0)= X
當(dāng)$roll值在$toeLift,$toeStraight 的時(shí)候 ,第一段為 (1-0=1),計(jì)算以第二段為準(zhǔn)
例如 :1 * Y= Y
而第一段是0-1遞增的,后面是1-0遞增的
所以ball關(guān)節(jié)有真實(shí)人的效果
PS:其實(shí)動(dòng)動(dòng)腦筋,有更多的方法,說(shuō)不定比他更簡(jiǎn)單的還很多,大家可以想想sin,cos函數(shù),哈哈
更直接,先賣(mài)個(gè)小關(guān)子。。
明天說(shuō)他手部的bend抬起系統(tǒng),其實(shí)就是跟腿一樣原理,就是在切換方面下了點(diǎn)小技巧來(lái)配合elbowLock
接著會(huì)給大家說(shuō)你們看到一些DEMO的 閉唇運(yùn)動(dòng),二級(jí)控制器的vector算法,大家多多交流哈
說(shuō)完。。。收工。。。