版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、網(wǎng)游服務(wù)器端尋路網(wǎng)游服務(wù)器端尋路第一頁,共30頁。尋路在游戲中是一個(gè)相對(duì)底層的模塊(m kui)NPC的AI系統(tǒng)依賴于一個(gè)可靠的尋路算法尋路模塊(m kui)依賴于游戲?qū)Φ貓D的描述尋路模塊(m kui)基本上是一種服務(wù)模塊(m kui),總是被調(diào)用,但是自己不需要主動(dòng)去做什么事情第1頁/共30頁第二頁,共30頁。在游戲邏輯服務(wù)器內(nèi)實(shí)現(xiàn)一個(gè)A star算法,在邏輯地圖描述數(shù)據(jù)上(CELL)搜索。效率很低可能會(huì)阻塞主循環(huán)(xnhun)增加服務(wù)器復(fù)雜度第2頁/共30頁第三頁,共30頁。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)營過程中逐步改進(jìn)巡邏(xnlu)模塊?第3頁/共30頁第四頁,共30頁。 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頁/共30頁第五頁,共30頁。第5頁
3、/共30頁第六頁,共30頁。第6頁/共30頁第七頁,共30頁。為什么要獨(dú)立出去?不必?fù)?dān)心阻塞游戲服務(wù)器的主循環(huán)。不論是主服務(wù)器還是尋路模塊,都變得更簡單一些。為什么是進(jìn)程而不是線程?尋路模塊使用自己的地圖描述數(shù)據(jù),和其他邏輯(lu j)模塊沒有太多需要共享的資源。更健壯。尋路模塊本身沒有狀態(tài),也沒有不能丟失的動(dòng)態(tài)數(shù)據(jù)。即使尋路模塊掛了,也不會(huì)影響游戲的主服務(wù)器。直接重啟就可以了。第7頁/共30頁第八頁,共30頁。第8頁/共30頁第九頁,共30頁。AI的行為會(huì)經(jīng)常周期性的調(diào)用尋路。附近有很多NPC,他們的坐標(biāo)很接近,尋路的計(jì)算是很相似(xin s),或者完全相同的。如果將尋路的計(jì)算結(jié)果緩存起來,
4、就可以減少重復(fù)運(yùn)算。第9頁/共30頁第十頁,共30頁。第10頁/共30頁第十一頁,共30頁。一份地圖的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頁/共30頁第十二頁,共30頁。第12頁/共30頁第十三頁,共30頁。在不考慮地形(dxng)(障礙)動(dòng)態(tài)變化的情況下,NavMesh的數(shù)據(jù)是靜態(tài)的。所有尋路進(jìn)程可以同時(shí)讀取共享數(shù)據(jù)。但是Cache是動(dòng)態(tài)刷新的。必須考慮進(jìn)程間的同步問題。第13頁/共30頁第十四頁
5、,共30頁。對(duì)Cache進(jìn)行加鎖尋路算法每搜索一塊區(qū)域時(shí)都要獲取鎖,然后判斷(pndun)Cache里是否有可以利用的數(shù)據(jù)。當(dāng)尋路出新的路徑時(shí)也要獲取鎖,并將計(jì)算結(jié)果寫入Cache中。尋路過程中總是在獲取鎖,等于單進(jìn)程跑。第14頁/共30頁第十五頁,共30頁。尋路過程中可以明確區(qū)分讀寫兩個(gè)階段尋路過程中,獲取讀鎖來獲取Cache數(shù)據(jù)。尋路結(jié)束(jish)后,獲取寫鎖來更新Cache數(shù)據(jù)。多個(gè)進(jìn)程可以同時(shí)讀Cache,但是如果有進(jìn)程要寫Cache的話,所有進(jìn)程都要等。第15頁/共30頁第十六頁,共30頁。為每個(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頁/共30頁第十七頁,共30頁。第17頁/共30頁第十八頁,共30頁。 鎖的目的就是讓程序變得不并行。 鎖本身的代價(jià)很高,特別是進(jìn)程之間的鎖,往往需要(xyo)使用操作系統(tǒng)內(nèi)核對(duì)象來實(shí)現(xiàn),獲取和釋放的開銷通常在1000 CPU Tick左右。 鎖很不安全,只有有一初代碼沒有按規(guī)矩來獲取或者釋放鎖,整個(gè)系統(tǒng)都會(huì)出問題。第18頁/共30頁第十九頁,共30頁。引入一個(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頁/共30頁第二十頁,共30頁。第20頁/共30頁第二十一頁,共30頁。 調(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頁/共30頁第二十二頁,共30頁。調(diào)度本身做的事情很簡單,開銷相對(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頁/共30頁第二十三頁,共30頁。如果調(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頁/共30頁第二十四頁,共30頁。第24頁/共30頁第二十五頁,共30頁。第25頁/共30頁第二十六頁,共30頁。允許一個(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頁/共30頁第二十七
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 玻璃酒杯項(xiàng)目可行性研究報(bào)告
- 苯胺項(xiàng)目可行性研究報(bào)告-20241226-080459
- 2025開店合作合同范文
- 2025論借款合同貼花范文
- 2025購銷合同軟件
- 2025農(nóng)村田地出租合同范文
- 突緣第二軸課程設(shè)計(jì)
- 大型音樂會(huì)舞臺(tái)吊裝租賃協(xié)議
- 工業(yè)園區(qū)化糞池新建項(xiàng)目合同
- 鐵路維修合同管理細(xì)則
- 班會(huì)課件 勿以惡小而為之勿以善小而不為
- 中醫(yī)針灸治療中風(fēng)后語言障礙病例分析專題報(bào)告
- 醫(yī)院消毒供應(yīng)中心清洗、消毒、滅菌質(zhì)控評(píng)分表
- 2022年學(xué)校寒假德育特色作業(yè)實(shí)踐方案(詳細(xì)版)
- 可愛卡通插畫風(fēng)讀書分享通用PPT模板
- 小學(xué)數(shù)學(xué)西南師大四年級(jí)上冊五相交與平行《相交》課堂設(shè)計(jì)
- 光伏發(fā)電項(xiàng)目試驗(yàn)計(jì)劃
- 圖書館工作流程(新)
- 1:青巖古鎮(zhèn)發(fā)展及規(guī)劃
- 小學(xué)語文一年級(jí)上冊看圖寫話練習(xí)(無答案)
- 村務(wù)監(jiān)督委員會(huì)履職情況報(bào)告三篇
評(píng)論
0/150
提交評(píng)論