




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、網(wǎng)游服務(wù)器端尋路網(wǎng)游服務(wù)器端尋路第一頁(yè),共30頁(yè)。尋路在游戲中是一個(gè)相對(duì)底層的模塊(m kui)NPC的AI系統(tǒng)依賴于一個(gè)可靠的尋路算法尋路模塊(m kui)依賴于游戲?qū)Φ貓D的描述尋路模塊(m kui)基本上是一種服務(wù)模塊(m kui),總是被調(diào)用,但是自己不需要主動(dòng)去做什么事情第1頁(yè)/共30頁(yè)第二頁(yè),共30頁(yè)。在游戲邏輯服務(wù)器內(nèi)實(shí)現(xiàn)一個(gè)A star算法,在邏輯地圖描述數(shù)據(jù)上(CELL)搜索。效率很低可能會(huì)阻塞主循環(huán)(xnhun)增加服務(wù)器復(fù)雜度第2頁(yè)/共30頁(yè)第三頁(yè),共30頁(yè)。Need for Speed!將性能提升100倍!在單位時(shí)間內(nèi)出更多的結(jié)果不能影響游戲邏輯的主循環(huán)更好的利用多核,甚
2、至多臺(tái)計(jì)算機(jī)的運(yùn)算能力如何在邏輯很復(fù)雜,數(shù)據(jù)結(jié)構(gòu)很復(fù)雜,為了提高效率而指針滿天飛的情況下,讓服務(wù)器跑穩(wěn)定?如何更方便的在游戲運(yùn)營(yíng)過程中逐步改進(jìn)巡邏(xnlu)模塊?第3頁(yè)/共30頁(yè)第四頁(yè),共30頁(yè)。 Cell結(jié)構(gòu)適合描述(mio sh)邏輯數(shù)據(jù):Trap, Obstacle 但是Cell的數(shù)量太大,直接用來A Star效率很低 在NPC大多數(shù)時(shí)候不需要跳躍、游泳、空中飛行的時(shí)候,可以是用NavMesh來描述(mio sh)尋路所需要的地圖障礙信息 NavMesh使用凸多邊形來描述(mio sh)可以移動(dòng)的區(qū)域,數(shù)量通常只有CELL的幾十分之一到數(shù)百分之一第4頁(yè)/共30頁(yè)第五頁(yè),共30頁(yè)。第5頁(yè)
3、/共30頁(yè)第六頁(yè),共30頁(yè)。第6頁(yè)/共30頁(yè)第七頁(yè),共30頁(yè)。為什么要獨(dú)立出去?不必?fù)?dān)心阻塞游戲服務(wù)器的主循環(huán)。不論是主服務(wù)器還是尋路模塊,都變得更簡(jiǎn)單一些。為什么是進(jìn)程而不是線程?尋路模塊使用自己的地圖描述數(shù)據(jù),和其他邏輯(lu j)模塊沒有太多需要共享的資源。更健壯。尋路模塊本身沒有狀態(tài),也沒有不能丟失的動(dòng)態(tài)數(shù)據(jù)。即使尋路模塊掛了,也不會(huì)影響游戲的主服務(wù)器。直接重啟就可以了。第7頁(yè)/共30頁(yè)第八頁(yè),共30頁(yè)。第8頁(yè)/共30頁(yè)第九頁(yè),共30頁(yè)。AI的行為會(huì)經(jīng)常周期性的調(diào)用尋路。附近有很多NPC,他們的坐標(biāo)很接近,尋路的計(jì)算是很相似(xin s),或者完全相同的。如果將尋路的計(jì)算結(jié)果緩存起來,
4、就可以減少重復(fù)運(yùn)算。第9頁(yè)/共30頁(yè)第十頁(yè),共30頁(yè)。第10頁(yè)/共30頁(yè)第十一頁(yè),共30頁(yè)。一份地圖的NavMesh數(shù)據(jù)需要加載到多個(gè)尋路服務(wù)進(jìn)程中,浪費(fèi)寶貴的內(nèi)存。每個(gè)尋路進(jìn)程單獨(dú)Cache尋路結(jié)果,使得尋路Cache中的數(shù)據(jù)重復(fù),命中次數(shù)下降。對(duì)于硬件需求過高。一般不可能(knng)做到每臺(tái)尋路服務(wù)器都在獨(dú)立的物理服務(wù)器上。第11頁(yè)/共30頁(yè)第十二頁(yè),共30頁(yè)。第12頁(yè)/共30頁(yè)第十三頁(yè),共30頁(yè)。在不考慮地形(dxng)(障礙)動(dòng)態(tài)變化的情況下,NavMesh的數(shù)據(jù)是靜態(tài)的。所有尋路進(jìn)程可以同時(shí)讀取共享數(shù)據(jù)。但是Cache是動(dòng)態(tài)刷新的。必須考慮進(jìn)程間的同步問題。第13頁(yè)/共30頁(yè)第十四頁(yè)
5、,共30頁(yè)。對(duì)Cache進(jìn)行加鎖尋路算法每搜索一塊區(qū)域時(shí)都要獲取鎖,然后判斷(pndun)Cache里是否有可以利用的數(shù)據(jù)。當(dāng)尋路出新的路徑時(shí)也要獲取鎖,并將計(jì)算結(jié)果寫入Cache中。尋路過程中總是在獲取鎖,等于單進(jìn)程跑。第14頁(yè)/共30頁(yè)第十五頁(yè),共30頁(yè)。尋路過程中可以明確區(qū)分讀寫兩個(gè)階段尋路過程中,獲取讀鎖來獲取Cache數(shù)據(jù)。尋路結(jié)束(jish)后,獲取寫鎖來更新Cache數(shù)據(jù)。多個(gè)進(jìn)程可以同時(shí)讀Cache,但是如果有進(jìn)程要寫Cache的話,所有進(jìn)程都要等。第15頁(yè)/共30頁(yè)第十六頁(yè),共30頁(yè)。為每個(gè)進(jìn)程增加一個(gè)本地的私有Cache。尋路進(jìn)程算出結(jié)果后只將尋路結(jié)果更新到本地的Cache
6、。而不是立刻去寫共享的Cache。等一段時(shí)間之后,進(jìn)程再一次性講本地Cache的內(nèi)容(nirng)提交到共享Cache。降低了進(jìn)程獲取共享Cache寫鎖的頻率,從而提高并發(fā)能力。第16頁(yè)/共30頁(yè)第十七頁(yè),共30頁(yè)。第17頁(yè)/共30頁(yè)第十八頁(yè),共30頁(yè)。 鎖的目的就是讓程序變得不并行。 鎖本身的代價(jià)很高,特別是進(jìn)程之間的鎖,往往需要(xyo)使用操作系統(tǒng)內(nèi)核對(duì)象來實(shí)現(xiàn),獲取和釋放的開銷通常在1000 CPU Tick左右。 鎖很不安全,只有有一初代碼沒有按規(guī)矩來獲取或者釋放鎖,整個(gè)系統(tǒng)都會(huì)出問題。第18頁(yè)/共30頁(yè)第十九頁(yè),共30頁(yè)。引入一個(gè)調(diào)度(diod)進(jìn)程。所有尋路進(jìn)程的任務(wù)由調(diào)度(di
7、od)進(jìn)程分配。所有尋路進(jìn)程完成尋路任務(wù)的時(shí)候向調(diào)度(diod)進(jìn)程匯報(bào)。調(diào)度(diod)進(jìn)程沒有分配任務(wù)的時(shí)候,尋路進(jìn)程不能訪問共享Cache(讀/寫都不行)。調(diào)度(diod)進(jìn)程可以在沒有進(jìn)程訪問共享Cache的時(shí)候向一個(gè)進(jìn)程分配更新共享Cache的任務(wù)。第19頁(yè)/共30頁(yè)第二十頁(yè),共30頁(yè)。第20頁(yè)/共30頁(yè)第二十一頁(yè),共30頁(yè)。 調(diào)度進(jìn)程會(huì)周期性的控制尋路進(jìn)程向共享Cache中更新數(shù)據(jù)。 再此之前,調(diào)度程序會(huì)保證(bozhng)所有的尋路進(jìn)程都是等待狀態(tài)。 再此期間,調(diào)度程序不會(huì)向任何尋路進(jìn)程發(fā)出新的尋路任務(wù)。第21頁(yè)/共30頁(yè)第二十二頁(yè),共30頁(yè)。調(diào)度本身做的事情很簡(jiǎn)單,開銷相對(duì)于尋
8、路算法而言可以忽略不計(jì)。由于每個(gè)尋路進(jìn)程有本地Cache,所以調(diào)度算法應(yīng)該將同一個(gè)地圖并且坐標(biāo)(zubio)相近的尋路任務(wù)盡量分配給同一個(gè)尋路進(jìn)程。調(diào)度控制尋路進(jìn)程將本地Cache提交到共享Cache的頻率會(huì)影響整個(gè)系統(tǒng)的效率。頻率太低的話,共享Cache中有效數(shù)據(jù)就少。頻率太高的話,不管用不用鎖寫操作是互斥的。第22頁(yè)/共30頁(yè)第二十三頁(yè),共30頁(yè)。如果調(diào)度器分配一個(gè)任務(wù)給尋路進(jìn)程,但是尋路進(jìn)程出錯(cuò),而一直(yzh)沒有給調(diào)度進(jìn)程發(fā)任務(wù)完成的消息。那么實(shí)際上,調(diào)度器內(nèi)部的狀態(tài)會(huì)“卡”住,而導(dǎo)致調(diào)度器不能發(fā)出更新共享Cache的指令。這個(gè)其實(shí)就和一個(gè)進(jìn)程獲取了鎖,而一直(yzh)沒有釋放這個(gè)鎖,是一樣的道理。第23頁(yè)/共30頁(yè)第二十四頁(yè),共30頁(yè)。第24頁(yè)/共30頁(yè)第二十五頁(yè),共30頁(yè)。第25頁(yè)/共30頁(yè)第二十六頁(yè),共30頁(yè)。允許一個(gè)模塊(m kui)可以有多份實(shí)例(進(jìn)程)。多個(gè)實(shí)例要求接口(協(xié)議)兼容,不需要二進(jìn)制匹配。調(diào)度器可識(shí)別不同模塊(m kui)和版本。一旦發(fā)現(xiàn)新版本就停止向舊模塊(m kui)分配任務(wù)。當(dāng)舊模塊(m kui)執(zhí)行完當(dāng)前的任務(wù)時(shí)可以卸載。第26頁(yè)/共30頁(yè)第二十七
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《觀滄海》詩(shī)詞賞析教案
- 茅屋為秋風(fēng)所破歌背景介紹及詩(shī)詞賞析
- 外架工程承包合同
- 童年趣事回首作文11篇
- 文化創(chuàng)意產(chǎn)業(yè)相關(guān)創(chuàng)意內(nèi)容統(tǒng)計(jì)表(文化產(chǎn)品)
- 環(huán)境污染隱患排查治理的基本理念與目標(biāo)
- 醫(yī)學(xué)遺傳學(xué)基因?qū)W模擬題
- 語(yǔ)言學(xué)英語(yǔ)語(yǔ)音與聽力試卷及答案解析
- 低空經(jīng)濟(jì)時(shí)代的企業(yè)轉(zhuǎn)型與創(chuàng)業(yè)機(jī)會(huì)
- 售樓服務(wù)合同協(xié)議書
- 性科學(xué)與生殖健康智慧樹知到答案章節(jié)測(cè)試2023年武漢科技大學(xué)
- 外墻GRC造型板施工方案
- 護(hù)理不良事件管理、上報(bào)制度及流程
- 預(yù)制板橋梁吊裝方案(完整版)
- GB/T 9254.1-2021信息技術(shù)設(shè)備、多媒體設(shè)備和接收機(jī)電磁兼容第1部分: 發(fā)射要求
- GB/T 40734-2021焊縫無損檢測(cè)相控陣超聲檢測(cè)驗(yàn)收等級(jí)
- GB/T 24821-2009餐桌餐椅
- GB/T 20230-2022磷化銦單晶
- 中考道德與法治復(fù)習(xí)要點(diǎn)+九年級(jí)中考道德與法治復(fù)習(xí)題
- 領(lǐng)導(dǎo)干部重大事項(xiàng)報(bào)告登記表
- 職業(yè)安全衛(wèi)生培訓(xùn)講義課件
評(píng)論
0/150
提交評(píng)論