包含9節(jié)視頻教程
關(guān)注16.3萬次
從零開始講解MotionBuilder的詳細(xì)教程,配合朱峰社區(qū)的模型詳細(xì)講解如何進(jìn)行運(yùn)動(dòng)捕捉的動(dòng)作裝配
這節(jié)課我們學(xué)習(xí)UDK使用骨架控制器,這是很有意思的一節(jié)課,對(duì)制作3D模型非常有幫助。以后這樣的課程也會(huì)很多的,希望多多關(guān)注!
通過骨架控制器,可以在骨架網(wǎng)格里,編程實(shí)現(xiàn)一根骨骼或一組骨骼的修改。這些控制器都包含在同一個(gè)動(dòng)畫混合工具AnimTreeEditor中。但AnimNodes (動(dòng)畫節(jié)點(diǎn))與SkelControls(骨架控制器)并不能互相連接,它們屬于各自獨(dú)立的系統(tǒng),只是出于便捷性考慮,放置在了同一個(gè)工作空間。當(dāng)然,也可以這樣理解,動(dòng)畫流入動(dòng)畫樹(AnimTree)中的根節(jié)點(diǎn)盒子,然后再通過骨架控制器以某種方式修改每一根骨骼。
假設(shè)要添加一個(gè)控制器,使得人物的頭部注視著某個(gè)特定目標(biāo):
下面是一個(gè)來自動(dòng)畫樹的示例:
SkelControl上的滑塊代表力量。當(dāng)值拖到0時(shí),頭部將完全隨著動(dòng)畫而動(dòng)。當(dāng)值拖滿時(shí),頭部將會(huì)一動(dòng)不動(dòng)地注視目標(biāo)。橙色按鈕表示SkelControl的BlendInTime(混入時(shí)間)和BlendOutTime(混出時(shí)間),它可以切換控件的激活狀態(tài)。
下面將簡單地介紹幾種骨架控制器。
以下是所有骨架控制器的通用參數(shù):
ControlName(控制器名稱) | 這是為了在編碼和修改時(shí),便捷地找到某個(gè)控制器而給它起的名稱。如果控制器沒有命名,那么在游戲中就不能修改它。 |
BlendInTime(混入時(shí)間) | 當(dāng)控制器激活時(shí),它決定著控制器混合直到力量達(dá)到最大值的時(shí)間。 |
BlendOutTime(混出時(shí)間) | 與BlendInTime(混入時(shí)間)相仿,它決定著控制器混合直到力量為0的時(shí)間。 |
bPropogateSetActive(是否激活傳播性) | 如果值為True(真),則當(dāng)SkelControl(骨架控制)激活時(shí),鏈中的后一項(xiàng)也被激活。有關(guān)控制器鏈接的更多介紹,請(qǐng)參見本文檔稍后的“鏈接與共享”部分。 |
BoneScale(骨骼縮放) | 可以控制骨骼的縮放。需要注意的是,該縮放將會(huì)應(yīng)用在該骨骼及其以下所有骨骼中。 |
骨架控制器中提供了眾多的坐標(biāo)系(或參考系)選項(xiàng)。下面是這些選項(xiàng)含義的簡要說明:
BCS_WorldSpace(BCS_三維空間) | 指定在世界坐標(biāo)系中的一個(gè)位置。 |
BCS_ActorSpace(BCS_Actor空間) | 指定相對(duì)于Actor原點(diǎn)的位置。 |
BCS_ComponentSpace(BCS_組成元素空間) | 置頂相對(duì)于SkeletalMeshComponent(帶有骨架的網(wǎng)格物體組成)為原點(diǎn)的位置。 |
BCS_ParentBoneSpace(BCS_父骨骼空間) | 指定以所控制的骨骼的父骨骼為參考系。 |
BCS_BoneSpace(BCS_骨骼空間) | 指定相對(duì)于我們所控制的骨骼 |
BCS_OtherBoneSpace(BCS_其它骨骼空間) |
指定相對(duì)于多級(jí)結(jié)構(gòu)中的其他骨骼(必須通過控制器中的BoneName(骨骼名稱)選項(xiàng)指定具體的骨骼)。 |
通過這個(gè)簡單的控制器,可以修改一根骨骼的旋轉(zhuǎn)與位移。就像旋轉(zhuǎn)天線一樣方便。以下是它的一些關(guān)鍵屬性。
bApplyTranslation | 表示是否需要位移。如果取值為false(假),那么所有的位移設(shè)置都被忽略。 |
bAddTranslation | 如果取值為true(真),那么指定的位移將添加到動(dòng)畫效果中。如果取值為false(假),那么指定的位移將替代已有的動(dòng)畫位移。 |
BoneTranslation | 應(yīng)用到骨骼位移。 |
BoneTranslationSpace | 應(yīng)用位移的坐標(biāo)空間(請(qǐng)參見前文BoneControlSpace) |
TranslationSpaceBoneName | 當(dāng)BoneTranslationSpace(骨骼位移空間)項(xiàng)的值為BCS_OtherBoneSpace時(shí),TranslationSpaceBoneName項(xiàng)的值就是要設(shè)定的骨骼名稱。 |
bApplyRotation | 同bApplyTranslation一樣,只有當(dāng)bApplyRotation取值為true(真)時(shí),旋轉(zhuǎn)變化才會(huì)生效。 |
bAddRotation | 如果取值為true(真),旋轉(zhuǎn)將添加到動(dòng)畫效果中。如果取值為false(假),它將替換已有的旋轉(zhuǎn)。 |
BoneRotation | 實(shí)際應(yīng)用到骨骼上的旋轉(zhuǎn)。 |
BoneRotationSpace | 應(yīng)用于骨骼旋轉(zhuǎn)的參考系。 |
RotationSpaceBoneName | 當(dāng)BoneRotationSpace項(xiàng)的值為BCS_OtherBoneSpace時(shí),RotationSpaceBoneName(旋轉(zhuǎn)空間骨骼名稱)的值就是要設(shè)定的骨骼名稱。 |
通過這個(gè)控制器,可以調(diào)整一根骨骼的的旋轉(zhuǎn),使得它總指向某個(gè)特定目標(biāo)。例如,可以使人物的頭部總是注視著一個(gè)特定的目標(biāo)。在下面的抓圖中,頭部正注視著藍(lán)色的菱形圖案。綠色的錐形表示頭部可以移動(dòng)的最大范圍。
TargetLocation | 坐標(biāo)系中骨骼所指向的位置。 |
TargetLocationSpace | 定義TargetLocation的坐標(biāo)系。 |
TargetSpaceBoneName | 當(dāng)TargetLocationSpace 的值為BCS_OtherBoneSpace時(shí),TargetSpaceBoneName項(xiàng)的值就是要設(shè)定的骨骼名稱。 |
LookAtAxis | 受控制的骨骼要指向目標(biāo)的坐標(biāo)軸。 |
bInvertLookAtAxis | 告知LookAtAxis應(yīng)該指向遠(yuǎn)離目標(biāo)的方向,而不是指向它。 |
bDefineUpAxis | 當(dāng)它的值為false(假)時(shí),控制器將計(jì)算出指向目標(biāo)的LookAtAxis所需的最小旋轉(zhuǎn)。圍繞LookAtAxis的轉(zhuǎn)動(dòng)仍然依從于動(dòng)畫。當(dāng)它的值為true(真)時(shí),將會(huì)定義骨骼的豎直軸,這樣骨骼運(yùn)動(dòng)的方向?qū)⑼耆煽刂破鱽矶x。 |
UpAxis | 當(dāng)bDefineUpAxis的值為true(真)時(shí),這就是骨骼在世界坐標(biāo)系中指向上方的軸。 |
bInvertUpAxis | UpAxis是否應(yīng)該指向下方而不是上方。 |
bEnableLimit | 是否要限制骨骼可以旋轉(zhuǎn)以跟蹤目標(biāo)的最大角度后。 |
bShowLimit | 是否在3D視圖中畫出綠色的限制圓錐體。 |
MaxAngle | MaxAngle決定了骨骼旋轉(zhuǎn)時(shí)允許偏離參考位置的最大角度。計(jì)算的單位是度。 |
DeadZoneAngle | 當(dāng)目標(biāo)位于當(dāng)前旋轉(zhuǎn)的“不靈敏區(qū)”時(shí),骨骼將不動(dòng),直至目標(biāo)離開該區(qū)域,它才旋轉(zhuǎn)。 |
可以嘗試將TargetLocationSpace項(xiàng)設(shè)置為BCS_OtherBoneSpace,制作出人物注視自己手的效果。
樣條曲線控制器并不會(huì)修改骨骼本身,而是將一個(gè)骨骼放到一條骨骼鏈中,并將它們調(diào)整為一條spline(樣條曲線)。在下面的示例中,將使用SkelControlSingleBone(骨架控制單骨骼),使得香腸的末端向上翹起。然后,用SkelControlSpline(骨架控制樣條曲線)來修改其上的四塊骨骼。這樣就在香腸的兩端創(chuàng)建了一條spline(樣條曲線)。需要注意的是,該控制器并沒有保持骨骼的長度。
SplineLength | 在骨骼樹中向上遍歷要匹配樣條曲線的骨骼數(shù)量。 |
SplineBoneAxis | 沿spline(樣條曲線)方向的骨骼軸。 |
bInvertSplineBoneAxis | 決定SplineBoneAxis是否需要反轉(zhuǎn)。 |
EndSplineTension | 控制曲線終點(diǎn)(接近控制的骨骼)的曲率。 |
StartSplineTension | 控制曲線起點(diǎn)(接近控制的骨骼)的曲率。 |
BoneRotMode | 控制曲線上骨骼的旋轉(zhuǎn)方式。詳細(xì)信息請(qǐng)參見下文。 |
BoneRotMode參數(shù)決定了控制器控制曲線上骨骼的旋轉(zhuǎn)方式:
SCR_NoChange | 不修改骨骼的旋轉(zhuǎn),骨骼只是發(fā)生位移來匹配曲線。 |
SCR_AlongSpline | 旋轉(zhuǎn)骨骼以使得SplineBoneAxis指向Spline的方向。 |
SCR_Interpolate | 骨骼的旋轉(zhuǎn)由其相鄰的兩個(gè)骨骼的旋轉(zhuǎn)混合計(jì)算得出。 |
在控制背部最上方的骨骼旋轉(zhuǎn),以使得脊柱上的其他骨骼平滑旋轉(zhuǎn)時(shí),該控制器的SCR_Interpolate相當(dāng)有用。
該控制器應(yīng)用了虛幻引擎3的反向運(yùn)動(dòng)學(xué)求解器。它首先在三維坐標(biāo)系中選取一個(gè)目標(biāo)位置,然后試著讓所控制的骨骼上面的兩個(gè)骨骼到達(dá)目標(biāo)位置。如果目標(biāo)達(dá)不到,則把骨骼移動(dòng)到在盡可能近的位置。除了為肢體的末端指定目標(biāo)位置,還可以為關(guān)節(jié)指定目標(biāo),使其向目標(biāo)彎曲。下面3D視圖中粉色的菱形圖案就是指定的目標(biāo)。
需要注意的是,如果在手臂的多級(jí)結(jié)構(gòu)中有純旋轉(zhuǎn)骨骼(即小臂在多級(jí)結(jié)構(gòu)上是位于大臂純旋轉(zhuǎn)骨骼的子節(jié)點(diǎn)),肢體控制器將起不到應(yīng)有的效果。如下圖所示,創(chuàng)建的骨架中,手臂應(yīng)創(chuàng)建為兩個(gè)骨骼而不是四個(gè)。
左邊的這些骨骼是3D包中最常見的,然而對(duì)于實(shí)時(shí)的骨架控制器來說,效率太低了。在這個(gè)手臂鏈中,如果要讓它計(jì)算反向運(yùn)動(dòng),你會(huì)得到一條4根骨骼的反響運(yùn)動(dòng)鏈,而實(shí)際上像右邊所展示的兩個(gè)骨骼就夠了。那些純旋轉(zhuǎn)骨骼,在這兩種情況下,仍然都是手臂的子節(jié)點(diǎn)。所不同的是,在左邊從上臂到手依次經(jīng)歷了四個(gè)骨骼,而在右邊只經(jīng)歷了兩個(gè)骨骼。
EffectorLocation | 希望的受控制的骨骼位置。 |
EffectorLocationSpace | 定義EffectorLocation所用的坐標(biāo)系。 |
EffectorSpaceBoneName | 當(dāng)EffectorLocationSpace的值為BCS_OtherBoneSpace時(shí),EffectorSpaceBoneName的值就是要設(shè)定的骨骼名稱。 |
JointTargetLocation | 坐標(biāo)系中關(guān)節(jié)將要彎曲移往的位置。 |
JointTargetLocationSpace | 定義JointTargetLocation所用的坐標(biāo)系。 |
JointTargetSpaceBoneName | 當(dāng)JointTargetLocationSpace(的值為BCS_OtherBoneSpace時(shí),JointTargetSpaceBoneName的值就是要設(shè)定的骨骼名稱。 |
BoneAxis | 肢體中各骨骼指向骨骼方向的軸。 |
JointAxis | 應(yīng)該與關(guān)節(jié)的旋轉(zhuǎn)軸對(duì)齊的骨骼軸。對(duì)肘部來說,這應(yīng)該是肘關(guān)節(jié)彎曲時(shí)的旋轉(zhuǎn)軸。 |
bInvertBoneAxis | 決定BoneAxis矢量的方向是否反轉(zhuǎn)。 |
bInvertJointAxis | 決定JointAxis矢量的方向是否反轉(zhuǎn)。 |
bMaintainEffectorRelRot | 當(dāng)該項(xiàng)取值為true(真)時(shí),在效應(yīng)器骨骼與它的父骨骼末端之間修改相對(duì)旋轉(zhuǎn)。當(dāng)該項(xiàng)取值為false(假)時(shí),控制器將不修改骨骼末端的旋轉(zhuǎn)。 |
這是一種特殊的SkelControlLimb(骨架控制肢體),它專門用來設(shè)計(jì)如何在地面上正確放置人物的雙腳。你應(yīng)該將該控制器與人物腳上的骨骼相關(guān)聯(lián)。每一幀,從臀部骨骼到腳部骨骼都會(huì)進(jìn)行直線碰撞檢測。如果沒有發(fā)生碰撞,那么腿就不發(fā)生改變。反之,控制器的EffectorLocation參數(shù)將設(shè)為碰撞點(diǎn)的位置。這樣腿將發(fā)生彎曲,并將腳放到地面上。EffectorLocation是自動(dòng)生成的,因此不能在控制器中進(jìn)行修改。不過,可以通過修改JointTargetLocation讓腿朝著適當(dāng)?shù)姆较驈澢?/p>
FootOffset | 偏移應(yīng)用于生成的EffectorLocation(效應(yīng)器位置),它能使EffectorLocation(效應(yīng)器位置)沿碰撞檢測用的直線向后退。這樣就可以調(diào)整地面上腳的高度,因?yàn)槟_的骨骼一般并不在腳底。 |
FootUpAxis | 當(dāng)bOrientFootToGround的取值為true(真)時(shí),它表示腳骨骼與腳接觸的平面的法線方向相一致的軸。 |
FootRotOffset | 當(dāng)bOrientFootToGround(由腳向地)的取值為true(真)時(shí),額外應(yīng)用于腳的旋轉(zhuǎn)。當(dāng)腳的骨骼沒有指向上方的軸時(shí),可能會(huì)需要這個(gè)屬性。 |
bInvertFootUpAxis | 是否要反轉(zhuǎn)FootUpAxis的方向。 |
bOrientFootToGround | 是否要需要旋轉(zhuǎn)腳骨骼,使它與直線碰撞檢測捕獲到的撞擊表面法線方向一致。 |
MaxUpAdjustment | 控制器所能將腳向上移動(dòng)的最大量。 |
MaxDownAdjustment | 控制器所能將腳向下移動(dòng)的最大量。 |
在AnimTreeEditor中,可以在測試腳的位置時(shí)使用地板網(wǎng)格的預(yù)覽。如果要觀看地板網(wǎng)格,可以按下工具欄上的“Show Floor”(顯示地板)按鈕。按住Control鍵及下列控制按鈕,可以移動(dòng)和旋轉(zhuǎn)地板:
鼠標(biāo)左鍵 | 將地板沿X軸和Y軸變換 |
鼠標(biāo)右鍵 | 圍繞Z軸旋轉(zhuǎn)地板 |
同時(shí)按下鼠標(biāo)左右鍵 | 將地板沿Z軸變換 |
這個(gè)特別的控制器專門用來處理UE3的車輛系統(tǒng)。車輛可以用骨架網(wǎng)格中的骨骼來做輪子。在輪子可以移動(dòng)和轉(zhuǎn)向之前,需要為每個(gè)輪子創(chuàng)建一個(gè)SkelControlWheel(骨架控制車輪)。為每個(gè)控制器命名,將其作為車輛設(shè)置過程中的控制器的標(biāo)識(shí)。車輛系統(tǒng)將在每一幀更新控制器,使它能符合模擬過程中的各種動(dòng)作,例如垂直移動(dòng)、滾動(dòng)或轉(zhuǎn)向。
WheelDisplacement | 僅作為預(yù)覽車輪的垂直運(yùn)動(dòng)使用。設(shè)置這個(gè)值會(huì)使車輪升高。 |
WheelMaxRenderDisplacement | 這是車輪垂直移動(dòng)的最大距離。它能夠確保車輪不會(huì)插入底盤幾何體。 |
WheelRoll | 同WheelDisplacement一樣,這僅僅是預(yù)覽車輪的滾動(dòng)。正值表示車輪向前滾動(dòng)。 |
WheelRollAxis | 車輪骨骼的軸,車輪將圍繞它滾動(dòng)。車輪骨骼的軸,車輪將圍繞它滾動(dòng)。 |
WheelSteering | 用來預(yù)覽車輪的轉(zhuǎn)向運(yùn)動(dòng)。正值表示右轉(zhuǎn)。 |
WheelSteeringAxis | 車輪骨骼的軸,車輪將圍繞它作轉(zhuǎn)向旋轉(zhuǎn)。 |
bInvertWheelRoll | 反轉(zhuǎn)車輪滾動(dòng)方向 |
bInvertWheelSteering | 反轉(zhuǎn)車輪轉(zhuǎn)向方向 |
骨架控制器可以鏈接在一起,并可以按照它們鏈接的順序付諸應(yīng)用。如果在SkelControlLookAt之后加上一個(gè)帶有旋轉(zhuǎn)的SkelControlSingleBone,則骨骼就會(huì)首先注視目標(biāo),然后旋轉(zhuǎn)這么多角度。
骨架控制器可以被多個(gè)骨骼共享。如果需要多個(gè)骨骼指向同一目標(biāo),則可以只使用一個(gè)SkelControlLookAt(骨架控制查看)控制器,而使其它的骨骼與它相連即可。
以上就是這節(jié)課的全部內(nèi)容,下節(jié)課我們繼續(xù)學(xué)習(xí)。
朱峰社區(qū)網(wǎng)頁版(手機(jī)掃描-分享-添加到屏幕)
朱峰社區(qū)微信公眾號(hào)(微信掃一掃-關(guān)注)
未知用戶
2005-2025 朱峰社區(qū) 版權(quán)所有 遼ICP備2021001865號(hào)-1
2005-2025 ZhuFeng Community All Rights Reserved
VIP