这个系列只会记录部分内容,如果对内容感兴趣的可以直接看原书。
1.3 游戏引擎是什么
mod是指,一些特殊游戏玩家组成的小组,或小规模的独立游戏工作室,利用原开发商提供的工具箱修改现有的游戏,从而创作出新内容。
通常,游戏和其引擎之间的分界线是很模糊的。一些引擎有相当清晰的划分,一些则没有尝试把二者分开来。在一款游戏中,渲染代码可能特别“知悉”如何画一只妖兽;在另一款游戏中,渲染引擎可能只提供多用途的材质及着色功能,妖兽可能是完全由数据去定义的。
数据驱动架构或许可以用来分辨一个软件的哪些部分是引擎。哪些部分是游戏。若一个游戏包含硬编码逻辑或游戏规则,或使用特例代码区渲染特定种类的游戏对象,则复用该软件去制作新游戏就会变得困难的不行,因此,这里说的“游戏引擎”指的是可扩展的软件,而且不需要大量修改就能成为多款游戏软件的基础。
我们可以根据每个引擎的可复用性,把引擎放置于一个连续谱上:
1.4 不同游戏类型中的引擎差异
常见的游戏类型和各个类型的技术需求:
第一人称射击(FPS),FPS是开发技术难度极高的游戏类型之一,FPS游戏通常会注重技术:
二元空间分割树(BSP tree)
在计算机科学中,二叉空间分割(Binary space partitioning,简称BSP)是一种通过使用超平面作为分割,递归细分空间为两凸集的算法。这个过程将空间细分转化为了树结构,即所谓的二叉空间分割树(BSP树)。
关于BSP树的更多内容可以见本人的另一篇博客:
https://blog.csdn.net/packdge_black/article/details/114681992?spm=1001.2014.3001.5501
平台及其他第三人称游戏:
“平台”游戏(platformer)指的是基于人物角色的第三人称游戏,在这类游戏中,主要的机制是在平台之间跳跃。
详细内容见维基百科
https://en.wikipedia.org/wiki/Platform_game
从技术上说,平台游戏可以和第三人称射击/动作/冒险游戏类型一起考虑。
第三人称游戏特别注重的技术如下:
格斗游戏:
格斗游戏(fighting game)通常使两个玩家控制角色在一个擂台互相对打。
https://en.wikipedia.org/wiki/Fighting_game
传统格斗游戏注重以下技术:
由于这些游戏的三维世界比较小,而且摄像机一直位于动作的中心,以往这些游戏只有很少甚至不需要世界细分(world subdivision)或遮挡剔除。同样的,这些游戏不要求使用高阶的三维音频传播模型。
https://zhuanlan.zhihu.com/p/74936111
更尖端的格斗游戏,会把技术提升到另一个层次,这类作品有以下特点:
竞速游戏:
包括所有以赛道上驾驶车辆或者其他载具为主要任务的游戏。关于这类游戏的子类别,可以见下面的链接:
https://en.wikipedia.org/wiki/Racing_game
竞速游戏通常是非常线性的,这比较像旧时的FPS游戏。但移动速度一般比FPS游戏快许多。因此,这类游戏经常使用非常长的走廊式赛道和环形赛道,有时加入一些可选分支或捷径。
典型竞速游戏有一下技术特性。
关于可见性判断(visibility determination)的相关内容可以见本人的另一篇博客:
https://blog.csdn.net/packdge_black/article/details/114876523
实施战略游戏:
实时策略(real-time strategy RTS)游戏类型可以认为是由《沙丘魔堡》奠定的。RTS通常不容许玩家改变视角以观看不同距离的景物。这个限制使开发者能在RTS渲染引擎上采用各种优化。
较老的同类游戏基于栅格(grid-based 或成为基于单元/cell-based)去构建游戏世界,并使用正射投影(即3个轴投影到屏幕时仍然是平行的。和透视投影相反,正射投影不会有远小近大的效果),这两个技巧大大简化了渲染系统。
现在的RTS游戏也会使用透视投影及真三维世界,但这些游戏可能仍使用栅格排列系统,以保证作战单位和背景元素如建筑物能适当的对齐。
RTS游戏的惯用手法如下:
大型多人在线游戏:
MMOG定义为能同时支持大量玩家,一般来说,这些玩家会在非常大的持久世界里进行游戏(持久世界是指其状态能持续很长一段时间,比特定玩家每次玩的时间长很多)。
除了同时在线人数和持久性外,MMOG的游戏体验和小型的多人游戏是相似的。
MMOG的子类型有MMO角色扮演游戏(MMORPG),MMO实时策略游戏(MMORTS)及MMO第一人称射击游戏。
MMOG的核心是一组非常强大的服务器。这些服务器维护游戏世界的权威状态,管理用户登入/登出,也会提供用户间文字对话或ip电话等服务。
其他游戏类型:
还有很多类型就不详细解释了: