金山陈飞舟:《剑网3》3D引擎重生记

来源:互联网 发布:c语言定义常量数组 编辑:程序博客网 时间:2024/04/26 14:03

DirectX 11版3D引擎的第一个alpha版本已经打包完毕 一个新的起点开始了。

剑网3

  剑网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大神盯着的。

原创粉丝点击