金山陈飞舟:《剑网3》3D引擎重生记
当时的目标很远大,也很有挑战,就是希望做一个跨平台Windows,Linux,跨API(DirectX 9c,DirectX 10,DirectX 11,OpenGL)都支持的渲染引擎,同时还希望是支持插件机制,能随时很方便的随时调整渲染引擎,当时我们都被自己的目标感动了,觉得人生的挑战莫过于此!
文/金山游戏副总裁-CTO 陈飞舟
DirectX 11版3D引擎的第一个alpha版本已经打包完毕 一个新的起点开始了
剑网3的DX11的3D引擎Aplha版本的一些说明:这个更多是兼容老的DX9的版本,功能是基本一样的,不过优化方面没有DX9做的好,只是一个测试版本,建立技术框架,方便后期的优化的进展。
时间回到两年前,西山居技术中心基础研发组在帮助剑网3的3D引擎改了很长一段时间的BUG后,来找我商量,说希望做一个长期一点有挑战的工作,讨论了很多内容,最后决定做一个客户端用的3D渲染引擎。
当时的目标很远大,也很有挑战,就是希望做一个跨平台Windows,Linux,跨API(DirectX 9c,DirectX 10,DirectX 11,OpenGL)都支持的渲染引擎,同时还希望是支持插件机制,能随时很方便的随时调整渲染引擎,当时我们都被自己的目标感动了,觉得人生的挑战莫过于此!
同时我们还希望能完全兼容老3D引擎的API以及各种文件格式,这样可以很方便的随时替换,当时我们将能想到的各种功能,都放进去了,希望这个渲染引擎一出世就能惊天地泣鬼神。
做引擎开发是一个长期的很枯燥的工作,特别是要兼容原来的功能,需要有一个梦想去支撑自己的长期坚持,往往是孤独和寂寞的,因为大家往往看最后的结果,而过程没有办法看到的时候,只能在自己的头脑里想象。
做渲染引擎很多人会觉得设计最重要,但是一开始这并不是最重要的!第一个阶段最重要和最挑战的事情是:”阅读代码“,因为剑网3做了7年了,积累了足够的经验,完全重写等于是要重新犯很多错误,因此需要先阅读和吸收原有的经验。
很多人觉得阅读代码很容易,当然如果代码只有几千行,也许很容易,如果几十万行,那就是非常有挑战了,毕竟不同程序员的思维不一样,在代码中都会体现。如果只是为了修改BUG,一般理解局部行为就可以了,但是如果整体做的话,就还需要知道为什么,特别是背后的设计本意。
这是很痛苦的决定,重构是一个更有挑战的事情。
还好整个工作3D大神和3D引擎团队的同事全程参与,帮了很多忙,特别是讲解当时的很多设计本意,特别是很多3D的概念和最新的发展,让大家对3D的理解是在一个正确的方向上。
给大家先普及一下3D引擎的基础知识,3D引擎包含渲染引擎和编辑器两个部分,渲染引擎大家平时见得多,也就是客户端中带的,但是编辑器是引擎中另外一个非常重要的部分,因为要和项目组的制作流程配合,需要很多针对性的开发,这部分的代码量远比渲染引擎大。
接下来挑战的事情,就是学习各个API包括DirectX 9c,DirectX 10,DirectX 11,OpenGL的接口的含义,看似很简单,如果只是做一个Demo,是很简单,但是如果是要商业引擎,特别是深度优化,就需要深入研究各个API背后涉及的本意,特别是DirectX的各个版本,跳变之大,超越想象
我感觉DX 9c,DX 10,DX11,最操蛋的事情是DX10只能在Vista下运行,DX11需要Windows 7下运行,但是在中国Windows XP最流行,只能运行DirectX 9c;特别是当时我们就发现多线程是一个必备功能以后,各个API的多线程是我们考察的重点,但是DX9的多线程支持太差了。
在看API的同时,还有一个很重要的工作,就是深入研究学习网上一些著名的引擎的实现,代码量的阅读直线上升,不过收获很大,很多实现的细节,能少走很多弯路;不过关键就是要静下来,能读进去。特别是程序员的习惯都喜欢写代码,静下心来代码,有时候是一种折磨。
阅读不同引擎的实现,特别是对于不同API的支持,你会容易发现很多细节,发现自己做时候很有挑战,需要一个强大的隔离层,自己做一个3D显示的API,然后调用不同的API实现,这个是一个很大的开发量,特别是新的API一出来,增加新的功能的时候,需要配套修改很多内容。
第一阶段都是在各种纠结中过的,特别是要写很多验证代码,包括模块内部使用C接口还是C++接口,是否采用纯COM的逻辑,包括对外的接口如何设计,很多事情是需要决定,但是有担心太早决定,如果错了后期的修改成本很高,纠结呀纠结。
还有一个很重要的事情就是西山居的基础库,很多是10几年前写的,现在64位环境了,也需要配套修改,特别是对于多线程的很多新的思路,也需要基础库的支撑,因此也在顺便整理一些基础库的代码。
很多人会关心,事情难道还会更难一点吗?有的!那就是团队的建立,一开始也就是3个人,1老+1中+1新,需要边招人,培养人,一边做,这也是非常有挑战的事情!
很多人会问,为什么3D大神参与度比较少,其实主要的原因是因为剑网3的还有很多后期功能和优化工作要做,同时西山居当时准备开2个新的端游项目,急需要将现有引擎SDK化;而且我们内部还启动了一个编辑器的改善项目(这又是另外一个故事了),也是3D大神盯着的。
如若转载,请注明出处:http://www.gamelook.com.cn/2013/02/108505