魔兽世界规模网游的十年设计故事和引擎技术分享
QQ空间版本连接:http://user.qzone.qq.com/188500397/blog/1464273121
目录
一.成长经历
1.大学时光:
2.工作生涯和大事记:
二.游戏研发的入门和选择可行的道路:
三.各种引擎技术的研究(完美的解决各种技术和分享):
1.文字显示
2.键盘鼠标的研究
3.全屏幕的研究:
4.各种WINDOS技术:
5.地面的研究:
6.地形研究(全球少有的、月10万以上工资的无缝地图技术):
7.一望无际的的花草树木技术
8.一望无际的密集树林设计:
9.影子技术:
10.碰撞技术(这也是大块头技术,设计的好坏直接影响效率和后期制作)
11.快捷键
12.地面的万物:
13.庞大世界上花草树木的自动生成设计:
14.动物的设计:
15.高效低耗:
16.超强兼容性:
17.环保免安装的客服端:
18.服务器的设计
四.一些游戏功能介绍
五.截图技术解说
六.附录
1.本游视频和下载地址
2.作者信息
一.成长经历
我成长于游戏资源网,在那里可以找到我十年中遇到问题找答案的记录.
本文分享了一些技术的最佳解决方案,可以让研发游戏的同学们少走弯路.
1.大学时光:
就从十多年前讲起吧.
大学时候我读的是计算机应用,很喜欢编程,更喜欢玩游戏,第一款游戏是辐射2,一玩就是3个月,后来又玩了魔法门.
后来的大学时光我都在自学c语言编程.上机测试每一道例题、每一道习题,修改了很多想法.
那时候还是dos时代,一次寒假,编写了一个全屏显示一个五角星发光的程序,我很得意,修改了很多想法,但感觉很极限.
2. 工作生涯和大事记:
毕业后从事软件研发,两年后从事银行系统研发工作,这一走就是十年,工作中不为钱只为时间来暗中研发这个项目,十年后各种引擎核心技术已经完美解决了,于是辞职隐身于大理专业最后的研发.一年前第一次在游戏资源网公开我的研发消息.今年过年上线了测试版,只需要整理和添加好玩内容.
二. 游戏研发的入门和选择可行的道路:
一次买了本opengl的书,这就注定了我人生道路。
开始也只是好奇而膜拜的学习.
后来又买了一本带光碟的书,有一些效果和动画,我觉得有了这些例子,就不用担心不懂的技术了,于是就开始学习编写游戏.
这个时候我心还是没有底,担心一些技术的实现,我必须掌握蒙皮动画技术,和足够研发时段使用的模型资源才行,后来终于找到魔兽世界模型资源和实现代码.
这下我终于安心了,我研究了好几个月,开始用openg实现,又觉得还是跟着微软走采用dx更好,又使用dx实现了各种模型的显示,但是发现dx的例子太缺乏,
很多功能明明可以封装好给大家使用的,为什么微软不这么做呢?后来终于决定使用opengl.
三. 各种引擎技术的研究(完美的解决各种技术和分享):
1. 文字显示
opengl库只能显示字母,能显示立体的中文,但不能显示最普通的中文,而且效率很低,根本就不可能用于游戏中.
经过不懈的研究,学习了调用字模库,后来终于被我给研究出高效显示文字了.好把,既然写了故事,就顺便分享技术满足各位同学的愿望吧.
直接使用操作系统API内存显示文字,转换成纹理贴图来做就好了,既效率好而且可以显示所有的文字.
2. 键盘鼠标的研究
opengl有提供这些函数,但经不停的研究对比,发现还是使用windos的更好.
3. 全屏幕的研究:
经过不断的思考和对比和遇到好多的问题,发现opengl的全屏幕在微软系统上的支持不是很好,所以后来决定使用窗口模式的假全屏幕来做,不然会遇到好多解决不了的问题,仅仅这个输入法问题就够呛的了.
4. 各种WINDOS技术:
在微软系统上的程序,少不了这些的研究,必须样样深入研究,而解决这些问题的关键就是上面全屏幕的研究.opengl坐标和窗口的坐标转换也很麻烦,特别是全屏幕和窗口模式的切换.
5. 地面的研究:
经过了很长时间的研究,终于解决了基本的问题,可以开始研究有点趣味的东西了.
开始采用魔兽争霸的地面拼图模式,固然是拥有了制作地面的技术,但这种技术我不满足,我希望拥有魔兽世界和完美世界那种无缝地图和渐变地面贴图的技术.
找遍因特网,只找到根据高度来贴图的例子,做不到随心所欲任意贴图,我坐立不安,后来采用显卡编程GLHL,终于研究出一次渲染支持无数层地面贴图的技术,非常高效,但由于多纹理数量限制,后来定位为一次渲染16层,所以大家能看到我的地面花花绿绿不是一般游戏可以比的,当然分成十六次渲染也能做到,但效率很低,这不是我忍心采用的技术。后来由于大部分电脑不支持GLHL显卡编程,所以改用cg显卡编程,经过了不眠的一天一夜研究,终于无误的改写为cg显卡编程,做到了普遍电脑都支持.但cg显卡编译器只能同时支持10个纹理,其实我没有同时10层一起渲染,所以上线的测试版定位为一次渲染10层贴图,如果把所有贴图拼成一张贴图那么就可以支持更多层贴图,但地面格子之间有接缝,理论上肯定能解决的,等我有时间再研究.现在一次渲染10层已经够用了,如果需要更多,可以分多次渲染来解决,比如雪地类型组贴图,沙漠类型组贴图,戈壁等.到此已经完美解决地面贴图问题.
6. 地形研究(全球少有的、月10万以上工资的无缝地图技术):
在这里花了好几个月时间,开始的的时候是想设计成随机生成山脉丘陵,注意是山脉有海拔高度的山脉,不是单独的山技术(我这个人很追求完美,山的技术是不能满足我欲望的),睡梦中拉起被子,以为被子就是山脉,我赞叹多么柔顺的数据,无论怎么翻数据都非常均匀都是没有菱角的山,后来也研究出了非常好的随机山脉,但总觉得有缺陷,出门我总看着山,回家制作出了这样的山脉,又发现缺少了另外的山脉类型,还是不满意.从此我每天都看着山.我没办法,不能完美解决此技术我心不能平静.无数次研究谷歌的高度图,后来终于决定采用真实的卫星高程数据来做,
在美国的网站下载的卫星高程数据http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp,数据太大,我不愿意我的游戏里有这么大块的数据,经研究后,终于做到只需要4m就能应用全球高度数据,当然这是卫星扫描的地图, 应用于游戏中还需要修改,虽然可以ps修改,但这样对后期的制作还不够方便和灵活,必须做到在游戏中可以随意修改才行. 之前为了减少数据体积采用了jpg技术,但是问题又来了,修改后保存数据,再此打开数据会有变化,因为jpg是压缩的嘛,数据不精确.后来只能采用折衷的办法,采用tga格式,16m的地形数据完美解决地形技术。
由于考虑压缩数据体积和无缝地图的设计,所以引擎算法非常复杂,这不是常人所能承受的了的设计过程,其中要大地图定位,小地图定位,真实地面定位,修改地面定位,缩放,小位移大位移,对准地面贴图,加上显卡的渲染顺序差异,还要支持无缝的大切图小切图,更费心机的是要设计到效率非常好且占用内存非常小,所以非常复杂.
如今轻舟已过万重山,已经完美解决了,说句心里,如果我忘记怎么设计的话,我不愿意再设计一次.
大概介绍这种高大上的无缝地图技术吧:首先下载全球地图快,ps拼图,体积非常大,缩小,因为地形数据连续是平滑的,缩放不影响质量,最后转换成灰度图,从16m的地图中,切一块够小又足够几个平面使用的大地图块,然后每次写入真实的地面数据,就从其中切一小快当前地图数据,
这样16m的数据就不用驻留内存,走了非常远才出界就重新切一块地图数据。估计暴雪也没我这样极端高效低耗的设计
未完有后续...