DX11版引擎即将发布 陈飞舟谈背后故事
西山居技术中心: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版引擎即将发布 陈飞舟谈背后故事相关推荐
- 贵州大学matlab校园版,通知 | MATLAB(校园版) 即将发布,敬请关注!
原标题:通知 | MATLAB(校园版) 即将发布,敬请关注! 鉴于有关 MATLAB 的咨询众多,特将进度告知大家.目前 MATLAB 已经完成招投标竞价,进入签订合同流程,预计12月可完成上线发布 ...
- 5G标准R16版,即将发布!
5G标准R16 Stage3原本定于在2020年3月份发布,受到疫情影响,3GPP TSG#87全体远程会议上批准R16推迟到2020年6月份,也就是本月的TSG#88全体会议. 注:3GPP,即第三 ...
- ASP.NET 3.5 Extensions预览版即将发布
ASP.NET 3.5 Extensions 从Scott Guthrie的博客上得知,下星期微软即将发布ASP.NET 3.5 Extensions预览版.在ASP.NET 3.5 Extensio ...
- 苹果新手机软件测试,苹果即将发布iOS 14.5正式版,测试工作已进入最后阶段
按照苹果的规划,本月他们将会发布iOS 14.5正式版,而目前新系统的测试工作已经进入到最后阶段. 据悉,在iOS和iPadOS 14.5测试版中,苹果隐私设置中的 "位置服务"菜 ...
- 公开发布版的Windows Azure 基础结构服务中的 SQL Server – 文档和最佳实践(已更新),还有即将发布的博客...
一周前,WindowsAzure 刚刚宣布公开发布版的基础结构服务正式推出, 这标志着WindowsAzure从此开始完全支持基础结构即服务,SQL Server是其中的一个主要组件. 预安装的SQL ...
- HTML5游戏引擎Egret发布2.0版 开发工具亦获更新
5月22日在北京国际会议中心举办的HTML5游戏生态大会上,白鹭时代旗下游戏引擎Egret Engine发布2.0版,同时还发布了Flash转换HTML5工具Egret Conversion.HTML ...
- 手把手教你架构3d游戏引擎pdf_白鹭引擎团队即将发布 Egret Pro,并公布后续路线图...
各位开发者好. 春节前,白鹭引擎团队发布了 Egret3D 1.4,引入了大量新特性.上周,白鹭引擎团队发布了 5.2.14 版本,修复了多个白鹭引擎2D渲染器相关的 BUG,接下来我们会在下周继续发 ...
- 我的世界手机版服务器显示即将推出,我的世界手机版1.12即将发布 第一个预览版已经曝光...
今天为大家带来我的世界手机版1.12发布日期的最新消息,1.12的第一个测试版已经发布了! 我们现在已经非常接近1.12正式版了,现是发布预发布版的时候了! 我们预计下周至少还会有一个预发布版,但是如 ...
- Rust即将发布1.0版本,Go持续获得关注:如何在新生语言之间做出抉择
没有什么比谈论一门新语言能够让程序员更加兴奋.更加固执己见的了.作为两枚冉冉升起的新星,Go和Rust让我们置身在这场旋窝之中.作为灵感相似但是动机与目标完全不同的两门语言,Go和Rust可谓都是出身 ...
- 三星Galaxy S10 5G版手机国行版或今日发布 在韩销量已超100万部
6月25日消息,据国外媒体报道,迄今为止,三星已在韩国售出100多万部Galaxy S10 5G版手机,这是该公司在推出这款手机80天后取得的成绩. 韩国是第一个开启移动5G网络的国家,而三星通过推出 ...
最新文章
- [bug]不包含“AsNoTracking”的定义
- 浏览器中可以运行Window2000,WebAssembly 是 JavaScript 的末日?
- android 中 webview 怎么用 localStorage?
- html验证座机号码_html5表单pattern属性配合正则验证电话和手机号码
- 产线数字化软件源码_数字化工厂规划的十大核心要素
- 树莓派 docker homeassistant_树莓派raspberry4B入坑指南 part-4 安装docker-ce 19.03
- es6 prototype 属性和__proto__属性
- 【二维码识别】基于matlab GUI 灰度+二值化+校正QR二维码识别与生成【含Matlab源码 600期】
- 全国行政区划代码(身份证前六位)
- Error:配置系统未能初始化
- DSP2812调试:全局变量初始化不是指定的赋值结果
- 今日头条笔试 机器人跳跃问题
- 零基础理财入门书籍分享
- 通过微信公众号实现微信快捷登陆
- EXCEL:两列数据的重复和非重复值(顺序打乱)
- graphpadY轴设置刻度不均匀_Matlab画图技巧: 不需要敲代码的傻瓜式操作流程
- 【SPSS笔记02】名义多选题的分析(名义多选题处理 相关分析)
- JDK的下载、安装、环境配置教程(2021年,win10、win11都可)
- AVS2参考软件的运行
- 微信小程序在java后台获取用户unionid等敏感信息