多客戶端聯(lián)網控制下三維場景協(xié)作搬運的實現(xiàn)方法
【專利摘要】多客戶端聯(lián)網控制下三維場景協(xié)作搬運的實現(xiàn)方法,在服務器中設置三維場景及人物,多個客戶端通過一個客服端與服務器聯(lián)網,每一個客戶端在三維場景中對應一個虛擬人物,在三維場景中模擬多人協(xié)作對物體的搬運操作。本發(fā)明使用了現(xiàn)有的三維渲染技術及網絡環(huán)境,通過一系列的腳本動作狀態(tài)控制、統(tǒng)一的計算機實時同步、三維人物渲染及搬運物體微調,使計算機模擬多人搬運物體行為細節(jié)表現(xiàn)更為真實,效率更高。
【專利說明】多客戶端聯(lián)網控制下三維場景協(xié)作搬運的實現(xiàn)方法
【技術領域】
[0001]本發(fā)明屬于計算機三維模擬【技術領域】,涉及計算機模擬多人搬運物體行為技術,以聯(lián)機協(xié)作的控制方式和三維表現(xiàn)方式模擬并顯示多人搬運物體的行為,為一種多客戶端聯(lián)網控制下三維場景協(xié)作搬運的實現(xiàn)方法。
【背景技術】
[0002]在電力虛擬仿真三維培訓項目中涉及多人協(xié)作對物體進行搬運的環(huán)節(jié),現(xiàn)有的三維技術在對單人物體搬運的控制方面已經比較成熟,使用腳本觸發(fā)動畫播放,使用程序控制物體與人物的綁定。在多人協(xié)作方面由于涉及場景同步、腳本動作同步、網絡命令同步及物體位移計算等多方面的內容,使得計算機網絡多人協(xié)作在虛擬仿真的環(huán)境下模擬多人搬運物體行為一直是一個困難的問題。
【發(fā)明內容】
[0003]本發(fā)明要解決的問題是:在電力虛擬仿真三維培訓項目中,實現(xiàn)多客戶端操作模擬多人協(xié)作搬運的三維場景,并在各客戶端同步顯示模擬搬運的結果。
[0004]本發(fā)明的技術方案為:多客戶端聯(lián)網控制下三維場景協(xié)作搬運的實現(xiàn)方法,在服務器中設置三維場景及人物,多個客戶端通過一個客服端與服務器聯(lián)網,每一個客戶端在三維場景中對應一個虛擬人物,在三維場景中模擬多人協(xié)作對物體的搬運操作,具體為:
[0005]I)用腳本定義所有人物動作的骨骼動畫,對應不同的動作設定不同的狀態(tài)標記,骨骼動畫分為只播放一次、循環(huán)播放和播放直到某條件觸發(fā)停止三種,骨骼動畫與狀態(tài)標記以及設定的觸發(fā)條件構成腳本動畫;
[0006]2)對被搬運物體進行分類,根據搬運方式和搬運人數(shù)進行區(qū)分;
[0007]3)對腳本動畫、骨骼動畫,以及它們的初始化屬性參數(shù)進行本地定義;
[0008]4)建立三維場景,初始化場景參數(shù),所有被移動物體及人物的位置、狀態(tài)、參數(shù)的更新全部通過客服端進行,即所有每臺客戶端對虛擬人物的控制命令發(fā)送至客服端,客服端再傳輸至服務器及其它客戶端,更新對應的虛擬人物的狀態(tài)標記,服務器對應收到的所有控制命令更新三維場景狀態(tài),服務器將三維場景狀態(tài)通過客服端同步至各客戶端,實現(xiàn)所有客戶端的同步更新;
[0009]5)客戶端通過客服端與服務器聯(lián)網,載人三維場景,從客服端更新所有同步信息,同時進行同步渲染,使所有客戶端與服務器中渲染的三維場景保持一致;
[0010]6)客戶端控制對應的虛擬人物,通過狀態(tài)標記控制腳本動畫,狀態(tài)標記的改變通過客服端發(fā)送至服務器,服務器對收到的同一時間的各虛擬人物的狀態(tài)標記變更進行處理,得到對應的協(xié)作搬運動作,更新人物及被搬運物體的位置信息,服務器將所述人物及被搬運物體的位置信息通過客服端同步至各客戶端,客戶端通過從客服端同步得到的其它客戶端的對應虛擬人物的狀態(tài)標記,以及所述人物及被搬運物體的位置信息,在本客戶端進行三維場景協(xié)作搬運的顯示。[0011]在步驟6)三維場景協(xié)作搬運的顯示過程中,被搬運物體和虛擬人物上設有對應的搬運節(jié)點,虛擬人物根據狀態(tài)標記進行動作,當虛擬人物的搬運節(jié)點與被搬運物體的搬運節(jié)點重合時,就位成功,綁定這兩個搬運節(jié)點;在單人搬運模式下,直接固定虛擬人物與被搬運物體的位置,再播放骨骼動畫實現(xiàn)虛擬人物的后續(xù)動作變化,被搬運物體隨虛擬人物的動作移動;在多人模式下,等待全部虛擬人物就位成功后,固定擬人物與被搬運物體的位置,再播放骨骼動畫實現(xiàn)虛擬人物的后續(xù)動作變化,被搬運物體隨虛擬人物的動作移動。
[0012]在多人搬運模式中,實時計算每個虛擬人物對被搬運物體產生的作用力,在三維場景協(xié)作搬運的顯示中進行對應表現(xiàn)。
[0013]客戶端與服務器及客服端的數(shù)據同步頻率在微秒級。
[0014]本發(fā)明使用了現(xiàn)有的三維渲染技術及網絡環(huán)境,通過一系列的腳本動作狀態(tài)控制、統(tǒng)一的計算機實時同步、三維人物渲染及搬運物體微調,使計算機模擬多人搬運物體行為細節(jié)表現(xiàn)更為真實,效率更高?!揪唧w實施方式】
[0015]本發(fā)明在三維虛擬場景中,模擬多人協(xié)作對物體的搬運。
[0016]涉及的模擬對象包括:物體搬運姿勢、多人移動方向對物體移動的影響、多人動作或位置對物體移動的影響、物體及人物位置變化的相互影響。
[0017]模擬搬運方式包括:拎、捧、扛。
[0018]本發(fā)明中,多個客戶端通過一個客服端與服務器聯(lián)網,每一個客戶端在三維場景中對應一個虛擬人物,使用骨骼動畫確定動作,網絡同步實現(xiàn)狀態(tài)及屬性同步,腳本觸發(fā)實現(xiàn)命令傳遞。使用客服端和客戶端分離的方式實現(xiàn)場景內容同步。包括被搬運物體運動及狀態(tài)的統(tǒng)一、所有客戶端控制人物位置、動作、狀態(tài)的同步。
[0019]具體過程如下:
[0020]1、前期定義所有的人物動作的骨骼動畫,骨骼動畫就是在模型里面的控制模型運動的一系列關鍵幀描述。對應不同的動作設定不同的狀態(tài)標記,骨骼動畫分為只播放一次、循環(huán)播放和播放直到某條件觸發(fā)停止三種,骨骼動畫與狀態(tài)標記以及設定的觸發(fā)條件構成腳本動畫,在不同的狀態(tài)標記下自動播放不同的骨骼腳本動畫。
[0021]不同的狀態(tài)指對人物當前不同狀態(tài)的定義,例如:行走狀態(tài)、撿起狀態(tài)、放下狀態(tài)、跑步狀態(tài)……,所有的狀態(tài)對應一個過程動作,過程動作有的是循環(huán)的,例如走路,有的是播放一次,例如撿起。
[0022]2、其次對被搬運物體進行分類,主要區(qū)分搬運方式和搬運人數(shù)。
[0023]3、所有的前期定義腳本、骨骼動畫、初始化屬性參數(shù)都定義本地。
[0024]本地定義指的是固定的狀態(tài)對應的骨骼動畫,腳本動畫定義的內容,一些固定的定義都寫在本地,即服務器,同時每個客戶端都拷貝一份??蛻舳伺c服務器同步的時候,只同步狀態(tài)標記,然后本地通過狀態(tài)標記調用腳本動畫。
[0025]4、客服端建立場景,初始化所有參數(shù),對所有被移動物體及人物的位置、狀態(tài)、參數(shù)進行實時更新。
[0026]本發(fā)明中,狀態(tài)標記的更改全部以網絡中的一臺客戶端為標準,所有客戶端要求的改變,全部由這臺機器執(zhí)行,然后將改變后的狀態(tài)同步發(fā)送給所有其他的客戶端。[0027]所有參數(shù)有固定參數(shù),有一些是根據場景改變的,例如在2人搬運物體中,當?shù)谌齻€人如場景時,需要初始化的參數(shù)是第一、第二個人的位置信息,動作狀態(tài)信息,被搬運物體的位置信息(包括朝向),還有本身自己進入場景后的位置信息及動作信息。這樣初始化后用來渲染同步其他的計算機,使得大家看到的畫面是同一幅。
[0028]5、客戶端通過客服端鏈接服務器,載入三維場景,從客服端更新所有同步信息,同時進行同步渲染。使所有客戶端包括服務器渲染的三維場景保持一致。
[0029]所述同步信息就是同步狀態(tài)標記信息。例如一個人物甲,他的狀態(tài)是走動改變至跑動,那么需要有客服端把這個狀態(tài)同步到所有的其他客戶端,目的是讓所有的客戶端中同一人物甲擁有相同的狀態(tài),相同的狀態(tài)就會對應播放相同的腳本動畫,對應相同的動作。
[0030]本發(fā)明中渲染都在本地,由三維引擎渲染,因為狀態(tài)同步,所以各自本地都會渲染相同的動畫,相當于同步渲染。
[0031]6、客戶端選擇人物角色進行控制,所有狀態(tài)控制動畫,在腳本中規(guī)定,每幀檢查一下狀態(tài),不同的狀態(tài)下播放不同的動畫,當狀態(tài)被改變,第一時間會替換播放的骨骼動畫。狀態(tài)的改變通過服務器進行改變,改變后同步所有客戶端角色,當客戶端在一臺機器上控制人物甲拿東西或者放下東西的時候,本地先不進行狀態(tài)的改變(狀態(tài)不改變動作就不會變),這個改變的要求送給服務客戶端,然后執(zhí)行對應改變,最后把改變后的狀態(tài)發(fā)到所有的客戶端。。同時實時更新位置信息,使得移動與動畫協(xié)調。位置信息是人物或者物體的移動在三維中的坐標信息,包括位置(xyz)和朝向。當位置移動速度和動畫播放速度協(xié)調的時候就是最佳,例如光移動位置不做動作就變成平移,如果光做動作不動位置就變成原地太空步。
[0032]7、被搬運物體和虛擬人物上設有搬運節(jié)點,搬運節(jié)點的作用是將物體綁定到人物模型的對應位置,例如抗一個東西,最后要講物體綁定到人物模型的肩膀上,如果是捧東西就是綁定到人物模型的手掌上。當人物角色上的搬運節(jié)點跟物體上的搬運節(jié)點重合時,就位成功,綁定這2個搬運節(jié)點,物體在人物上固定,開始播放動作動畫,例如撿起東西,先開始播放蹲下的動作然后播放手伸出來的動作,讓人物蹲下伸手,將手握住被撿東西的時候就是就位成功,這個時候綁定,然后物體跟手部的動作一起運動。在單人搬運的模式下,直接固定位置。在多人模式下,等待多人全部就位,然后各自播放骨骼動畫實現(xiàn)動作變化。當人物角色上的搬運節(jié)點靠近到物體的搬運節(jié)點位置,在容忍值范圍內自動固定。當容忍值適當,搬運時就能實現(xiàn)畫面上的協(xié)調操作。適當?shù)闹凳且粋€視覺上的容忍值,當撿起物體,當物體大小改變時,蹲下后握住物體的動作未必跟物體緊密結合,這個時候設置一個容忍值,當手靠近物體至多少范圍時,物體也自動往手部移動。這個值不能隨便設置,標準是視覺上看不出物體的主動移動。
[0033]8、在移動的過程中,單人搬運模式直接將被搬運物體綁定到人物角色模型跟隨人物動作的移動。
[0034]9、在多人搬運模式中,需要實時計算每個人物角色對被搬運物體產生的作用,從力的角度分析,實現(xiàn)相互作用的結果,然后進行表現(xiàn)。當2人搬運物體的時候,同時作用于同一個物體,因為物體不可形變,并且人在扛起物體后,人與物體間的距離保持不變。最后所有的控制轉化為兩個人及物體的移動,其中人物與物體間的距離保持不變。在三維場景中,控制人物移動使用大小相同的一個力,只有方向在不停的改變。在計算這個力的時候,將2個力分解成沿著2個人物的搬運節(jié)點和垂直于2個人物的搬運節(jié)點方向。在沿著2個人物的搬運節(jié)點方向,當力的方向相同的時候則忘同一個方向移動,如果力的方向不相同的時候相減,然后沿著力大的方向移動。垂直于2個人物的搬運節(jié)點上的力如果是同一方向則直接移動,如果在不同方向先確定轉動,當旋轉至沿著2個人物的搬運節(jié)點方向時,再通過加減計算物體移動方向。
[0035]例如2人搬運,其中一人不動,在固定搬運節(jié)點與人物節(jié)點的基礎上,另一個人不能靠近或者原理,只能實現(xiàn)右移和右移,左右移動的結果也將轉化為以另一個人為圓心的旋轉。當2個人同時移動的時候分析移動的方向,分解成沿著被搬運物體方向和垂直物體方向。假設人物給出的力相等,根據角度算出分項力,合并前后分項力決定物體整體移動方向,然后前側分項力決定物體前端移動方向,后側分項力決定物體后端移動方向,其中實時保證前后連接點之間的距離。
[0036]10、在超過3人的搬運模式中使用與2人搬運同樣的方式。作用于同一點的分項力可以合并,不作用于同一點的分項力則影響旋轉。這里將人物作用于搬運節(jié)點的力分解為水平于節(jié)點連線和垂直于節(jié)點連線。因為總力大小相等,根據角度不同,分解出來的力就會不同,然后可以用一定的單位進行差量計算。影響旋轉的是被搬運物體,由分項力的方向決定。
[0037]11、網絡實時同步人物角色和被搬運的物體位置數(shù)據,同步頻率在微秒級。其他屬性狀態(tài)的改變,例如動畫狀態(tài),類別,快慢,播放時間等,都是由各自客戶端所控制的虛擬人物觸發(fā),主要是根據不同狀態(tài)確定不同骨骼動畫的播放、播放方式等,這里所述觸發(fā)不是改變,所有狀態(tài)標記的變更由客服端改變后統(tǒng)一對各個客戶端進行更新。在角色操控觸發(fā)后,客戶端申請改變狀態(tài),提交服務器,在服務器計算后,將狀態(tài)同步給所有的操控客戶端。服務器計算有2種,一種是直接的改變的,如播放狀態(tài)。另一種是需要計算的,如分項力大小方向,然后確定被搬運物體旋轉的角度移動的速度等。然后客戶端播放不同的動作骨骼動畫。結合實時同步的位置信息,包括三維空間位置及朝向。實現(xiàn)多人協(xié)作搬運物體的三維虛擬仿真。
[0038]本發(fā)明具體實施時,各客戶端在同一網絡中進行聯(lián)機,打開同一幅場景地形,進入場景后,各自選擇不同的人物角色進行控制。所有角色進入場景時首先進行狀態(tài)和位置同步。各自通過操作對自己控制的人物角色發(fā)布命令,進行相關動作的執(zhí)行。在搬運物體的時候,點擊被搬運物體,獲取該物體的位置,然后自動走到物體附近,根據定義的不同搬運方式,把物體搬運起來,然后點擊不同的場景位置,角色將手中的物體搬運至指定地點,在此過程中場景中所有角色的控制端機器上同步顯示搬運過程及具體細節(jié)。動作協(xié)調、過程平滑。所有動作及狀態(tài)改變實時同步性高、無滯留、無誤動作。
[0039]如果被搬運物體需要多人合作進行,人數(shù)不夠時點擊被搬運物體自動走到物體旁邊就位,等人數(shù)夠并都就位以后,各自執(zhí)行各自的動作腳本。同時進行動作播放,同時各自的動作實時作用于被搬運物體。被搬運物體根據所有參與角色的動作調整位置及狀態(tài)。使被搬運物體及相關角色都能平滑運動。包括地形起伏時的運動處理。
[0040]同步時間能達到微秒級,在動作的流暢度上能達到平衡過度,被搬運物體運動軌跡符合物理學原理。同時逼真的實現(xiàn)了現(xiàn)實運動狀態(tài)的模擬。
【權利要求】
1.多客戶端聯(lián)網控制下三維場景協(xié)作搬運的實現(xiàn)方法,其特征是在服務器中設置三維場景及人物,多個客戶端通過一個客服端與服務器聯(lián)網,每一個客戶端在三維場景中對應一個虛擬人物,在三維場景中模擬多人協(xié)作對物體的搬運操作,具體為: 1)用腳本定義所有人物動作的骨骼動畫,對應不同的動作設定不同的狀態(tài)標記,骨骼動畫分為只播放一次、循環(huán)播放和播放直到某條件觸發(fā)停止三種,骨骼動畫與狀態(tài)標記以及設定的觸發(fā)條件構成腳本動畫; 2)對被搬運物體進行分類,根據搬運方式和搬運人數(shù)進行區(qū)分; 3)對腳本動畫、骨骼動畫,以及它們的初始化屬性參數(shù)進行本地定義; 4)建立三維場景,初始化場景參數(shù),所有被移動物體及人物的位置、狀態(tài)、參數(shù)的更新全部通過客服端進行,即所有每臺客戶端對虛擬人物的控制命令發(fā)送至客服端,客服端再傳輸至服務器及其它客戶端,更新對應的虛擬人物的狀態(tài)標記,服務器對應收到的所有控制命令更新三維場景狀態(tài),服務器將三維場景狀態(tài)通過客服端同步至各客戶端,實現(xiàn)所有客戶端的同步更新; 5)客戶端通過客服端與服務器聯(lián)網,載人三維場景,從客服端更新所有同步信息,同時進行同步渲染,使所有客戶端與服務器中渲染的三維場景保持一致; 6)客戶端控制對應的虛擬人物,通過狀態(tài)標記控制腳本動畫,狀態(tài)標記的改變通過客服端發(fā)送至服務器,服務器對收到的同一時間的各虛擬人物的狀態(tài)標記變更進行處理,得到對應的協(xié)作搬運動作,更新人物及被搬運物體的位置信息,服務器將所述人物及被搬運物體的位置信息通過客服端同步至各客戶端,客戶端通過從客服端同步得到的其它客戶端的對應虛擬人物的狀態(tài)標記,以及所述人物及被搬運物體的位置信息,在本客戶端進行三維場景協(xié)作搬運的顯示。
2.根據權利要求1所述的多客戶端聯(lián)網控制下三維場景協(xié)作搬運的實現(xiàn)方法,其特征是在步驟6)三維場景協(xié)作搬運的顯示過程中,被搬運物體和虛擬人物上設有對應的搬運節(jié)點,虛擬人物根據狀態(tài)標記進行動作,當虛擬人物的搬運節(jié)點與被搬運物體的搬運節(jié)點重合時,就位成功,綁定這兩個搬運節(jié)點;在單人搬運模式下,直接固定虛擬人物與被搬運物體的位置,再播放骨骼動畫實現(xiàn)虛擬人物的后續(xù)動作變化,被搬運物體隨虛擬人物的動作移動;在多人模式下,等待全部虛擬人物就位成功后,固定擬人物與被搬運物體的位置,再播放骨骼動畫實現(xiàn)虛擬人物的后續(xù)動作變化,被搬運物體隨虛擬人物的動作移動。
3.根據權利要求2所述的多客戶端聯(lián)網控制下三維場景協(xié)作搬運的實現(xiàn)方法,其特征是在多人搬運模式中,實時計算每個虛擬人物對被搬運物體產生的作用力,在三維場景協(xié)作搬運的顯示中進行對應表現(xiàn)。
4.根據權利要求1一 3任一項所述的多客戶端聯(lián)網控制下三維場景協(xié)作搬運的實現(xiàn)方法,其特征是客戶端與服務器及客服端的數(shù)據同步頻率在微秒級。
【文檔編號】G06T13/40GK103854300SQ201210523698
【公開日】2014年6月11日 申請日期:2012年12月7日 優(yōu)先權日:2012年12月7日
【發(fā)明者】顧曉峰, 馬駿, 吳強, 胡林寶, 陶安余, 李世倩, 王德海, 倪衛(wèi)良, 韓峰 申請人:江蘇省電力公司, 國家電網公司