QUAKE系列引擎以及基于QUAKE扩展引擎的源代码全面分析(一)
前言:
一:研究quake系列引擎断断续续也已经两年有余了,一直想写点什么,但是真的到了那一步,又发现其实很难下笔,原因有三:1 文笔不流畅,特别是技术性技巧的缺乏,概念难以精确定义,无法想内心的真实表达转换为文字,郁闷啊!!2 QUAKE系列引擎的庞大结构以及各个模块的协作关系,真的想写的时候不知道如何组织,导致思路极其紊乱。3 对于QUAKE系列的深奥部分,列如bsp的编译程序部分的源码还未完全理解,这是整个QUAKE引擎的核心部分,这是QUAKE系列引擎最核心的部分,可以说,整个QUAKE系列引擎就是围绕这张图推进的。虽然BSP的生成确实是一个非常非常难的难点,好在使用起BSP来相对比较简单,即使不知道如何生成,但至少可以灵活使用,伟大的慷慨的卡马克。
二:QUAKE系列的引擎源码分析涉及到的引擎包括如下几个:
1 QUAKE1 及其基于 QUAKE1框架的扩展引擎DARKPLACES
2 QUAKE2 及其基于 QUAKE2 框架的扩展引擎 QFUSION
3 QUAKE3及其基于 QUAKE3 框架的扩展引擎 XREAL/EVQ3
三:为什么要使用上述的扩展引擎?
1 QUAKE系列引擎毕竟时间久远,现代硬件技术的发展以及渲染方面的新概念,新技术的出现,一些扩展引擎更加贴近当今世界技术发展的潮流。例如这三个引擎都增加了GLSL进行相应的扩展。
2 这些扩展引擎都是非常著名的开源项目,资料比较多,而且都有相应使用这些扩展引擎作成的游戏,可以观看到游戏实时效果。
例如基于DARKPLACES引擎的游戏—NEXUIZ,渲染效果极其惊人啊!!!
基于 QFUSION 引擎的游戏-----WARSOW
基于 XREAL/EVQ3引擎的游戏-----REVOLUTION
3 对上述三个扩展引擎的感受
A:DARKPLACES使用QUAKE1的框架结构,重写了全部的渲染模块,网络协议以及传输模块,支持DOOM3类型的光影特效,根据我的感觉,应该是渲染效果最好的开源的项目,使用到了相当多的特效(DOOM3光影特效=Stencil Shadow Volume, Per Pixel Lighting, NormalizationCubeMap, 2D+1D Attenuation Texturing, and Light Projection Filtering).该引擎可以使用著名的QUAKEC进行服务器端游戏逻辑的开发(相当于QUAKE3中的GAME.DLL模块),同时相对于QUAKE1的QUAKEC内置函数,该引擎扩展了相当多的服务器端QUAKEC函数.更漂亮的是他同时扩展了客户端逻辑部分的函数,通过这些函数可以编写客户端游戏逻辑(相当于QUAKE3中的CGAME.DLL模块,但不完全等同).事实上本人是非常喜欢QUAKEC的编码方式,简练而强大.
B:QFUSION引擎最大的特点是他的逻辑结构非常清晰,他所扩展的骨骼动画系统是其最大的特点.本人的感觉是极其漂亮(当然每个人的观点不同,这只是本人的观点罢了).他使用了skm骨骼动画文件格式.正是通过该引擎的骨骼动画系统,让本人完全掌握整个骨骼动画的精髓,真是收益非浅啊!!!而且整个游戏逻辑端非常清晰,在代码分析时候主要以该引擎作为原代码基础.
C:xreal/evq3整体框架与quake3变化不大,但是最重要的一点是,本人最喜欢的渲染器结构是quake3的render.dll,简直是太完美了,quake3的渲染器可以使用双处理器,为了支持双处理器的运作,quake3自己实现了一条渲染命令流水线,及其完美,收益非浅啊!!!!又要说一句非常重要的话了,伟大的慷慨的卡马克.而引xreal/evq3擎完美的保留了quake3的渲染器框架结构同时扩展了较多的功能,光影特效足够强大.增加了md5骨骼模型的渲染.在以后渲染器代码分析时候,主要以该扩展引擎为基础结合darkplaces引擎的相关技术.
总体而言, quake系列引擎的整体架构非常漂亮,是学习的好材料,并且从quake1到quake3,整体逻辑端代码变化不大, 真正比较有突破性的是渲染引擎.本人在学习quake引擎过程中常常敬佩卡马克的想象力,api函数是如此之简洁,整体框架是如此之完美,面向对象的c写得如此之漂亮,通过quake引擎,可以学到游戏设计的各个概念以及各个模块,外部工具是如何完美的结合起来,这一点是非常非常重要的.