马上就要扩展一下职业路线了,想了解一下游戏开发流程、团队分工方面的问题
正在注册一个公司,马上就要着手组建一个团队去做专业领域的3D游戏。商业细节不便透露,但技术目标非常具体。现在想在技术层面上初步拆分一下,看看怎么组建团队比较合理。
既然针对专业领域,就不是做网游,也不对大众开放。游戏是模拟驾驶方面的,玩家通过标准HID游戏接口设备操纵虚拟的交通工具。画面是驾驶室的第一人称视角,交通工具本身是一个复杂的系统,很多组件需要建模,对组件的操作影响到交通工具与虚拟世界之间的互动。
游戏是多角色的,主机可以建立任务,不同玩家可以加入任务进行互动。可以新建AI角色参与其中。
玩家的物理输入基于DirectX中的DirectInput,游戏画面的图像输出基于D3D,需要制作大量的3D模型和2D贴图。还有些额外的输出用于驱动外部的液压作动筒之类,基于什么技术尚待选择。有些数据输出对实时性要求较高,因此所用技术必须做到低延迟。
游戏的物理建模工作量很大,分交通工具本体的建模和外部环境建模两个部分。
交通工具本体建模是从驾驶人员角度出发,对交通工具本身的系统进行建模,比如液压系统、电源系统、计算机系统等。
液压系统的建模最简单的例子就是如果一个管路某个位置发生泄漏,则下游的液压作动筒都无法动作,并且被液压作动筒控制的零件会在外力作用下发生运动。
电源系统需要处理一些逻辑,比如A电源和B电源相互备份工作,正常使用时必须全开,然后才允许开启用电设备C。如果B电源在设备C使用过程中损毁,则要在虚拟的驾驶室某个面板上让一盏红色警告灯闪烁,并播放警报声音。
计算机系统是指虚拟世界中的一个虚拟计算机,举个贴近生活的例子:虚拟世界里的角色拿着一部智能手机在拨打他虚拟家中的固定电话。我们需要模拟这部手机上的整套GUI逻辑,也就是说虚拟的角色按了虚拟的手机屏幕上面一个电话图标,我们得看到这部虚拟手机上出现了拨号键盘。然后这个虚拟角色按下了家里的号码,开始拨打,那么我们要听到虚拟的环境里这部固定电话开始响。前者是纯的界面转换,后者则是界面中的特定对象与虚拟世界大环境中另一些特定对象之间出现的特定关联。界面与关联都要方便编辑修改,像GUI的界面转换规则之类用脚本实现就比较灵活。
外部环境的建模涉及常见的重力场、碰撞与摩擦、作用力与反作用力、弹力等,会涉及一些空气动力方面的物理模型。物理对象包括一些可以与交通工具发生物理碰撞关系的物体,一些用于模拟意外情况下的损毁模型,为数不少的粒子效果。
联机功能方面,需要允许两个或更多个人在不同终端上操作同一个交通工具,各司其职,各自的显示器上显示自己的座位所看到的视角。也需要允许不同玩家相互交流,点对点、点对群发送文本甚至压缩的语音。语音也可以经由TeamSpeak发送。但占用的都是同一个物理连接的带宽。
软件需要具备很强的扩展性。交通工具不只是一个型号,未来需要发展出很多不同型号,在同一个虚拟世界中互动。所有的具体物理细节都要可以扩展,但是虚拟世界的基本物理规律不变。
长远看来这么庞大的系统必须要有自己的引擎,并且引擎本身要有一定的扩展性与灵活性,便于升级。无论是像微软DX10升级到DX11这么重要的更新,还是硬件架构大改动带来的一些新技术,游戏本身也需要做出一定的更新,无论是发布升级包还是发布新版本,需要尽快加入新的支持。当然要做到这个程度,没有几年的技术储备很难。
因此初期需要向其它公司借力。现在有一些公司的现成产品支持我们的大部分需求,有些公司甚至推出了自己的SDK用于二次开发。初期我们会采取这种形式。因此团队的工作内容会有个变化的过程。从二次开发转向自主开发。
我作为一个工程师非常熟悉讨论具体问题的氛围。大家多数时间都是在讨论非常具体的细节问题,但是这个话题比较宏观,我想通过刚才描述的信息先了解一下团队的架构,讨论一下后期的原创开发阶段这些工作应当怎样拆分。希望可以听到不同职业朋友的不同声音,把这个拼图整理出来。本想多给些分数做见面礼的,无奈最高只能给100分,对不住了。