目录

天龙八部技术分析报告

目录

天龙八部技术分析报告

http://hi.csdn.net/attachment/201005/7/0_1273240801H6oH.gif 刘洋

通过一段时间对天龙八部这款游戏进行分析研究,主要从客户端入手,从技术

角度学习天龙八部游戏中各种实现机制。最终写成此文,献给搜狐游戏,以表敬

意。

本文主要分为三个部分,分别是1 天龙八部基本技术实现技术分析,2 天龙八部

中使用的资源文件分析3 天龙八部中出现的问题及改进意见。

本报告实属本人分析总结,其中必定会有很多错漏之处,望给予指正。

一:天龙八部的基本实现技术:

所用图形引擎: Ogre

OGRE(Object-Oriented Graphics Rendering Engine,即:面向对象图形渲染引擎)

是一个用C++开发的面向场景、非常灵活的3D 引擎,它旨在让开发人员更容易、更

直接地利用硬件加速的3D 图形系统开发应用。这个类库隐藏了底层系统库(如:

Direct3D 和OpenGL)的所有细节,提供了一个基于世界对象和其他直观类的接口。

在研究使用ogre 之前,我一直在学习torque 引擎,并用它做出了一款mmorpg

游戏《盘古online》,但在考察其内部结构过程中发现其过于复杂且耦合性很高,

还有很多冗余代码。这使得项目在发布之后做进一步深入时遇到瓶颈,使得我不

得不暂时放置它,来寻求新的解决方案。在研究ogre 的过程中,我被他清晰的

结构所折服,更为他API 级别的调用接口和插件设计而高兴,这样的设计可以使

研究者在引擎学习过程中直接通过底层API 调用,并且在积累一定程度后可以通

过自己写插件来扩充引擎的功能。除此之外他还和cegui 界面库,ODE 物理库,

python、lua 脚本语言有方便的结合接口。这无疑是研究引擎和自主研发引擎的

一个很好的入手点,自主开发引擎一直是我一个理想,我慢慢努力,向这个目标

迈进。

所用物理引擎: 自主研发

我通过游戏中的观察,发现没有实现非常复杂的物理机制,碰撞是使用包围盒的

方式实现的。在bin 文件夹中寻找,没有找到所知的物理库的dll。故推测物理方

面是自主研发的。

所用网络层: 自主研发

据我所知中国拿ogre 做引擎的人很多,不过网络部分基本都是自己开发的,在

国外有Realm Crafter, Multiverse, Project Darkstar 比较好的网络引擎包,相信

在国内也有很多人在用吧。

使用的界面库: cegui

这是一套强大的界面库,里面包含了大量游戏中所需要的控件,并且可以自由定

制。可以使用辅助工具来图形化设计控件的属性,十分方便。最关键的cegui 是

完全免费的。

使用脚本语言: lua

Lua 是与python 齐名的脚本语言,最早了解他是因为他是著名游戏《博德之门》的

脚本语言,之后在游戏界影响最大的当属应用于WOW 中。之前用过一段时间python

语言,其以本身的易用性和大量扩展的库而闻名。Lua 和他有很明显的区别,他非常

小巧而且更加高效,他所需的库是直接依赖与宿主语言实现的。比如C/C++。这就决

定了他作为游戏脚本语言的先天优势,据我所知现在很多游戏公司在自己的引擎中使

用lua 语言。

二天龙八部中使用的资源文件分析

模型格式: .mesh

这是ogre 的标准格式,是二进制格式保存了模型网格的相关信息,如顶点坐标,

贴图坐标、顶点法线等。

骨骼格式: .skeleton

这是ogre 的标准骨骼动画文件,是二进制格式,保存了骨骼动画中关键帧信息。

贴图文件: .jpg、.tga、.dds 文件

不同格式的图片文件,其中 tga 和dds 拥有alpha 通道,dds 是可以硬件加速的

图形文件。

配置文件: .txt

普通文本文件

文件打包格式: .axp

这是天龙八部特有的文件打包格式。

天龙八部目录结构:

http://hi.csdn.net/attachment/201005/7/0_1273240724FZ7I.gif

Accounts:是记载在本机登录天龙时,登录服务器和用户等信息,根据不同的用

户建立不同的文件夹。

Bin: 天龙八部可执行的.exe 文件和众多需要引用的.dll 动态链接库。

DirectX9: 微软多媒体应用库,主要使用里面d3d 部分和dsound 的API 接口。

Helper: 保存了众多游戏里面应用到的帮助文件,以HTML 形式提供。

Patch: 升级补丁包的存放位置。

Lanch.exe 天龙八部游戏引导窗体。

Data: 游戏所使用所有资源的存放地,下面仔细分析其内部结构。

Data 包文件结构:

Data/sound.axp :天龙八部中使用的声效文件。

其中包括了众多的.wav 波形文件。这种文件与.midi 不用,他在播放时是需要耗

费系统资源的,他保存了原始的声音对应的数字波形信息,在播放时需要CPU

处理,将处理后的结果输送给声卡。MIDI 则可以直接交给声卡播放。

Data/brushes.axp: 保存了绘制场景地形所需的图片资源。分为Jpg 和tga 两

种。(比如说无量山的地表纹理贴图)

Data/config: 保存了各种角色的行为属性和事件任务,通过脚本定义实现。其

中包括每种怪物的ActionSet,各种事件event 定义(比如说师门任务)等。

Data/effect.axp: 保存了游戏中所有的技能和装备的效果文件,主要是定义粒

子相关的发射器,效果器等属性。(比如一个法杖在镶嵌了不同的宝石后会有什

么样的粒子效果)

Data/interface.axp: 保存了各种界面元素的配置文件,用以标识各种窗口、界

面的位置,大小等信息。主要以cegui 的配置文件.layout、xml 文件,lua 脚本文

件为主。

Data/LanchSkin.axp: 保存了登录引导界面的图片文件,比如背景图片文件,

按钮图片等。

Data/Material.axp: 保存了各种模型贴图和河流等部分环境场景贴图文件

以.dds 格式存储。

Data/model.axp: 保存了游戏中所用到的所有场景模型、角色模型的mesh 文

件,和skeleton 骨骼动画文件。

Data/scene.axp 中资源:为具体场景的地形资源,其中包括如下几类

  1. Esd : 记载着该场景声音信息的文本文件,具体格式如下:

ID 声音ID 声源位置X 声源位置Z 有效距离 连播次数 间隔时间(ms) 下

一次连播间隔时间(ms)

0 387 128 128 512

1 360 21 37 15

2 360 10 53 15

示例中只定义了声音的ID,生源位置的X 和Z 坐标和听到声音的有效距离。

  1. Gridinfo : 地形网格的属性

  2. heightmap : 地形高度图,用于生成地形网格高度

  3. lightmap : 地形光照贴图,用于生成地形阴影。

  4. path : 记载地图中的路径信息(可能是怪物的路径点集合)

  5. rangion :文件属性未知

  6. scene :保存场景中enviroment、light、StaticEntity、Model 等实例的信息。

用XML 格式保存。

示例:

7.Terrain:保存地形网格的贴图信息,包括高度图信息,光照贴图信息,网格信

息,所用到的贴图列表索引,

地形信息,名字、每块地形大小,相应x,z方向的块数。

地形的缩放倍数

地形的中心点位置

高度图

地形网格模型信息

光照贴图

<pixmap bottom=“0.2480469” left=“0.00390625” right=“0.4960938”

textureId=“0” top=“0.001953125”/>

每块贴图对应的绘制面积

地形层次的材质信息