朱峰社區(qū)首頁 朱峰社區(qū)

搜索資源 注冊(cè)|登陸

等待

返回 展開菜單

UDK使用骨架控制器教程

MotionBuilder中文教程 觀看預(yù)覽

MotionBuilder中文教程

包含9節(jié)視頻教程
關(guān)注16.3萬

從零開始講解MotionBuilder的詳細(xì)教程,配合朱峰社區(qū)的模型詳細(xì)講解如何進(jìn)行運(yùn)動(dòng)捕捉的動(dòng)作裝配

關(guān)閉

這節(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):

  1. 右鍵點(diǎn)擊藍(lán)色的動(dòng)畫樹,選擇“Add SkelControl Chain”(添加骨架控制器鏈接)。
  2. 在彈出的組合框中可以選擇要控制的骨骼。需要注意的是,每個(gè)骨骼只能有一個(gè)控制器。
  3. 選擇頭骨之后,在動(dòng)畫樹節(jié)點(diǎn)(AnimTree)中會(huì)出現(xiàn)一個(gè)標(biāo)記為“Head”(頭)的綠色連接器。
  4. 在背景上右鍵點(diǎn)擊,創(chuàng)建一個(gè)新的SkelControlLookAt(骨架控制查看)。
  5. 將SkelControlLookAt(骨架控制查看)與Head(頭部)連接器相連。
  6. 選擇SkelControlLookAt(骨架控制查看),可以看到一個(gè)藍(lán)色的角上帶有小箭頭的菱形圖案。這個(gè)菱形圖案就是注視的目標(biāo),可以通過箭頭移動(dòng)它。
  7. 還可以修改SkelControlLookAt(骨架控制查看)的一些設(shè)置。例如,LookAtAxis可以讓頭朝向合適的方向。

下面是一個(gè)來自動(dòng)畫樹的示例:

control_node.jpg

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)。

SkelControl Types(骨架控制器類型)

下面將簡單地介紹幾種骨架控制器。

通用屬性

以下是所有骨架控制器的通用參數(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)指定具體的骨骼)。

SkelControlSingleBone(骨架控制單骨骼)

通過這個(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è)定的骨骼名稱。

SkelControlLookAt(骨架控制查看)

通過這個(gè)控制器,可以調(diào)整一根骨骼的的旋轉(zhuǎn),使得它總指向某個(gè)特定目標(biāo)。例如,可以使人物的頭部總是注視著一個(gè)特定的目標(biāo)。在下面的抓圖中,頭部正注視著藍(lán)色的菱形圖案。綠色的錐形表示頭部可以移動(dòng)的最大范圍。

control_lookat.jpg

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,制作出人物注視自己手的效果。

SkelControlSpline(骨架控制樣條曲線)

樣條曲線控制器并不會(huì)修改骨骼本身,而是將一個(gè)骨骼放到一條骨骼鏈中,并將它們調(diào)整為一條spline(樣條曲線)。在下面的示例中,將使用SkelControlSingleBone(骨架控制單骨骼),使得香腸的末端向上翹起。然后,用SkelControlSpline(骨架控制樣條曲線)來修改其上的四塊骨骼。這樣就在香腸的兩端創(chuàng)建了一條spline(樣條曲線)。需要注意的是,該控制器并沒有保持骨骼的長度。

control_spline.jpg

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)有用。

SkelControlLimb(骨架控制肢體)

該控制器應(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è)。

ArmSkelHierarchy.jpg

左邊的這些骨骼是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è)骨骼。

control_limb.jpg

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)。

SkelControlFootPlacement(骨架控制腳的放置)

這是一種特殊的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>

control_foot.jpg

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軸變換

SkelControlWheel(骨架控制車輪)

這個(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)向。

control_wheel.jpg

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ū)vip超值服務(wù) 朱峰社區(qū)vip超值服務(wù)

朱峰社區(qū)網(wǎng)頁版
朱峰社區(qū)網(wǎng)頁版(手機(jī)掃描-分享-添加到屏幕)


朱峰社區(qū)公眾號(hào)
朱峰社區(qū)微信公眾號(hào)(微信掃一掃-關(guān)注)

資源說明圖文教程無法下載,只能觀看圖片和文字。
版權(quán)規(guī)則本站圖文皆來自互聯(lián)網(wǎng)共享資源,如涉及到版權(quán)請(qǐng)查看版權(quán)規(guī)則。本平臺(tái)提供圖文僅可用于個(gè)人學(xué)習(xí),如用于商業(yè)請(qǐng)購買正版。您必須遵守的版權(quán)規(guī)則

未知用戶

未知用戶

2005-2025 朱峰社區(qū) 版權(quán)所有 遼ICP備2021001865號(hào)-1
2005-2025 ZhuFeng Community All Rights Reserved

VIP

朱峰社區(qū)微信公眾號(hào)

回頂部

1.復(fù)制文本發(fā)給您的QQ好友或群、微信等;好友點(diǎn)擊鏈接以后,轉(zhuǎn)發(fā)就成功了。 2.如朋友點(diǎn)擊您的鏈接,您需要需刷新一下才行;同一個(gè)好友僅能點(diǎn)擊一次。
購買VIP,觀看所有收費(fèi)教程。