工作三个月
工作已经三个月了。老实说还是稍微有那么一些感想的。
首先,做游戏程序猿就要有游戏程序猿的思维模式嘛,游戏程序猿却是个web程序猿的思维模式,那样是不对滴。而其实我现在看到的世界,跟之前所看到的,并不太一样。
怎样做对我来说才是正确的,到底做游戏引擎是个什么样的工作,到底中国的网游公司都是什么样,真是只有看到了才知道。
啊不,应该说是不看永远不知道。
下面开始谈技术
我已经看了一些东西了,虽然看得还不够,当然写得也不够。
想当时刚进公司的时候,引擎里代码的一个反射直接把我给吓尿了(C++的反射!),后来发现这种写法其实是跟CryEngine学的(另外宏真是个神奇的东西~);后来,引擎里的一个noise类又把我吓尿了,后来发现这个类压根是从CryEngine里抄的(Google一下github能找到一大把,我也不知道为啥github上有);然后下一个吓尿我的问题是跟quake学的,那个问题是……
这个引擎的变换方式是这样的。首先在模型/动画的导入阶段,将该模型坐标系下的所有节点展开,使单个mesh的变换矩阵全部是相对于模型的根坐标系的。在此基础上,将所有模型/动画的初始变换(也就是时间轴0位上)暂且看成不变换(单位矩阵),将时间轴上所有mesh(或者说是点)的变换看成以该mesh(点)初始变换为基础的变换。而动画文件与模型文件中记录的就是这种变换方式上很奇怪的数据。
不过这个变换方式确实给我带来一个很大的坑。如果想要在某个模型本地围绕它本身的原点进行旋转,单纯地给这个模型的本地变换矩阵的旋转矩阵设值是不对的。因为这个矩阵在应用之前,实际上早已应用了其他的矩阵,而这个旋转实际上就不是模型本地的旋转了。(我没说明白吧,算了其实这根本就不是个技术PO啊)
而我有一个工作是写BILLBOARD动画的导入,因为billboard就是个需要实时计算旋转度数的操作,所以因为以上原因这个工作的完成一拖再拖,一直拖到项目被停的当天我幡然醒悟(/"≡ _ ≡)/~┴┴。
话说回来,项目被停的当天整个项目组跟过大节似的,洋溢(?)着欢乐(?)的气息。于是下班后,好多该按时走的都加了班——打CS!然后走了一个之后又回来俩刚吃完饭的,加班——打CS!我这个晕3D的也被拉上了——打CS!
Σ( ° △ °|||)︴但其实我不是故意开黑的你们懂的。
然后我现在对引擎的看法也有了些变化。
之前是想一门心思搞渲染,因为自己很多地方都不知道嘛。但是其实渲染引擎也就是那么一回事吧。把数据扔进去,给输出出来。除此之外还有啥?
架构如何写?
其实,渲染的架构越简单越好,整个面向过程的,封装再多也是降低效率。而实际实现上,不过就是那固定的变换模式,再加上渲染流程的优化。而这优化方式也是确定的。
至于以前一直在困惑的shader的封装问题……写shader确实很痛苦。
其实在DX9级别的API下,shader还真不好封装,或者说其实真没法封装= =。顶多也就是多个define的解决方案,再就是shader的拼接和生成了。听老大讲了Unreal的shader解决方案,觉得虚爷的一个shader模板都那么多行。。。囧。。。
现在觉得SDL也没多大意义了。
主要是自己看到了NDK自带的Native Activity,发现SDL2.0的for Android特性价值也并不是很大。而除此之外我整了整整两个星期的java跟C++的传值互调,发现封装java的部分也就是那么一回事而已。
而且我现在都是3D项目,SDL2.0这2D库能派得上的用场实在少。绘图模块这样就这样让它洗洗睡吧,音乐播放模块其实找个开源库链上也不难,至于SDL_image这种东西,现在移动平台上都用pvr之流专用的纹理格式,而且普通的图也不支持纹理压缩啊。唉。
于是那个SDL教程博客好像真的就这么坑了。
下面的内容技术无关慎入
大约两个月前,逛漫展认识了某个小朋友,小朋友开学上大二(现在已经开学了吧),当然其实不算小朋友= =||。小伙子是学编程的,到现在大概已经填过开过好几个游戏坑了。我心想这绝对比我当年强多了啊,我大一毕业的时候连C语言都不会写啊,但现在我反倒被这小伙子当菊苣给膜拜了。
当然这是因为我懂这小伙子不懂的东西。我懂渲染,于是在其他不懂程序猿的眼中是菊苣,但当我走到专业的游戏引擎开发者面前,我真心啥都不是。
然后小伙子向我讨教学习路线问题,我说看你想做什么了。是嘛,很现实的问题。做的事情不同,看到的世界就不尽相同。
如果你真的想了好久了,迫切想要做出一个什么什么样的游戏,这个游戏的画面要求并不是特别高,但是你对游戏的玩法已经想了很多遍,你迫切想要实现这个设计,那么从引擎开始搭起游戏,真的不适合你。找个易用一点的引擎吧。
一个更现实的问题是,国内的游戏公司不会给你太多机会让你实践你的想法,而如果你背后没有商业公司支撑的话,你根本做不出来成型的游戏引擎。引擎的代码可以一个人写,但你空想出来的需求比天上的云还靠不住。什么是引擎,是游戏开发一系列工具的合称,而不是一个函数库,一个编辑器。
如果有人问,那开源的引擎,如Ogre,为什么会造就那么多成功的项目呢?靠你是不知道那些程序猿逮着这个引擎调教了多久。
(:3」∠)当然这些基本不算感想啦。
有人说,国内的游戏公司没节操什么的,才不想进,于是有人问我:何苦进没节操的公司!
没节操?跟我有毛关系!我就是个写代码的!公司的节操跟我有毛关系?退一万步跟策划有关系跟我也没关系啊!
于是,来当游戏引擎程序猿的我,一直是抱着这种心态的。
因为理想本已太过遥远,不敢为自己的理想增加一毫米的远度。
就写到这里。