西山居技术中心:DirectX 11版3D引擎的第一个alpha版本已经打包完毕,一个新的起点开始了。

  陈飞舟:很快就会准备发布了。

  剑网3的DX11的3D引擎Aplha版本的一些说明:这个更多是兼容老的DX9的版本,功能是基本一样的,不过优化方面没有DX9做的好,只是一个测试版本,建立技术框架,方便后期的优化的进展。

  剑网3的DX11的3D引擎故事1:时间回到两年前,西山居技术中心基础研发组在帮助剑网3的3D引擎改了很长一段时间的BUG后,来找我商量,说希望做一个长期一点有挑战的工作,讨论了很多内容,最后决定做一个客户端用的3D渲染引擎。

  剑网3的DX11的3D引擎故事2:当时的目标很远大,也很有挑战,就是希望做一个跨平台Windows,Linux,跨API(DirectX 9c,DirectX 10,DirectX 11,OpenGL)都支持的渲染引擎,同时还希望是支持插件机制,能随时很方便的随时调整渲染引擎,当时我们都被自己的目标感动了,觉得人生的挑战莫过于此!

  剑网3的DX11的3D引擎故事3:同时我们还希望能完全兼容老3D引擎的API以及各种文件格式,这样可以很方便的随时替换,当时我们将能想到的各种功能,都放进去了,希望这个渲染引擎一出世就能惊天地泣鬼神。

  剑网3的DX11的3D引擎故事4:做引擎开发是一个长期的很枯燥的工作,特别是要兼容原来的功能,需要有一个梦想去支撑自己的长期坚持,往往是孤独和寂寞的,因为大家往往看最后的结果,而过程没有办法看到的时候,只能在自己的头脑里想象。

  剑网3的DX11的3D引擎故事5:做渲染引擎很多人会觉得设计最重要,但是一开始这并不是最重要的!第一个阶段最重要和最挑战的事情是:阅读代码,因为剑网3做了7年了,积累了足够的经验,完全重写等于是要重新犯很多错误,因此需要先阅读和吸收原有的经验。

 剑网3的DX11的3D引擎故事6:很多人觉得阅读代码很容易,当然如果代码只有几千行,也许很容易,如果几十万行,那就是非常有挑战了,毕竟不同程序员的思维不一样,在代码中都会体现。如果只是为了修改BUG,一般理解局部行为就可以了,但是如果整体做的话,就还需要知道为什么,特别是背后的设计本意。

  剑网3的DX11的3D引擎故事7:还好整个工作3D大神和3D引擎团队的同事全程参与,帮了很多忙,特别是讲解当时的很多设计本意,特别是很多3D的概念和最新的发展,让大家对3D的理解是在一个正确的方向上。

  给大家先普及一下3D引擎的基础知识,3D引擎包含渲染引擎和编辑器两个部分,渲染引擎大家平时见得多,也就是客户端中带的,但是编辑器是引擎中另外一个非常重要的部分,因为要和项目组的制作流程配合,需要很多针对性的开发,这部分的代码量远比渲染引擎大。

  剑网3的DX11的3D引擎故事8:接下来挑战的事情,就是学习各个API包括DirectX 9c,DirectX 10,DirectX 11,OpenGL的接口的含义,看似很简单,如果只是做一个Demo,是很简单,但是如果是要商业引擎,特别是深度优化,就需要深入研究各个API背后涉及的本意,特别是DirectX的各个版本,跳变之大,超越想象。

  剑网3的DX11的3D引擎故事9:我感觉DX 9c,DX 10,DX11,最操蛋的事情是DX10只能在Vista下运行,DX11需要Windows 7下运行,但是在中国Windows XP最流行,只能运行DirectX 9c;特别是当时我们就发现多线程是一个必备功能以后,各个API的多线程是我们考察的重点,但是DX9的多线程支持太差了。

  剑网3的DX11的3D引擎故事10:在看API的同时,还有一个很重要的工作,就是深入研究学习网上一些著名的引擎的实现,代码量的阅读直线上升,不过收获很大,很多实现的细节,能少走很多弯路;不过关键就是要静下来,能读进去。特别是程序员的习惯都喜欢写代码,静下心来代码,有时候是一种折磨。

剑网3的DX11的3D引擎故事11:阅读不同引擎的实现,特别是对于不同API的支持,你会容易发现很多细节,发现自己做时候很有挑战,需要一个强大的隔离层,自己做一个3D显示的API,然后调用不同的API实现,这个是一个很大的开发量,特别是新的API一出来,增加新的功能的时候,需要配套修改很多内容。

  剑网3的DX11的3D引擎故事12:第一阶段都是在各种纠结中过的,特别是要写很多验证代码,包括模块内部使用C接口还是C++接口,是否采用纯COM的逻辑,包括对外的接口如何设计,很多事情是需要决定,但是有担心太早决定,如果错了后期的修改成本很高,纠结呀纠结。

  剑网3的DX11的3D引擎故事13:还有一个很重要的事情就是西山居的基础库,很多是10几年前写的,现在64位环境了,也需要配套修改,特别是对于多线程的很多新的思路,也需要基础库的支撑,因此也在顺便整理一些基础库的代码。

  剑网3的DX11的3D引擎故事14:很多人会关心,事情难道还会更难一点吗?有的!那就是团队的建立,一开始也就是3个人,1老+1中+1新,需要边招人,培养人,一边做,这也是非常有挑战的事情!

陈飞舟

  剑网3的DX11的3D引擎故事15:很多人会问,为什么3D大神参与度比较少,其实主要的原因是因为剑网3的还有很多后期功能和优化工作要做,同时西山居当时准备开2个新的端游项目,急需要将现有引擎SDK化;而且我们内部还启动了一个编辑器的改善项目(这又是另外一个故事了),也是3D大神盯着的。

  剑网3的DX11的3D引擎故事16:一开始一方面是阅读代码,同时也在考虑很多基础的设计,特别是接口部分,我们还希望能支持回放,因此想引入一个命令队列,这样的话,方便多线程,也方便将3D的行为存盘,用于回放,甚至可以方便定位BUG。因此在前期做了很多预研究性质的开发。

  剑网3的DX11的3D引擎故事17:开发分成几个部分,一个是模型的相关部分,一个是地形的相关部分,一个是动作的相关部分,分开阅读引擎的代码,也在思考设计方案,也会写一些小的验证程序。

  剑网3的DX11的3D引擎故事18:这个期间也分析了老的文件格式,结果发现了很多可以优化的地方,因为原来的引擎设计比较全面,各种数据都存放,但是在具体游戏中,很多数据是无用的,可以优化掉的,因此顺便帮助现在的3D引擎做了一个是动作文件的优化,一个是地形的优化,效果都不错,极大的减少了磁盘IO。

  剑网3的DX11的3D引擎故事19:动作的优化还在内部引起一定的轰动,因为缩小到原来的1/10大小,这也是我们没有想到的值,因为动作文件和其他模型文件,纹理不同,是不能异步加载的,因此磁盘io很大程度影响了动作的流畅性。当时3D大神手惊呆了,眼神极其精彩,也有高兴,有人能帮助优化3D引擎到这个程度。

  剑网3的DX11的3D引擎故事20:地形的压缩现在基本完成,正在等待发布,因为涉及的更新量很大,还是需要项目组根据实际情况来逐步安排,不过也减少了至少1/3的数据。

  剑网3的DX11的3D引擎故事21:来一点小八卦,当西山居老大听说优化的效果怎么好后,将我和3D大神叫过去,我们当时都很开心的准备去接受表扬的,结果老大将我们训了一顿,说为什么在早期的时候没有考虑这些,导致现在优化这么好,说明当时这个的设计太烂了;3D大神当时汗都下来了,我就是傻笑,你们懂得。

剑网3的DX11的3D引擎故事22:由于DX 9c对多线程的支持很差,为了防止磁盘读和文件解析占用主线程的开销,我们设计了一个非常复杂的加载流程,特别是加了插件机制,希望支持不同的文件格式,当时设计出来后,我们也很得意,觉得自己很牛逼,居然能设计出这样的代码,但是当我们看DX11的API,傻了。

  剑网3的DX11的3D引擎故事23:由于DX 11引入了一套机制完美支持多线程,我们写的很多代码等于是浪费的,只有在DX9c有价值,而且会将代码复杂度高的很高,特别是后期加功能的人会很惨,当时就陷入很纠结的状态。

  剑网3的DX11的3D引擎故事24:另外一个是状态切换的问题,DX9c将每一个状态都单独设置,会导致API调用次数特别多,特别是显卡的状态切换开销是很大的,而DX11直接使用状态块来解决,一次调用切换一批状态,明显效率提升很好,我们如何封装这两种差异,特别让人纠结。

西山居技术中心

  我也来爆些3D引擎的开发细节 :DX9版本最早是单线程设计的,后来要加异步加载机制,由于架构已定很多东西改不动,最终的方案非常复杂。因此DX11版本开发早期就非常看重加载流程的设计。当时想要实现一套支持多种图形API的统一架构,我们花了很多时间来讨论各种方案,推敲细节及其影响。

  我也来爆些3D引擎的开发细节2:因为对架构优雅、完美有着一种偏执的追求,花了几个月都没有找到满意的方案,项目进展几乎停滞。当我们决定放弃包袱专注DX11时,事情简单了:只需提供一个加载函数,在主线程调用就是同步加载,在其他线程调用就是异步加载。整个过程非常简单、优雅,符合我们的程序美学。

陈飞舟

  今天晚上雷总(雷军)找西山居的一部分高管聊天,希望我们能更多的专注到用户的体验,提高用户的满意度,也帮助我们讲解了很多小米和用户互动的方式,以及对用户的体验的重视,非常感动,特别有心得,新的一年,我们将会继续思考如何更好的为用户服务。

  剑网3的DX11的3D引擎故事25:第一个阶段的开发是非常锻炼脑力的,因为很多事情都很难定下来,然后思考的时候需要综合方方面面,又很难取舍,同时也不断的做各种尝试,对于团队成员来讲也很挑战,因为缺乏一个明确的方向,都是今天做做这个,明天试试那个,整体的进度遥遥无期,因为很多事情定不下来。

  剑网3的DX11的3D引擎故事26:因此第一年就在朦朦胧胧中渡过,年底就遇到了一个人员要离职,觉得未来毫无希望,这个时候团队的气氛也很压抑,逼着我们反思到底发生了什么事情?

  剑网3的DX11的3D引擎故事27:项目负责人来找我谈,认为是他对手下员工关怀不够,日常的团队建设不够,对员工的未来发展缺乏规划;包括最终会是什么样子,现在也是想不清楚。我当时告诉他的就是,可能是我们的方向或者做法有问题,需要我们仔细的思考。

  剑网3的DX11的3D引擎故事28:我们从头回顾了整个过程,特别是初始目标,终于发现我们定了一个神一样的目标,但是我们是人,或者说我们自身的能力有限,太多目标整合在一起后的排列组合导致的设计复杂度,远远超出我们现阶段的能力。但是这就是面临一个重要的问题,下面怎么办?

DX11版引擎即将发布 陈飞舟谈背后故事相关推荐

  1. 贵州大学matlab校园版,通知 | MATLAB(校园版) 即将发布,敬请关注!

    原标题:通知 | MATLAB(校园版) 即将发布,敬请关注! 鉴于有关 MATLAB 的咨询众多,特将进度告知大家.目前 MATLAB 已经完成招投标竞价,进入签订合同流程,预计12月可完成上线发布 ...

  2. 5G标准R16版,即将发布!

    5G标准R16 Stage3原本定于在2020年3月份发布,受到疫情影响,3GPP TSG#87全体远程会议上批准R16推迟到2020年6月份,也就是本月的TSG#88全体会议. 注:3GPP,即第三 ...

  3. ASP.NET 3.5 Extensions预览版即将发布

    ASP.NET 3.5 Extensions 从Scott Guthrie的博客上得知,下星期微软即将发布ASP.NET 3.5 Extensions预览版.在ASP.NET 3.5 Extensio ...

  4. 苹果新手机软件测试,苹果即将发布iOS 14.5正式版,测试工作已进入最后阶段

    按照苹果的规划,本月他们将会发布iOS 14.5正式版,而目前新系统的测试工作已经进入到最后阶段. 据悉,在iOS和iPadOS 14.5测试版中,苹果隐私设置中的 "位置服务"菜 ...

  5. 公开发布版的Windows Azure 基础结构服务中的 SQL Server – 文档和最佳实践(已更新),还有即将发布的博客...

    一周前,WindowsAzure 刚刚宣布公开发布版的基础结构服务正式推出, 这标志着WindowsAzure从此开始完全支持基础结构即服务,SQL Server是其中的一个主要组件. 预安装的SQL ...

  6. HTML5游戏引擎Egret发布2.0版 开发工具亦获更新

    5月22日在北京国际会议中心举办的HTML5游戏生态大会上,白鹭时代旗下游戏引擎Egret Engine发布2.0版,同时还发布了Flash转换HTML5工具Egret Conversion.HTML ...

  7. 手把手教你架构3d游戏引擎pdf_白鹭引擎团队即将发布 Egret Pro,并公布后续路线图...

    各位开发者好. 春节前,白鹭引擎团队发布了 Egret3D 1.4,引入了大量新特性.上周,白鹭引擎团队发布了 5.2.14 版本,修复了多个白鹭引擎2D渲染器相关的 BUG,接下来我们会在下周继续发 ...

  8. 我的世界手机版服务器显示即将推出,我的世界手机版1.12即将发布 第一个预览版已经曝光...

    今天为大家带来我的世界手机版1.12发布日期的最新消息,1.12的第一个测试版已经发布了! 我们现在已经非常接近1.12正式版了,现是发布预发布版的时候了! 我们预计下周至少还会有一个预发布版,但是如 ...

  9. Rust即将发布1.0版本,Go持续获得关注:如何在新生语言之间做出抉择

    没有什么比谈论一门新语言能够让程序员更加兴奋.更加固执己见的了.作为两枚冉冉升起的新星,Go和Rust让我们置身在这场旋窝之中.作为灵感相似但是动机与目标完全不同的两门语言,Go和Rust可谓都是出身 ...

  10. 三星Galaxy S10 5G版手机国行版或今日发布 在韩销量已超100万部

    6月25日消息,据国外媒体报道,迄今为止,三星已在韩国售出100多万部Galaxy S10 5G版手机,这是该公司在推出这款手机80天后取得的成绩. 韩国是第一个开启移动5G网络的国家,而三星通过推出 ...

最新文章

  1. [bug]不包含“AsNoTracking”的定义
  2. 浏览器中可以运行Window2000,WebAssembly 是 JavaScript 的末日?
  3. android 中 webview 怎么用 localStorage?
  4. html验证座机号码_html5表单pattern属性配合正则验证电话和手机号码
  5. 产线数字化软件源码_数字化工厂规划的十大核心要素
  6. 树莓派 docker homeassistant_树莓派raspberry4B入坑指南 part-4 安装docker-ce 19.03
  7. es6 prototype 属性和__proto__属性
  8. 【二维码识别】基于matlab GUI 灰度+二值化+校正QR二维码识别与生成【含Matlab源码 600期】
  9. 全国行政区划代码(身份证前六位)
  10. Error:配置系统未能初始化
  11. DSP2812调试:全局变量初始化不是指定的赋值结果
  12. 今日头条笔试 机器人跳跃问题
  13. 零基础理财入门书籍分享
  14. 通过微信公众号实现微信快捷登陆
  15. EXCEL:两列数据的重复和非重复值(顺序打乱)
  16. graphpadY轴设置刻度不均匀_Matlab画图技巧: 不需要敲代码的傻瓜式操作流程
  17. 【SPSS笔记02】名义多选题的分析(名义多选题处理 相关分析)
  18. JDK的下载、安装、环境配置教程(2021年,win10、win11都可)
  19. AVS2参考软件的运行
  20. 微信小程序在java后台获取用户unionid等敏感信息

热门文章

  1. android高德地图获取省市编码,android中高德地图地理编码
  2. 2020年电工(技师)找答案及电工(技师)考试申请表
  3. apple script to 1s screen capture snapshot w/ windowsill
  4. 解决NBSI安装显示“MSINET.OCX组件无法加载或其中有组件失败”
  5. 系统修复-菜鸟也DIY
  6. 网络规划设计师的参考资料和复习书籍
  7. 《认知盈余》——阅读感受与体会
  8. 计算机网络延展-令牌环网
  9. 计算机设备管理器驱动,设备管理器安装驱动程序的详细教程
  10. 桌面宠物秀,电脑桌面美化