分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

刚研究出的天龙八部的地形高度和GridInfo,正确的载入了高度图和地表信息,可以看出场景的大致样子了:)
第一张图是我自己载入的 明教的光明殿地形,第二张是天龙八部游戏中的场景,可以看出差距啊:)

经过分析天龙八部场景的实现方式,我用了跟天龙八部实现方式完全相同的做法,载入了HeightMap和GridInfo文件,并且可以解析多个版本的GridInfo结构。
以下是使用Ogre渲染出来的天龙八部的地形:
这是明教光明殿

这张是天龙寺

这张是无量山

场景里没有放入mesh,所以不大容易看出来 ,不过载入mesh就简单了,我将尽快放出新版本截图!



TerrainLiquid是用来做湖水,海水,熔岩之类效果的。最多有两层,一层放贴图动画,另一层作alpah值。
天龙八部TerrainLiquid的实现实在有点那个-3-





对Model的支持只是最简单的载入mesh,还没有加入动画:)

WCollision是天龙八部游戏中用来实现“碰撞”的。下图粉红色区域即为WCollision信息

桥的下面是熔浆,不允许行走的,但是可以从桥上通过,而天龙里不是根据桥这个mesh,来实时检测玩家所应该处的高度,而是通过WCollision里所记录的信息来判断的。
这一点很容易验证,我们把.scene文件里所有的mesh删掉,玩家依然站在了正确的高度,如下图所示

如果把WCollision文件删掉,玩家就会站到熔浆里了:)
因为地表法线算的有问题,一直没察觉,所以灯光这部分绕了点弯路,呵呵!现在场景可漂亮多了:)

这是明教光明殿,灯光比较多

因为还没有加入lightmap所以跟天龙八部游戏本身的效果,还是有点差别:)

lightmap(光照图)其实是很简单的,加一层UV就可以了,不过由于图片太大,不提高贴图的采样率就会变的很模糊,但是提高采样率就会大大降低效率-3-,天龙八部的设置bin/System.cfg里View_LightmapQuality估计就是做这个用的。但是阴影嘛,模糊就模糊没什么关系:)

还是光明殿

大理

婚礼场景

.Frame文件是配合.Model文件一起使用,来实现场景节点动画的(NodeAnimationTrack)。比如鸟儿的飞行轨迹,鱼群的活动路线,随风摇曳的灯笼等等。

是否分析天龙八部的Frame文件格式,我酝酿了两三天,因为推测该文件是3DSMAX或Maya的导出插件导出的(后面会给出推测的理由),其格式应该是公开的,但是Google了数次未果,只好手动分析了。

Frame文件开头部分有明显的[Serializer_v1.10]标记,显然是使用Ogre的Serializer类保存的,且存在很多重复的模型,比如天龙寺的铃铛,完全可以使用1个mesh就可以了,但是资源里共有4个mesh,分别命名为铃铛1,铃铛2,铃铛3,铃铛4,大理派主殿就更多了,有十几个铃铛。-3- 其实所有的铃铛,样子都一样,只是相对于中心点(0,0,0点)的偏移不同。这就证明了上面的推测,如果不是直接从MAX或Maya导出的Frame动画,而是自己做一个编辑器来制作动画。那么使用1个放在0,0,0点的铃铛就够了。而且Frame文件中保存的帧的信息不可以直接使用,还是要经过计算-3-,计算的方法完全是为了将就多个不同偏移的mesh。

这个插件估计跟OFusion类似,应该提供两种版本的Frame文件,一种是xml文本结构的,一种是Serializer二进制结构的。(纯属猜测)

下面是截图(动画用截图不好表现啊- -)
天龙寺的铃铛

飞翔的小鸟

遨游的鱼群

TerrainLiquid加入法线可以说是最简单的了,所有法线一律平行y轴,连算都不用算。现在水面看起来跟游戏里一个德行了-3-

天龙八部的粒子特效做得非常漂亮,漂亮的背后一定有着复杂的实现:),以下是我总结的天龙对Ogre粒子系统的改动内容:

添加发射器1个
PolarEmitter

添加影响器6个
ColourFading
MeshAnimationAffector
MeshRotator
Movement
Revolution
ScaleInterpolator

添加的Renderer 2个
mesh
texcoord_billboard

因为我要实现场景中所使用的粒子效果,对于其它的,比如技能里所使用的粒子则暂时不予考虑。
所以对273个场景文件所使用粒子做了统计如下:

粒子名,使用个数
a_y_dali_05, 1
baofu, 18
caihong, 16
cangying, 11
chuansongdian_01, 1
chuansongdian_03, 11
chuansongdian_04, 10
chuansongdian_05, 1
chuansongmen_03, 14
cj_ba01_big, 10
cj_ba03, 2
cj_denglong_020, 13
cj_ghuochong, 4
cj_huo, 37
cj_kvk01, 1
cj_kvk02, 1
cj_kvk_03, 1
cj_kvkfeng01, 7
cj_xing, 11
foguang, 7
guihun_01, 5
huahuo, 35
huangsha, 110
huoba01, 2624
huoba01_big, 555
huoba02, 615
huoba03, 7
huoba04, 5
huohua_011, 9
huoxing, 1886
huoxing7mi, 6
jian01, 18
jiujiaozhengqi, 93
jiujiaozhengqi_01, 48
kuangdui01, 37
kuangdui02, 354
kuangdui03, 7
kuangdui05, 1
kuangdui_hong, 249
kuangdui_hong01, 259
kuangdui_lan, 270
kuangdui_lan01, 365
kuangdui_lv, 154
kuangdui_lv01, 68
langhua, 86
langhua01, 119
langhua02, 76
penhuo, 120
penhuo_01, 41
penjianyanjiang, 6
pubushuihua_02, 1420
pubushuihua_03, 582
rain, 23
rain_xiao, 6
shandong_01, 18
shedengguangzhu, 93
shedengguangzhu_01, 64
shedengguangzhu_02, 56
shedengguangzhu_03, 17
shedengguangzhu_04, 5
shedengguangzhu_05, 1
shidenglong_01, 167
shidenglong_010, 124
shidenglong_02, 86
shidenglong_020, 19
shuidi, 44
shuidi_01, 158
shuidi_lv_01, 1
shuimianlianyi, 156
snow, 12
sunny01, 23
sunny02, 17
sunny03, 6
sunny04, 45
taohua, 528
taohua_big, 83
wenquan, 95
wenquanzhengqi, 73
xiangluyan, 77
xiangluyan_01, 51
yan01, 96
yan01_da, 4
yanjiangshuihua_001, 46
yanjiangwuqi, 211
yanjiangzhengqi, 34
yezi, 136
yezi01, 186
yezi01_, 2
yezi01__big, 6
yezi01_big, 179
yezi01_i02, 2
yezi01_ihua_02, 20
yezi01_ngdian_04, 12
yezi_big, 24
yezihuyang01, 7
yinghuochong, 1689
yun, 717
yun001, 65
yun002, 103
yun02, 6
yun_01, 17
yun_02, 1
ziti01, 40

然后是对这102种粒子详细信息的统计:

发射器类型,使用个数
Box, 64
Point, 3
PolarEmitter, 4
Ring, 21

影响器类型,使用个数
ColourFading, 83
MeshAnimationAffector, 1
Movement, 39
Revolution, 11
Rotator, 71
ScaleInterpolator, 69

Render类型,使用个数
billboard, 87
mesh, 1
texcoord_billboard, 4

并不存在的粒子
cj_ba01_big
cj_ba03
cj_denglong_020
cj_ghuochong
cj_huo
cj_xing
yezi01_
yezi01__big
yezi01_i02
yezi01_ihua_02
yezi01_ngdian_04

发现场景中使用的这些粒子几乎将天龙添加的那部分全部使用了-3-,本来还想偷懒一下呢,看来全部得实现啊!其中huoba01使用的最多,我就以这个为例子,做出来的效果和游戏中的差不多,如下图:
游戏中的效果

查看器中的效果

因为我的号级别比较低,很多特效没有在游戏里看到过,做起来还是比较困难的,不过好在参数名都能比较清晰的反映它们的作用,所以猜一猜用途,大致还是能实现的,只不过可能很多细节跟游戏中不尽相同,需要再做调整-3-

btw:馊狐在09年3月3号左右已经将all.material,all.particle等文件加密了,真囧~~~

从TLSceneViewer中导出,然后用TLSceneImporter导入就可以了,哈哈,效果如下:





话说3DS MAX SDK真不讨人喜欢

天龙八部的地表做法与9年前的红警2的极为类似。都是由很多个格子(Title)组成,每个格子四个点,两个三角形。
下面我先给出天龙八部GridInfo文件格式,然后再简要介绍一下实现方式。
[GridInfo file format]
DWORD     nVersion     版本号
int     nWidth          地表宽度(横向格子数)
int     nHeight         地表高度(纵向格子数)

如果版本号大于0x00100002则后面跟一个bool型数据,否则不存在这个bool型数据
bool     bLarge         GridInfo是否为7字节类型

如果bLarge存在并且值为1,则其后跟的是7字节版本否则为5字节版本
[GridInfo 5字节版本]
BYTE     nFirstLayer     该值即为pixelmap的索引(第几个pixelmap)
BYTE     nFirstLayerOp     对nFirstLayer的操作,可能取值如下:
     0 不变
     1 水平翻转
     2 垂直翻转
     4 向左旋转90度
     8 对角线镜像
     注意:这些值之间是可以取和的,比如9=1+8说明图片需要水平翻转和对角线镜像

BYTE     nSecondLayer     该值为pixelmap的索引
     天龙八部的地表最多可以两层融合,说白了就是每个点里有两层UV,这里为第二层pixelmap的索引
BYTE     nSecondLayerOp     对nSecondLayer的操作,取值同nFirstLayerOp

BYTE     IndexOrder     对格子的三角形的操作,可能取值如下
     0正常三角形索引
     1不同于正常的三角形索引
     如下图,该值主要用在水池啊一类的地方,如果三角形索引不变的话,水池四个角中的两个角就不对了。



本文出自www.MobileGameBase.com
[GridInfo 7字节版本]
short     nFirstLayer
     读取后需交换高8位与低8位的值,需做如下操作
     nFirstLayer = (nFirstLayer<<8)|(nFirstLayer>>8)
BYTE     nFirstLayerOp
short     nSecondLayer
     同nFirstLayer,需交换高8位与低8位的值
BYTE     nSecondLayerOp
BYTE     IndexOrder

实现方式:
想象一下如果你设好每个点的位置,UV,法线,材质,整个场景不就出来了嘛。
现在的问题是如何操作这些VertexData和IndexData,其实Ogre本身就有大量的类直接这两者,比如Mesh,StaticGeometry,ManualObject等等。不过前阵子突然发现有位朋友写了个魔兽3地形的例子,使用Ogre实现的,写得非常好,呵呵,我就借花献佛推荐大家看这个例子吧,相信你应该有点感觉:)

btw:据说《成吉思汗OL》是用Ogre做的,而且还是在《天龙八部OL》的基础上改的,场景方面做的更好。因为成吉思汗的制作人就是原来天龙八部的制作人,呵呵,国内游戏圈这么小,消息渠道我多少有一点。有兴趣的朋友研究下吧:)

Ogre场景编辑器基本功能已经完成:)
1.类似于3DSMAX的摄像机,非常方便美术操作
2.动态刷新素材资源
3.支持所有操作任意步撤消
4.可以导入并编辑天龙八部的地表(通过TLSceneViewer导出)
5.可以轻松绘制特定图案,绘制时自动融合

6.可以对地表应用特定格式(Word的格式画刷)
7.多种方式调整地表高度,制作斜坡,悬崖等非常方便

8.支持动态光源,以及光源的特定变化
9.可以很方便的摆放物体,通过快捷键和鼠标既可以直观的调整物体位置、旋转、缩放,也可以在场景组件界面里做特定调整

10.可以自动很快速的生成非常优化的导航网格(Navigation Mesh, Navmesh)

生成的导航网格与天龙八部类似,已经非常优化了。
天龙八部很早就已经放弃Region的方式寻路,改用了.path文件,也就是导航网格,同时继续沿用WCollision,但是WCollision仅只是用来调整人物高度的,并没有参与寻路。

仅做了一点修改:导入后自动显示贴图。3DSMAX SDK比我想象中的麻烦,所以耽搁了两天:)
OgreImporter使用实例 将《天龙八部Online》的模型导入到3DS MAX中就可以自由编辑了。

另外介绍一下如何查看MAX里的材质,如下图:)

注:OgreImporter不是仅可以导入天龙八部的模型,任何Ogre的mesh文件都可以导入。
龙八部场景导入插件(TLSceneImporter)可以将天龙八部的场景导入到3DSMAX中。导入后场景就可以自由编辑了:)

使用方法:
1.解压到3DSMAX9的安装目录。
2.用天龙八部场景查看器将需要的场景文件导出成.pxa文件。
3.运行3DSMAX,选择“File->Import...”,文件类型选择“TLBB Scene Pack (*PAX)”,再选择之前导出的.pxa文件,点击“打开”。
4.设置界面中“Output Folder”是指贴图的输出目录,确定后等待进度条完成,场景即导入成功。




给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

Ogre 天龙八部地形 Heightmap(高度图)+GridInfo(地表信息)初步结果相关推荐

  1. Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图

    Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图 QHeightMapSurfaceDataProxy:是Q3DSurface的一个基本代理类. 他是专门加载高度图. 高度图是没有X, ...

  2. Ogre天龙八部地形mesh部分的C++源码

    Ogre的地形部分历来受人诟病,基本没什么用.听说将来的的Ogre1.7版本会重写地形.期待中... 在没有合适的地形可用的情况下,自己手动生成mesh来当地形是一个不错的选择. 由于很多人问我天龙八 ...

  3. 【转】游戏开发高度图有关资料与Balder中的相关支持

    2019独角兽企业重金招聘Python工程师标准>>> 资料一:使用Managed DirectX创建三维地形 来源:GameRes网站 内容: 使用Height Map作为输入 首 ...

  4. 游戏开发高度图有关资料与Balder中的相关支持

    资料一:使用Managed DirectX创建三维地形 来源:GameRes网站 内容: 使用Height Map作为输入 首先,什么是高度图(Height Map)呢?所谓高度图实际上就是一个2维数 ...

  5. GAZEBO构建室外环境地图之创建高度图

    GAZEBO构建室外环境地图之创建高度图 前言 下载真实地形数据 处理下载好的高度图 前言   最近在搭建gazebo的室外仿真环境用于室外机器人的室外建图算法研究,发现网上说这方面的文章非常少,走d ...

  6. Ogre 编辑器二(用Ogre的地形组件加载天龙八部地形)

    主界面如上文设计完成后,场景刚开始添加了是Ogre例子里的,发现场景里实物太少,于是想到直接把天龙的场景拿下来,天龙网上有源码,参考了下,把天龙的地形用Ogre的地形组件完成了下,如下是效果图: 因为 ...

  7. 基于高度图的三维地形生成算法入门篇 —— 均匀网格地形生成算法

    赵 刚 引言     在三维游戏等建立的虚拟世界中要求虚拟场景具有很高的逼真度,其中的三维地形逼真度是关键之一.然而三维地形的生成和绘制需要巨大的计算量,实景地形的生成还需要地形数据库的支持,在运算能 ...

  8. Unity Shader - Heightmap 高度贴图

    目录:Unity Shader - 知识点目录(先占位,后续持续更新) 原文:Heightmap 版本:2019.1 Heightmap 高度贴图(也称为视差映射)是一个类似于法线映射的概念,但是这种 ...

  9. Unity地形材质贴图随高度变化

    地形材质贴图随高度变化 1. 导入Amplify Shader Editor插件 2. 进行可视化Shader编写 3. 给地形赋值材质球进行测试 4. 继续编写Shader 5. 最终效果 PS. ...

最新文章

  1. 调焦后焦实现不同距离成像_90%的人都忽视的“最近对焦距离”,其实有大用处...
  2. 数据挖掘流程(三):特征工程
  3. eBPF 学习路径总结
  4. 【哈佛商评】好编辑成就内容营销
  5. 一颗电阻失效引发的设计思考
  6. HTML制作个简单的网页
  7. 使用STVD开发STM8S时中断的处理方法
  8. comsol学习中心:建模工作流程
  9. 物联网应用技术有哪些?
  10. “白帽子”是怎么炼成的——从菜鸟走过来的心路历程
  11. 3、switch -项目7-定期存款利息计算器
  12. 超搞笑,超拽的句子...
  13. Unity2D—骨骼绑定、IK系统、动画(一)
  14. 题目54:百钱百鸡 一只公鸡值5元,一只母鸡值3元,而1元可买3只小鸡,用百元买百鸡。现有n元钱,想买n只鸡。问有多少种买法?(钱要用完)
  15. 关于echarts无数据时显示问题
  16. GetAsyncKeyState()用法
  17. jquery对json的遍历
  18. 2020美亚个人赛复盘
  19. 2019宝尊Q3财报:科技赋能 新品贡献持续发力
  20. intelliJ IDEA什么意思

热门文章

  1. iPhone 存高危漏洞秒变木马
  2. 金三银四!95后阿里P7晒出工资单:狠补了这个,真香...
  3. 2021年12月中国汽车企业出口量排行榜:特斯拉上海12月出口量仅245辆,占比其全年出口总量的0.15%(附月榜TOP39详单)
  4. 光学镜头是制作过程阶段理解
  5. 【失败面经】【2019暑期实习面试复盘】网易游戏互联网产品策划Vivo交互设计
  6. 坚守 5 年后 「一个人的消防队」终成历史
  7. excel中需要熟练掌握技能
  8. 云服务器还是服务器托管,中小企业应如何选择?
  9. CDN是什么?为什么要使用CDN?
  10. QQ显IP绝迹江湖了吗?