構(gòu)框圖;
[0027]圖5是根據(jù)本發(fā)明優(yōu)選實(shí)施例的角色面部朝向的調(diào)整裝置的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0028]為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。
[0029]需要說(shuō)明的是,本發(fā)明的說(shuō)明書和權(quán)利要求書及上述附圖中的術(shù)語(yǔ)“第一”、“第二”等是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
[0030]根據(jù)本發(fā)明實(shí)施例,提供了一種角色面部朝向的調(diào)整方法實(shí)施例,需要說(shuō)明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
[0031]圖1是根據(jù)本發(fā)明實(shí)施例的角色面部朝向的調(diào)整方法,如圖1所示,該方法包括如下步驟:
[0032]步驟S102,獲取視點(diǎn)所在的位置信息以及角色在視點(diǎn)的視角范圍內(nèi)的當(dāng)前面部朝向信息;
[0033]步驟S104,按照視點(diǎn)的位置信息對(duì)當(dāng)前面部朝向信息進(jìn)行調(diào)整,直至角色面向視點(diǎn)。
[0034]通過(guò)上述步驟,可以實(shí)現(xiàn)游戲/動(dòng)漫中的角色在進(jìn)行三維動(dòng)畫演示時(shí)能夠會(huì)面對(duì)視角(例如:攝像機(jī)),提升用戶體驗(yàn)的技術(shù)效果,進(jìn)而解決了相關(guān)技術(shù)在三維動(dòng)畫的演示過(guò)程中,無(wú)法準(zhǔn)確設(shè)定游戲角色的面部能夠朝向特定的觀測(cè)位置的技術(shù)問(wèn)題。
[0035]可選地,在步驟S102中,獲取角色在視點(diǎn)的視角范圍內(nèi)的當(dāng)前面部朝向信息可以包括以下操作:
[0036]步驟S1:在視頻加載過(guò)程中,分別記錄角色的頭部骨骼的位置信息和眼部骨骼的位置信息,其中,眼部骨骼的位置信息包括:左眼骨骼的位置信息和右眼骨骼的位置信息;
[0037]步驟S2:根據(jù)記錄的頭部骨骼的位置信息和眼部骨骼的位置信息獲取當(dāng)前面部朝向信息。
[0038]正如上文所述,單位的運(yùn)動(dòng)是由骨骼運(yùn)動(dòng)所帶動(dòng)的,而骨骼是由空間中的一系列點(diǎn)連成線所組成的。例如:當(dāng)腿部運(yùn)動(dòng)的時(shí)候,腳部在腿部運(yùn)動(dòng)的帶動(dòng)下肯定也需要跟著運(yùn)動(dòng);考慮到骨骼的數(shù)據(jù)結(jié)構(gòu)通常為樹狀結(jié)構(gòu),因而,腳部的父節(jié)點(diǎn)是小腿,小腿的父節(jié)點(diǎn)則是大腿,以此類推,而所有骨骼的父節(jié)點(diǎn)便是根骨骼。在通常情況下,根骨骼只有一個(gè),其通常位于兩腳之間。
[0039]在優(yōu)選實(shí)施例中,為滿足頭部旋轉(zhuǎn)的需要,在每次加載角色的時(shí)候,至少需要記錄下該角色的三根骨骼信息,其分別為:頭部骨骼,左眼骨骼,右眼骨骼,以便于確定角色在每次加載后所在的初始位置。
[0040]可選地,在步驟S104中,按照位置信息對(duì)當(dāng)前面部朝向信息進(jìn)行調(diào)整,直至角色面向視點(diǎn)可以包括以下步驟:
[0041]步驟S3:采用視點(diǎn)的位置信息與當(dāng)前面部朝向信息計(jì)算位置偏差;
[0042]步驟S4:根據(jù)位置偏差判斷角色的面部是否可以朝向視點(diǎn);
[0043]步驟S5:如果是,則先根據(jù)眼部骨骼的位置信息和位置偏差將角色的眼睛調(diào)整至注視視點(diǎn),再根據(jù)頭部骨骼的位置信息和位置偏差逐幀更新頭部骨骼的位置信息直至角色面向視點(diǎn)。
[0044]在優(yōu)選實(shí)施例中,如果需要確定角色的頭部是否能夠轉(zhuǎn)向視角(例如:攝像機(jī)),那么首先需要旋轉(zhuǎn)眼部的骨骼,以確保眼部能夠旋轉(zhuǎn)至該視角,然后再旋轉(zhuǎn)頭部的骨骼,并且逐幀更新頭部轉(zhuǎn)動(dòng)后所在的位置,讓頭部緩慢轉(zhuǎn)動(dòng)至該視角。
[0045]可選地,在步驟S4中,根據(jù)位置偏差判斷角色的面部是否可以朝向視點(diǎn)可以包括以下操作:
[0046]步驟S41:確定位置偏差在世界坐標(biāo)系中的三維坐標(biāo)值,其中,角色當(dāng)前面朝X軸的正方向,角色的左手邊為y軸正方向以及地平面的法線方向?yàn)閦軸的正方向;
[0047]步驟S42:分別判斷三維坐標(biāo)值是否位于預(yù)先設(shè)定的角色的頭部轉(zhuǎn)動(dòng)范圍內(nèi)。
[0048]需要說(shuō)明的是,上述世界坐標(biāo)系在本發(fā)明中主要指的是左手坐標(biāo)系,其中,人物默認(rèn)都是面朝X軸正方向的,角色的左手邊為y軸正方向以及地平面的法線方向?yàn)閦軸的正方向,例如:假設(shè)三維坐標(biāo)為(x,z,y),那么,(1,0,0)表示這個(gè)人看著正前方,(0,1,0)表示左手方向,(0,_1,0)表示右手方向,(0,0,1)表示上方,(0.5,0.5,0.7)表示右+前+上方,這里的方向是經(jīng)過(guò)“歸一化的”,即x*x+y*y+z*z = 1。另外,下文中出現(xiàn)的face_dir為上述位置偏差,face_dir.x為位置偏差在x軸方向上的取值,同理,face_dir.y和face_dir.z分別為位置偏差在y軸和z軸方向上的取值。
[0049]下面將結(jié)合圖2所示的優(yōu)選實(shí)施方式對(duì)上述優(yōu)選實(shí)施過(guò)程作進(jìn)一步地描述。圖2是根據(jù)本發(fā)明實(shí)施例的判斷頭部是否能夠轉(zhuǎn)向視角的流程圖。如圖2所示,該流程可以包括以下處理步驟:
[0050]步驟S202,判斷face_dir.x是否小于0,如果是,則轉(zhuǎn)到步驟S216;如果否,則繼續(xù)執(zhí)行步驟S204;
[0051]faCe_dir.X大于0,表示游戲/動(dòng)漫角色只能看到前方,由于受到頸部骨骼扭曲度的限制,角色不可能把頭扭到背后去。
[0052]步驟S204,采用absy表示face_dir.y的絕對(duì)值以及采用absz表示face_dir.z的絕對(duì)值;
[0053]face_dir.y和face_dir.z需要求取絕對(duì)值,即一個(gè)角色頭部在向上/向下方向上能夠移動(dòng)的角度可以認(rèn)定為是一樣的,同理,一個(gè)角色頭部在向左/向右方向上能夠移動(dòng)的角度也可以認(rèn)定為是一樣的。
[0054]步驟S206,判斷absz是否大于0.5以及absy是否大于0.5,如果absz大于0.5且absy大于0.5,則轉(zhuǎn)到步驟S216;否則,繼續(xù)執(zhí)行步驟S208 ;
[0055]如上所述,absy和absz都是歸一化后的數(shù)值,其目的在于:限制頭部不要向上/向下(absy)以及向左/向右(absz)轉(zhuǎn)動(dòng)太多,上述0.5的取值可以認(rèn)定為經(jīng)過(guò)多次試驗(yàn)得到一個(gè)經(jīng)驗(yàn)數(shù)值,如果小于0.5,則這個(gè)角色的頭部可移動(dòng)范圍會(huì)隨之減少;如果大于0.5,則這個(gè)角色的頭部可移動(dòng)范圍會(huì)增大,可以根據(jù)實(shí)際場(chǎng)景的需要對(duì)0.5這個(gè)取值進(jìn)行調(diào)整。[°°56] 步驟S208,判斷absz是否大于absy,如果大于,則繼續(xù)執(zhí)行步驟S214 ;如果否,則繼續(xù)執(zhí)行步驟S210;
[0057]absz>absy表示這個(gè)角色的頭部在左/右方向上觀察的幅度比上/下方向上觀察的幅度要大一些。在這種情況下,主要是對(duì)左/右方向上觀察的幅度的約束。
[0058]步驟S210,判斷face_dir.y是否大于0.6或小于_0.8,如果face_dir.y大于0.6或小于-0.8,則轉(zhuǎn)到步驟S216;否則,繼續(xù)執(zhí)行步驟S212;
[0059]通常上述判斷條件可知,此處首先滿足的條件是absz< absy,其次,選取上述數(shù)值并結(jié)合該步驟中的判斷條件則是限定這個(gè)角色的頭部在上/下方向上觀察的幅度比左/右方向上觀察的幅度要大一些。在這種情況下,主要是對(duì)上/下方向上觀察的幅