度的約束,即角色的頭部更容易查看下方,而不太容易觀察上方,故而,下方的數(shù)值采用-0.8,而上方的數(shù)值采用0.6。當(dāng)然,無論是-0.8還是0.6都是經(jīng)過多次試驗(yàn)得到一個經(jīng)驗(yàn)數(shù)值,可以根據(jù)實(shí)際場景的需要分別對這兩個取值進(jìn)行調(diào)整。
[0060]步驟S212,角色的頭部可以轉(zhuǎn)向視角;
[0061 ] 步驟S214,判斷absz是否大于0.8 ;如果是,則執(zhí)行步驟S216;如果否,則執(zhí)行步驟S212;
[0062]該步驟中的0.8也是經(jīng)過多次試驗(yàn)得到一個經(jīng)驗(yàn)數(shù)值,可以根據(jù)實(shí)際場景的需要分別對這兩個取值進(jìn)行調(diào)整。
[0063 ]步驟S216,角色的頭部無法轉(zhuǎn)向視角。
[0064]可選地,在步驟S5中,根據(jù)眼部骨骼的位置信息和位置偏差將眼睛調(diào)整至注視視點(diǎn)可以包括以下操作:
[0065]步驟S51:通過眼部骨骼的位置信息和位置偏差確定眼睛待轉(zhuǎn)動的方向;
[0066]步驟S52:采用位置偏差和眼睛待轉(zhuǎn)動的方向生成旋轉(zhuǎn)矩陣;
[0067]步驟S53:根據(jù)眼部骨骼的位置信息與旋轉(zhuǎn)矩陣的計(jì)算結(jié)果將眼睛調(diào)整至注視視點(diǎn)。
[0068]人物的一根骨骼通??梢圆捎脭?shù)學(xué)的一個向量來描述,一個角色模型即為骨骼的集合,而向量的集合是矩陣,故計(jì)算機(jī)中一個角色模型可以采用矩陣來描述。如果要使一個角色模型活動起來,那么在數(shù)學(xué)上等價于矩陣的多種運(yùn)算,因此,計(jì)算機(jī)三維動作動畫實(shí)際上就是矩陣運(yùn)算。
[0069]在優(yōu)選實(shí)施例中,將眼睛轉(zhuǎn)向視點(diǎn)的方式為:首先,確定眼睛轉(zhuǎn)向視點(diǎn)的旋轉(zhuǎn)方向(例如:左上方);其次,可以根據(jù)上述face_dir和左上方的方向生成旋轉(zhuǎn)矩陣;然后,將旋轉(zhuǎn)矩陣直接賦值給眼睛的骨骼矩陣即可。
[0070]可選地,在步驟S5中,根據(jù)頭部骨骼的位置信息和位置偏差逐幀更新頭部骨骼的位置信息直至角色面向視點(diǎn)可以包括以下操作:
[0071]步驟S54:將與當(dāng)前面部朝向信息對應(yīng)的初始頭部骨骼矩陣轉(zhuǎn)換為初始四元數(shù);
[0072]步驟S55:將與角色面向視點(diǎn)對應(yīng)的目標(biāo)頭部骨骼矩陣轉(zhuǎn)換為目標(biāo)四元數(shù);
[0073]步驟S56:在從初始四元數(shù)變換為目標(biāo)四元數(shù)的過程中,按照預(yù)設(shè)的旋轉(zhuǎn)時間逐幀計(jì)算每幀所分別對應(yīng)的插值;
[0074]步驟S57:按照計(jì)算得到的每幀所分別對應(yīng)的插值依次確定在經(jīng)過每幀更新后頭部骨骼所在的位置,直至角色面向視點(diǎn)。
[0075]位置、旋轉(zhuǎn)、縮放(?08;11:;[011、1?(^31:;[011、30316,簡稱為?1^)可以決定一根骨骼的狀態(tài),其中,對于位置和縮放而言,這兩個數(shù)值均為線性數(shù)值,可以直接相加減,例如:坐標(biāo)(3,0,0)分別沿X軸、y軸和z軸都移動5單位,其結(jié)果即為坐標(biāo)(8,5,5)。但是,對于旋轉(zhuǎn)而言,考慮到歐拉角具有一定的局限性,其無法計(jì)算插值,即如果希望從A旋轉(zhuǎn)到B,并在A與B之間選取一個中間點(diǎn),那么這個中間點(diǎn)不會在A到B的最短路徑上。為此,為了克服上述缺陷,四元數(shù)(即由四個數(shù)組成的向量)逐步替代了歐拉角,用于計(jì)算骨骼旋轉(zhuǎn)。
[0076]在優(yōu)選實(shí)施例中,頭部骨骼從當(dāng)前所在的初始位置旋轉(zhuǎn)到視點(diǎn)所在的目標(biāo)位置是一個逐幀更新頭部骨骼位置的過程。首先,可以將頭部骨骼放縮比例設(shè)置為1.0,其原因在于:四元數(shù)計(jì)算必須要求縮放比為1.0;其次,將當(dāng)前(即在角色加載完成后的角色頭部的初始朝向)頭部骨骼矩陣轉(zhuǎn)換為四元數(shù)rot_src(即上述初始四元數(shù));再次,將目標(biāo)視點(diǎn)所在朝向?qū)?yīng)的頭部骨骼矩陣轉(zhuǎn)換為四元數(shù)rot_deSt(即上述目標(biāo)四元數(shù));然后,根據(jù)預(yù)先設(shè)定的旋轉(zhuǎn)時間以及在該旋轉(zhuǎn)時間內(nèi)所包含的幀數(shù),逐幀計(jì)算rot_src和rot_dest的插值,進(jìn)而得到最終的目標(biāo)結(jié)果矩陣resu 1 t_matrix;最后,恢復(fù)resu 1 t_matrix的縮放比例,并將最終得到的result_matrix的結(jié)果賦值給頭部矩陣。
[0077]需要說明的是,在后續(xù)的演示過程中,每幀更新骨骼位置的時候,如果是頭部和眼睛,則只需要更新位置和縮放,而不再更新旋轉(zhuǎn)。因?yàn)樾D(zhuǎn)已經(jīng)由上面步驟更新過了。
[0078]下面將結(jié)合一個二維空間實(shí)例對上述頭部旋轉(zhuǎn)過程做進(jìn)一步地描述。
[0079]圖3是根據(jù)本發(fā)明優(yōu)選實(shí)施例的角色頭部從初始位置旋轉(zhuǎn)至目標(biāo)位置的二維空間示意圖。如圖3所示,在采用計(jì)算機(jī)進(jìn)行視頻處理過程中,如果將角色頭部從初始位置一下轉(zhuǎn)到目標(biāo)視點(diǎn)所在位置,則會讓用戶產(chǎn)生明顯的“跳幀”感覺,即角色從當(dāng)前模樣瞬間就變成另外一幅模樣,感覺不自然,因此,假設(shè)在預(yù)設(shè)旋轉(zhuǎn)時間內(nèi)包含三個,圖中的虛線箭頭表示中間的處理過程,也就是“每幀頭部更新”需要執(zhí)行的操作。在圖3中,計(jì)算機(jī)在第一幀會計(jì)算出F1箭頭位置,并將該位置更新為角色頭部的當(dāng)前位置;然后,在第二幀會計(jì)算出F2箭頭位置,并將該位置更新為角色頭部的當(dāng)前位置;最后,在第三幀角色頭部才真正移動到rot_destο
[0080]圖4是根據(jù)本發(fā)明實(shí)施例的角色面部朝向的調(diào)整裝置的結(jié)構(gòu)框圖。如圖4所示,該角色面部朝向的調(diào)整裝置可以包括:獲取模塊10,用于獲取視點(diǎn)所在的位置信息以及角色在視點(diǎn)的視角范圍內(nèi)的當(dāng)前面部朝向信息;調(diào)整模塊20,用于按照視點(diǎn)的位置信息對當(dāng)前面部朝向信息進(jìn)行調(diào)整,直至角色面向視點(diǎn)。
[0081]可選地,圖5是根據(jù)本發(fā)明優(yōu)選實(shí)施例的角色面部朝向的調(diào)整裝置的結(jié)構(gòu)框圖。如圖5所示,獲取模塊10可以包括:記錄單元100,用于在視頻加載過程中,分別記錄角色的頭部骨骼的位置信息和眼部骨骼的位置信息,其中,眼部骨骼的位置信息包括:左眼骨骼的位置信息和右眼骨骼的位置信息;獲取單元102,用于根據(jù)記錄的頭部骨骼的位置信息和眼部骨骼的位置信息獲取當(dāng)前面部朝向信息。
[0082]可選地,如圖5所示,調(diào)整模塊20可以包括:計(jì)算單元200,用于采用視點(diǎn)的位置信息與當(dāng)前面部朝向信息計(jì)算位置偏差;判斷單元202,用于根據(jù)位置偏差判斷角色的面部是否可以朝向視點(diǎn);調(diào)整單元204,用于在判斷單元輸出為是時,則先根據(jù)眼部骨骼的位置信息和位置偏差將角色的眼睛調(diào)整至注視視點(diǎn),再根據(jù)頭部骨骼的位置信息和位置偏差逐幀更新頭部骨骼的位置信息直至角色面向視點(diǎn)。
[0083]可選地,判斷單元202可以包括:第一確定子單元(圖中未示出),用于確定位置偏差在世界坐標(biāo)系中的三維坐標(biāo)值,其中,角色當(dāng)前面朝X軸的正方向,角色的左手邊為y軸正方向以及地平面的法線方向?yàn)閆軸的正方向;判斷子單元(圖中未示出),用于分別判斷三維坐標(biāo)值是否位于預(yù)先設(shè)定的角色的頭部轉(zhuǎn)動范圍內(nèi)。
[0084]可選地,調(diào)整單元204可以包括:第二確定子單元(圖中未示出),用于通過眼部骨骼的位置信息和位置偏差確定眼睛待轉(zhuǎn)動的方向;生成子單元(圖中未示出),用于采用位置偏差和眼睛待轉(zhuǎn)動的方向生成旋轉(zhuǎn)矩陣;第一調(diào)整子單元(圖中未示出),用于根據(jù)眼部骨骼的位置信息與旋轉(zhuǎn)矩陣的計(jì)算結(jié)果將眼睛調(diào)整至注視視點(diǎn)。
[0085]可選地,調(diào)整單元204可以包括:第一轉(zhuǎn)換子單元(圖中未示出),用于將與當(dāng)前面部朝向信息對應(yīng)的初始頭部骨骼矩陣轉(zhuǎn)換為初始四元數(shù);第二轉(zhuǎn)換子單元(圖中未示出),用于將與角色面向視點(diǎn)對應(yīng)的目標(biāo)頭部骨骼矩陣轉(zhuǎn)換為目標(biāo)四元數(shù);計(jì)算子單元(圖中未示出),用于在從初始四元數(shù)變換為目標(biāo)四元數(shù)的過程中,按照預(yù)設(shè)的旋轉(zhuǎn)時間逐幀計(jì)算每幀所分別對應(yīng)的插值;第二調(diào)整子單元(圖中未示出),用于按照計(jì)算得到的每幀所分別對應(yīng)的插值依次確定在經(jīng)過每幀更新后頭部骨骼所在的位置,直至角色面向視點(diǎn)。
[0086]上述本發(fā)明實(shí)施例序號僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
[0087]在本發(fā)明的上述實(shí)施例中,對各個實(shí)施例的描述都各有側(cè)重,某個實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。
[0088