




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 天龍八部技術(shù)分析報告劉洋 通過一段時間對天龍八部這款游戲進(jìn)行分析研究,主要從客戶端入手,從技術(shù)角度學(xué)習(xí)天龍八部游戲中各種實現(xiàn)機制。最終寫成此文,獻(xiàn)給搜狐游戲,以表敬意。 本文主要分為三個部分,分別是 1 天龍八部基本技術(shù)實現(xiàn)技術(shù)分析,2 天龍八部中使用的資源文件分析 3 天龍八部中出現(xiàn)的問題及改進(jìn)意見。 本報告實屬本人分析總結(jié),其中必定會有很多錯漏之處,望給予指正。一:天龍八部的基本實現(xiàn)技術(shù): 所用圖形引擎: OgreOGRE(Object-Oriented Graphics Rendering Engine,即:面向?qū)ο髨D形渲染引擎) 是一個用 C+開發(fā)的面向場景、非常靈活的 3D 引擎,
2、它旨在讓開發(fā)人員更容易、更直接地利用硬件加速的 3D 圖形系統(tǒng)開發(fā)應(yīng)用。這個類庫隱藏了底層系統(tǒng)庫(如: Direct3D 和 OpenGL)的所有細(xì)節(jié),提供了一個基于世界對象和其他直觀類的接口。 在研究使用 ogre 之前,我一直在學(xué)習(xí) torque 引擎,并用它做出了一款 mmorpg游戲 online,但在考察其內(nèi)部結(jié)構(gòu)過程中發(fā)現(xiàn)其過于復(fù)雜且耦合性很高, 還有很多冗余代碼。這使得項目在發(fā)布之后做進(jìn)一步深入時遇到瓶頸,使得我不得不暫時放置它,來尋求新的解決方案。在研究 ogre 的過程中,我被他清晰的結(jié)構(gòu)所折服,更為他 API 級別的調(diào)用接口和插件設(shè)計而高興,這樣的設(shè)計可以使研究者在引擎學(xué)習(xí)
3、過程中直接通過底層 API 調(diào)用,并且在積累一定程度后可以通過自己寫插件來擴充引擎的功能。除此之外他還和 cegui 界面庫,ODE 物理庫, python、lua 腳本語言有方便的結(jié)合接口。這無疑是研究引擎和自主研發(fā)引擎的一個很好的入手點,自主開發(fā)引擎一直是我一個理想,我慢慢努力,向這個目標(biāo)邁進(jìn)。 所用物理引擎: 自主研發(fā) 我通過游戲中的觀察,發(fā)現(xiàn)沒有實現(xiàn)非常復(fù)雜的物理機制,碰撞是使用包圍盒的方式實現(xiàn)的。在 bin 文件夾中尋找,沒有找到所知的物理庫的 dll。故推測物理方面是自主研發(fā)的。 所用網(wǎng)絡(luò)層:自主研發(fā)據(jù)我所知中國拿 ogre 做引擎的人很多,不過網(wǎng)絡(luò)部分基本都是自己開發(fā)的,在國外有
4、 Realm Crafter, Multiverse, Project Darkstar 比較好的網(wǎng)絡(luò)引擎包,相信在國內(nèi)也有很多人在用吧。 使用的界面庫: cegui這是一套強大的界面庫,里面包含了大量游戲中所需要的控件,并且可以自由定制。可以使用輔助工具來圖形化設(shè)計控件的屬性,十分方便。最關(guān)鍵的 cegui 是完全免費的。 使用腳本語言: lua Lua 是與 python 齊名的腳本語言,最早了解他是因為他是著名游戲博德的腳本語言,之后在游戲界影響最大的當(dāng)屬應(yīng)用于 WOW 中。之前用過一段時間 python 語言, 其以本身的易用性和大量擴展的庫而聞名。Lua 和他有很明顯的區(qū)別,他非常小
5、巧而且更加高效,他所需的庫是直接依賴與宿主語言實現(xiàn)的。比如 C/C+。這就決定了他作為游戲腳本語言的先天優(yōu)勢,據(jù)我所知現(xiàn)在很多游戲公司在自己的引擎中使 用 lua 語言。 二天龍八部中使用的資源文件分析模型格式:.mesh這是 ogre 的標(biāo)準(zhǔn)格式,是二進(jìn)制格式保存了模型網(wǎng)格的相關(guān)信息,如頂點坐標(biāo), 貼圖坐標(biāo)、頂點法線等。 骨骼格式:.skeleton這是 ogre 的標(biāo)準(zhǔn)骨骼動畫文件,是二進(jìn)制格式,保存了骨骼動畫中關(guān)鍵幀信息。 貼圖文件:.jpg、.tga、.dds 文件不同格式的圖片文件,其中 tga 和 dds 擁有 alpha 通道,dds 是可以硬件加速的圖形文件。 配置文件: 普通
6、文本文件.txt文件打包格式: .axp這是天龍八部特有的文件打包格式。天龍八部目錄結(jié)構(gòu):Accounts:是記載在本機登錄天龍時,登錄服務(wù)器和用戶等信息,根據(jù)不同的用戶建立不同的文件夾。 天龍八部可執(zhí)行的.exe 文件和眾多需要引用的.dll 動態(tài)鏈接庫。Bin:DirectX9:微軟多媒體應(yīng)用庫,主要使用里面 d3d 部分和dsound 的 API 接口。Helper: 保存了眾多游戲里面應(yīng)用到的幫助文件,以 HTML 形式提供。 升級補丁包的存放位置。Patch:Lanch.exe天龍八部游戲引導(dǎo)窗體。游戲所使用所有資源的存放地,下面仔細(xì)分析其內(nèi)部結(jié)構(gòu)。Data:Data 包文件結(jié)構(gòu):D
7、ata/sound.axp :天龍八部中使用的聲效文件。 其中包括了眾多的.wav 波形文件。這種文件與.midi 不用,他在播放時是需要耗 費系統(tǒng)資源的,他保存了原始的聲音對應(yīng)的數(shù)字波形信息,在播放時需要 CPU 處理,將處理后的結(jié)果輸送給聲卡。MIDI 則可以直接交給聲卡播放。 Data/brushes.axp: 保存了繪制場景地形所需的圖片資源。分為 Jpg 和 tga 兩 種。(比如說無量山的地表紋理貼圖) Data/config: 保存了各種角色的行為屬性和任務(wù),通過腳本定義實現(xiàn)。其中包括每種怪物的 ActionSet,各種 event 定義(比如說師門任務(wù))等。 Data/effe
8、ct.axp: 保存了游戲中所有的技能和裝備的效果文件,主要是定義粒 子相關(guān)的發(fā)射器,效果器等屬性。(比如一個法杖在鑲嵌了不同的寶石后會有什么樣的粒子效果) Data/interface.axp: 保存了各種界面元素的配置文件,用以標(biāo)識各種窗口、界 面的位置,大小等信息。主要以 cegui 的配置文件.layout、xml 文件,lua 腳本文件為主。 Data/LanchSkin.axp: 保存了登錄引導(dǎo)界面的圖片文件,比如背景圖片文件, 按鈕圖片等。 Data/Material.axp: 保存了各種模型貼圖和河流等部分環(huán)境場景貼圖文件 以.dds 格式存儲。 Data/model.axp:
9、 保存了游戲中所用到的所有場景模型、角色模型的 mesh 文件,和 skeleton 骨骼動畫文件。 Data/scene.axp 中資源:為具體場景的地形資源,其中包括如下幾類1. Esd : 記載著該場景聲音信息的文本文件,具體格式如下: 連播次數(shù)下ID聲音 ID 聲源位置 X 聲源位置 Z 有效距離一次連播間隔時間(ms)間隔時間(ms)012387 128 128 512360 21 37 15360 10 53 15示例中只定義了聲音的 ID,生源位置的 X 和 Z 坐標(biāo)和聽到聲音的有效距離。2. Gridinfo : 地形網(wǎng)格的屬性 heightmap : 地形高度圖,用于生成地形
10、網(wǎng)格高度 3.4. lightmap : 地形光照貼圖,用于生成地形陰影。 path : 記載地圖中的路徑信息(可能是怪物的路徑點集合)5.6. rangion :文件屬性未知 7.scene :保存場景中 enviroment、light、StaticEntity、Model 等實例的信息。用 XML 格式保存。 示例: PropertyPropertyPropertyPropertyProperty name=ambient value=0.078431 0.058824 0.133333/ name=fog.mode value=linear/ name=fog.colour value
11、=0.070588 0.439216 0.737255/ name=fog.linear start value=2500/ name=fog.linear end value=6000/ 7.Terrain:保存地形網(wǎng)格的貼圖信息,包括高度圖信息,光照貼圖信息,網(wǎng)格信 息,所用到的貼圖列表索引, 地形信息,名字、每塊地形大小,相應(yīng)x,z方向的塊數(shù)。 地形的縮放倍數(shù) 地形的中心點位置 高度圖 地形網(wǎng)格模型信息 光照貼圖 每塊貼圖對應(yīng)的繪制面積 地形層次的材質(zhì)信息 8. WCollision:可能是場景中會發(fā)生碰撞的位置標(biāo)記。(如果這樣就像 2D 游戲中的碰撞實現(xiàn)了)。 三 天龍八部中出現(xiàn)的問題
12、及改進(jìn)意見1 場景管理:出現(xiàn)現(xiàn)象:天龍八部使用ogre 的八叉樹室外場景管理技術(shù),地形通過LOD 提高效率。沒有提供室內(nèi)場景的管理方式,所以在很多應(yīng)該在室內(nèi)處理的場景沒有實現(xiàn),例如:多連通房間內(nèi)部的場景。 的場景、大型原因分析:ogre 提供了強大的室外場景管理,但對于室內(nèi)場景則是使用 quake3 的地形文件, 通過BSP、portal 技術(shù)實現(xiàn)的管理,眾所周知這是卡馬克在 quake 中使用的管理場景的技術(shù), 由于使用的年代過早,現(xiàn)在已經(jīng)比較少在商業(yè)引擎中所使用,再者這種格式已經(jīng)被很多人所 了解,如果加密不當(dāng),存在安全隱患。 改進(jìn)方案:結(jié)合現(xiàn)有資料,重新寫一個室內(nèi)地形的管理方法,使用 BS
13、P、portal 技術(shù)實現(xiàn)的 管理是現(xiàn)在成熟可行的選擇。 2 場景剔除:(NPC 門衛(wèi)人物裁切前)(NPC 門衛(wèi)人物裁切后) 出現(xiàn)現(xiàn)象:天龍八部中使用的第三人稱攝像機大體是從上向下 3060俯視人物角色,這樣做的好處就是能看到的區(qū)域即時把視角拉到 60也是很小的。這樣場景中出現(xiàn)的角色就會大大減少,通過裁剪技術(shù)提高效率。天龍也正是這樣做的,他把距離裁剪定的很近,稍微遠(yuǎn)一點的角色就直接被裁減掉,當(dāng)視角在 60左右比較明顯,角色走遠(yuǎn),但在未消失在視 距以外時突然消失。 原因分析:網(wǎng)絡(luò)游戲要求游戲幀數(shù)在 30 以上,最好是保持在 60 左右,這就對游戲?qū)崿F(xiàn)的效率提出了高要求。而現(xiàn)在的游戲,占游戲循環(huán)時
14、間最多的就是渲染,怎么讓一楨渲染更少的三角片,是人們一直追尋的方向??梢娞忑堅谶@個方向走的很遠(yuǎn)。但就游戲性來說,從一個玩家的角度,來使用這樣的視野是很不習(xí)慣的。玩慣 3D 游戲的玩家,喜歡五方向軸的攝像 機,可以觀察天空,云彩,地面。因此感覺真實。而天龍攝像機的設(shè)定就無法滿足要求。 改進(jìn)方案:根據(jù)現(xiàn)在的設(shè)定,若要改變攝像機為標(biāo)準(zhǔn) 3D 攝像機,還要在裁剪、霧效等多個 方面修正,得不償失。要剔除角色突然消失現(xiàn)象,只要適當(dāng)增加一些裁剪范圍。 3 霧效: 出現(xiàn)現(xiàn)象:天龍八部中的霧效比較不真實,在一些山地場景中,使用的霧效效果不理想,只使用了一層藍(lán)紫色的霧,看起來很不舒服。 原因分析:天龍八部的霧效處
15、理使用的是 ogre 自帶的方法,提供 FOG_LINEAR、FOG_EXP1、FOG_EXP2 霧。這是一些比較簡單的霧效,但在游戲中應(yīng)用比較廣泛,要實現(xiàn)好這種霧效,需要美術(shù)人員的協(xié)助,調(diào)整一個好一些的數(shù)值。 改進(jìn)方法:重新調(diào)整霧效的參數(shù)使得其更加合理美觀,除此之外,我們可以使用體積霧效實 現(xiàn)更加真實的效果。 4 碰撞: 出現(xiàn)現(xiàn)象:天龍八部中在碰撞中處理不是很好,在很多地方出現(xiàn)角色與建筑物穿插的現(xiàn)象。特別是當(dāng)人物在騎乘狀態(tài),比如玩家騎乘 20 級的陸行雕時,雕的翅膀就會穿插到建筑物里面。 原因分析:天龍八部里面的人物和建筑物等的碰撞是使用包圍盒(推測)實現(xiàn)的。平時人物 正常行走時,人物和建筑
16、物的碰撞是比較正常的。當(dāng)人物騎乘了寵物,這時體積變大,但人物的碰撞盒還是原來的大小,只有中間的一塊,于是造成大量的穿插現(xiàn)象。 改進(jìn)方法:可以根據(jù)人物騎乘的寵物適當(dāng)增加碰撞盒的大小,但不宜增加太多,否則可能出現(xiàn),在比較狹小的地方人進(jìn)的去,但是若進(jìn)去后騎寵,則卡住的現(xiàn)象。要在合理性與實現(xiàn)性中尋求一個平衡點。 5 跟隨: 出現(xiàn)現(xiàn)象:寵物或是跟隨的隊員,在速度達(dá)不到隊長,被拉下一定距離時會出現(xiàn)瞬移現(xiàn)象。從游戲性上來說,小型寵物的瞬移是不易被覺察的。但大型寵物和人物的瞬移在視覺上會給予游戲者造成一定影響。 原因分析:天龍八部中,邏輯程序員在跟隨模塊的實現(xiàn)時,設(shè)定了類似的實現(xiàn)機制,跟隨狀態(tài)時當(dāng)跟隨者和被跟
17、隨者超過一定距離,跟隨者的位置坐標(biāo)就設(shè)置成與被跟隨者位置坐標(biāo)成一條線稍后的位置。 改進(jìn)方法: 方法一:在一些游戲中有如下設(shè)置,當(dāng)距離超過一定時,跟隨者的速度就會加快到一定程度, 比如說被跟隨者的 150/100,之后在短時間內(nèi)跟上后者,之后再把速度降下來。(劍俠情緣 2)方法二:直接把跟隨者的速度設(shè)為被跟隨者的速度,這樣就不會有拖后的效果。 6 攝像機對近物處理 出現(xiàn)現(xiàn)象:攝像機跟隨人物移動的過程中,對于非地形網(wǎng)格遮擋會出現(xiàn)影響視線,與 Entity 距離過近,出現(xiàn)瑕疵。例如場景“劍閣”中的樹木,當(dāng)攝像機不斷逼近時,沒有進(jìn)行任何處理,直到被攝像機近平面裁切。 原因分析:對于場景中的可渲染實例,
18、沒有針對攝像機的裁剪做適當(dāng)處理。改進(jìn)方法:在攝像機靠近到一定程度將樹木 ALPHA 掉,為了實現(xiàn)簡單可以做半透明處理, 物體碰撞盒距離攝像機小于一定距離就將其設(shè)為 30/100 透明。這樣即時被近平面裁切掉也不會影響很大。 7 攝像機抖動: 出現(xiàn)現(xiàn)象:攝像機沿著高處地形表面移動時,出現(xiàn)抖動現(xiàn)象。原因分析:出現(xiàn)抖動的前提條件是,攝像機的原有位置已經(jīng)被地形網(wǎng)格所遮擋,為了避免遮 擋玩家視線。把攝像機的位置抬高,天龍八部中設(shè)定的是使得攝像機的位置抬高到,當(dāng)前地形網(wǎng)格的位置在加一個y 方向的分量。我們知道,地形網(wǎng)格的高度是通過高度圖生成的,將高度圖保存在一個二維數(shù)組中,數(shù)組的下標(biāo)分別表示 x,z 坐標(biāo)
19、,數(shù)組的值是高度 y 值。由于高度圖是像素圖,在高度位置相鄰的點與點之間存在高度差異。如果直接把攝像機的 y 值設(shè)定為地形網(wǎng)格數(shù)組中離他最近點的y 值加上一個分量的話。必然導(dǎo)致攝像機在移動時的高度跳變。 解決方法:根據(jù)攝像機的位置,對相鄰高度數(shù)組中的高度進(jìn)行插值計算,得到的高度結(jié)果在 累加一個高度分量作為攝像機的位置。以達(dá)到平滑過度的目的。 8 AI 尋路算法 出現(xiàn)現(xiàn)象:npc 尋路算法中,有些地方會出現(xiàn)卡住現(xiàn)象。特別的,在出現(xiàn)有懸崖等大型地形隔絕的兩塊相鄰地域,尋路算出現(xiàn)嚴(yán)重問題,例如我在懸崖上的地域點擊地圖上懸崖下的地域,會發(fā)現(xiàn)人物自動尋路到懸崖邊上就停在了那里。 原因分析:天龍八部程序員
20、在實現(xiàn)尋路算法時(可能是 A*的增強版算法)在這種情況下, 實現(xiàn)的代碼有瑕疵??赡苣承已律系狞c沒有被設(shè)定為遮擋塊,被算法誤認(rèn)為可以通行。 解決方法:如果是上述原因,將這張地圖中懸崖的這些點重新設(shè)定為遮擋塊。 9 攻擊時掛接 (攻擊前)(攻擊中) 消失,在攻擊之后,出現(xiàn)現(xiàn)象:峨嵋派角色在攻擊時得十分奇怪。 又重新出現(xiàn)在手中,讓玩家覺原因分析:這可能是考慮到峨眉派角色是屬于遠(yuǎn)程法術(shù)性角色,在攻擊動畫進(jìn)行過程中如果加入了,隨著手部的骨骼運動,可能會出現(xiàn)穿插效果。即時能夠避免穿插效果,在釋放法術(shù)時也很不美觀。 解決方法:除了美工修改動畫以使得佩戴攻擊也合理的方法外,可以在攻擊時將佩戴的 綁在背后的骨
21、骼點上,這樣既不會穿幫,又比較合理。 10 無限大紋理拼接 出現(xiàn)現(xiàn)象:地形貼圖的裂縫問題,在天龍八部的場景貼圖時,會發(fā)現(xiàn)場景的地形貼圖一塊與一塊的拼接處會出現(xiàn)裂縫(紋理拼接不上),使得攝像機拉近后看起來會比較假。 原因分析:美工在制作地形無縫貼圖時不是做的特別好,左邊與右邊,上邊與下邊貼圖連接不上。 解決方法:改進(jìn)地形貼圖的制作,可以在 PS 中使用位移,這樣就會暴露出瑕疵的位置,在 處理完成后在位移回去。 11 服務(wù)器對于玩家信息的同步 出現(xiàn)現(xiàn)象:組隊中隊員血條刷新過慢,在平時這樣影響不大,但是到了BOSS 戰(zhàn)中,峨眉專 注于給其他職業(yè)加血。如果血條刷新過慢,很可能造成加血不即時,導(dǎo)致團(tuán)撲。
22、 原因分析:網(wǎng)絡(luò)傳輸在隊員之間信息傳遞的延遲問題,但在服務(wù)器延遲較小的情況下,這種 延遲應(yīng)該不會這么明顯??赡苁窃谶壿嫶a上,有一些問題。比如每隔一段時間服務(wù)器才將各個隊員的信息發(fā)送給隊伍中的其他人,如果這個時間過長,就會造成上述影響,這段時間 過短就會過分加重服務(wù)器負(fù)擔(dān)。 解決方法:適當(dāng)縮短服務(wù)器對于玩家信息的同步時間,使得在游戲中血條刷新速度提高。12 水下處理 出現(xiàn)現(xiàn)象:在一些場景中,玩家角色可以進(jìn)入水中,但達(dá)到一定深度后應(yīng)該改變?yōu)橛斡緺顟B(tài), 而天龍設(shè)定中角色在水中沒有游泳動畫,如果角色帶有寵物,會出現(xiàn)小型寵物長期泡在水里面的現(xiàn)象。 原因分析:沒有試圖實現(xiàn)水下效果,于是沒有制作游泳的設(shè)定。解決方法:可以嘗試制作水下模塊,增加游戲玩法。對于現(xiàn)有模式,可以限制玩家行動范圍, 來避免玩家入水過深。 13 陰影體對非地形模型影響
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)文學(xué)出海文化差異適應(yīng)策略優(yōu)化報告:2025年跨文化傳播策略研究
- 互聯(lián)網(wǎng)醫(yī)療平臺2025年在線問診服務(wù)與患者健康生活方式改善報告
- 2025年特種用途鋼絲及鋼絲繩項目提案報告
- 2025年農(nóng)業(yè)面源污染治理技術(shù)政策創(chuàng)新與實施效果評估報告
- 虛擬現(xiàn)實醫(yī)療培訓(xùn)2025年市場潛力與競爭格局分析報告
- 2025年脂環(huán)烴項目申請報告模范
- 2025年醫(yī)療器械國產(chǎn)化政策導(dǎo)向下的產(chǎn)業(yè)鏈協(xié)同與發(fā)展策略報告
- 2025年烏洛托品項目申請報告模板
- 2025年射頻同軸連接器項目規(guī)劃申請報告模板
- 2025年裝在進(jìn)口飛機上的國產(chǎn)零備件和材料項目立項申請報告
- JJF(陜) 035-2020 雨滴譜式降水現(xiàn)象儀現(xiàn)場校準(zhǔn)規(guī)范
- 科研倫理與學(xué)術(shù)規(guī)范(研究生)期末試題
- 2024年網(wǎng)格員考試題庫完美版
- 出入境交通運輸工具檢查課件
- 2024年廣東省安全員C證(專職安全生產(chǎn)管理人員)考試試題題庫
- 防雨雪冰凍應(yīng)急演練
- GB/T 44536-2024CVD陶瓷涂層熱膨脹系數(shù)和殘余應(yīng)力試驗方法
- 大疆在線測評題
- DB3402T 19-2021 汽車后市場 美容養(yǎng)護(hù)服務(wù)規(guī)范
- 化工公司安全知識競賽題庫(共1000題)
- DLT 572-2021 電力變壓器運行規(guī)程
評論
0/150
提交評論