最近一直在思考一个问题,3D游戏的渲染模块与游戏逻辑完全分离真的好吗?还是需要更加紧密的整合起来?
根据软件工程的知识,为了使得模块更容易重用,你应该似的模块之间的界限尽量清晰,耦合性尽量弱。从这个观点出发3D游戏的3D渲染模块应该和游戏逻辑完全分离。这种设计在制作的过程中往往形成这种现象,对于游戏中的某个对象,渲染模块需要数据A,而游戏逻辑需要数据B,前者被存入一个数据文件中提供给3D渲染模块使用,而后者存入另外一个文件中供游戏逻辑使用。举例来说:一个简单的3D游戏差不多是这样完成的:
1、由美术在3D MAX中构建整个场景;
2、程序将这个场景输出成引擎所需的文件格式,通常要使用Octree来进行管理;
3、由于上述场景部分是死的,不能进行交互,所以如果场景中有一个可以交互的东西,例如宝箱(调查后打开),那么需要在游戏地图编辑器中放入这个对象。这个对象的位置,模型名称是渲染模块需要知道的,调查后产生什么样的结果是游戏逻辑负责的。通常是指定调查后触发一个什么样的脚本。为了便于Octree树管理场景,需要把这个模型记录到Octree中(一个文件),为了记录对象的交互,有要使用一个地图文件(第二个文件),脚本也需要存入一个文本文件(第三个文件)。
但是象《魔兽世界》这样庞大的游戏世界肯定不能这样制作,如此多的可交互物体,上述三个文件的同步修改将是非常困难的。例如一个路牌,鼠标指向它时,它需要变亮,然后弹出一个信息泡。从游戏制作的需求而言,3D游戏引擎能够对渲染内容和游戏逻辑进行整合,某个对象的所有信息可以一次编辑、修改应该是更方便的!完成这样的整合需要一个什么样的体系结构呢,数据应该如何组织,各个层次和模块之间如何通讯呢?最近一直在思考这个问题...