游戏开发-技术

 一、核心编程   二、多媒体 三、互联网   四、数据库系统  

 首先,基本的数据结构、算法,数据流、线程、面向对象设计概念,模式等。

游戏软件本质上是一个实时软件。玩家透过软件,与机器或其它玩家互动。它需要眩目的声光效果、流畅的使用者输入、操作机制、网络资源等,这些项目的实作,都是与硬件高度相依的。因此,在底层技术的开发上,熟悉操作系统和开发环境比编程语言更重要。

 某些基础层次的技术,例如:游戏AI常用的决策树、有限状态机、路径搜寻等算法,2D游戏使用的平面贴图、矩阵、图块表、斜向视角、置换页滚动条、调色盘、点画、混色…等种种技术或特效,由于并不特别困难,且非常直觉;因而往往造成编程人员的错觉,认为很容易就可以彻底掌握游戏所有的底层技术。

对开发人员而言,并不需要完全通晓所有技术底层的来龙去脉;反而,了解游戏软件的基本架构,何种状况何种需求下,应该使用哪些惯用技术,以及如何使用该技术,比技术的本身如何研发更为

游戏软件开发的方式,有经验者通常会设计专属的工具,例如:场景、剧本、角色、道具编辑器…等,再根据每个项目的特色,例如:战斗系统、阶级系统、关卡系统、资源管理系统…等,做细部的修改、扩充、调整。(在网络游戏中,重要的运算工作,则会转移到服务器处理。)有时,为了弹性和灵活性,游戏的运算规则,不会直接写在程序代码内,而是独立出来,以Scripting的方式控管。

将游戏开发工具化,有两个主要的好处:首先是便于编程人员、企划人员、美术人员的分工和整合;此外,亦很重要的是,这种方式有助于量产。也因为如此,在游戏界,主要的智慧资产通常不是编程人员,而是企划人员。好的游戏不仅是声光效果出色,其内容的丰富性、创意、整体的平衡度都必须达到一定的水平。

游戏软件的设计,基本上相当符合面向对象/模块化的精神;它将几个主要的工具组合起来,每个项目、版本的更新调整,实际上拆解成每个工具各自的修正。因此,开发游戏软件最大的挑战,不在于某一方面的技术,而在于 “如何用技术表达游戏性的概念”,也就是如何将一个游戏项目拆解成独立的工具,再巧妙结合起来。

二、多媒体的部份 

 既然是游戏软件,前台的影音效果、操作界面、2D、3D成像技术,这些都是不可或缺的,甚至可以说这是游戏软件技术中最重要的一部份。底层技术方面,目前3D 的框架主流是DirectX和OpenGL/Open Inventor,前者是在Windows上运行,后者是可跨平台的。    

3D技术不仅应用在游戏界,它同时也是许多尖端工业、商业科技的关键技术。其基本原理,是将要显示的画面,以三角形顶点编码成数据流,透过3D管线作业,决定可视区域、分辨率等级、几何转换及光源处理(Trasnform & Lighting; T&L)、材质、混色……的过程,最终成为显示的象素。在现今的3D加速卡上,许多工作是由硬件来处理的;为了强化细部控制的弹性,近年来发展出一种可编程化的技术,也就是“着色语言”(Shading Language)。另一方面,基于游戏      型态和内容的变化,亦发展出各种适用于封闭或开阔的场景、建筑,角色单元、粒子系统、有机体的绘制、动画…等特殊的算法和优化技术。此外,3D贴图、阴影、特效,摄影技术莫不牵涉复杂的数学运算。      

相较于绝 大多数的商业应用软件而言,游戏所需的软件技术是最广泛最复杂的,光是要能够使用游戏引擎开发出完整的游戏,就不是很容易的了。此处强调的重点是“术业有专攻”,游戏公司本身不可能去研发所有必须的软件技术,因此对游戏制作人员而 言,不论是否自行研发,“知道怎么运用现行技术做游戏”比“知道怎么开发底层技术”更重要。同样用做饼的例子来说,当然,懂得磨面粉,甚至很会磨,这很好,绝对有帮助!但是,游戏开发的技术关键在于 “怎么做出好吃的饼”,而非 “怎么磨出好的面粉”。                      

  三、互联网的部份

网络游戏的开发当然不用去实作底层的TCP/IP,而是直接使用具有Network功能的函数/类库即可。根据游戏型态的特性,当流畅性的需要较高,而安全性的顾虑相对下降时(例如动作类、射击类、小规模的实时战略游戏等),有时也会应用到UDP 。        

网络游戏Server/Client的基本运作方式是:运算由服务器处理,客户端发出讯息请求,接到服务器响应(或收到其主动通知)后,作接口显示的更新。为了处理网络传输的延迟,在显示上会利用种种平滑、预测的计算,求得较顺畅的表现;更常见的做法则是把不重要的数据和运算,直接在前台处理,但这种设计可能会导致不公正的结果。因此,如何在流畅性和安全/公平性之间取得平衡,也是在规划时的一个不容轻忽的重点。

多人联机网络游戏目前的瓶颈在网络I/O的部份,因为网络游戏的联机型态,和许多其它网络应用服务,例如:FTP, Web Applications等不同,它的特性是高联机数 (动辄数千上 万)、高频率、低流量。但I/O处理的部份,属于操作系统层级,因此网络实作的部份,往往和操作系统绑在一起,造成开发和移植的困难。 例如:在Windows上最适合开发网络游戏的I/O模型是I/O Completion Port模型,在Unix系列,则是Asynchronous I/O模型;但目前在各平台上广泛使用的Socket API,并不直接支持对应的模型。当然,解决的方式有很多种,包括自行研发底层技术在内。(例如:笔者选择的是使用ACE 框架,它是一个成熟的跨平台的IPC框架,因而省去了许多麻烦。)

网络游戏本质上是一个分布式系统,这不仅仅针对服务器/客户端而言。为了要容纳更多的玩家同时上线,在大规模的网络游戏中,服务器不可能靠单一机器运作,采用多层(MultiTier)服务器架构是必然的,因此在比较复杂的系统中也可能必须解决服务器群组内的行程间同步问题。    
  
  四、数据库系统的部份

最广泛的还是关系型数据库系统 (RDBMS),如:Oracle、MS-SQL、MySQL、PostgreSQL 等。  数据库系统存取的性能,在某些游戏上也成为后台性能的瓶颈;这也是某些游戏项目使用自行开发的数据库的原因。因为数据库系统并非专门为游戏所设计,所以它的普通的Blocking I/O方式比较不适合游戏的需求,其每秒钟的查询操作/事务次数远低于网络 I/O动作的次数。不过,这个问题可以很容易透过软件的技术解决,例如:使用Thread Pool 或异步的I/O模型存取数据库,或者采用MultiTier 的服务器架构,使用服务器丛集等。另外,当In-Memory Database 的技术成熟之后,也可以降低此部份的开发难度。(32位机器的内存寻址只到4GB,因此这个技术的普及应会在64 位的机器上)。比较理想的作法还是应该使用正式的数据库系统,再配合软件技术解决性能的问题。

游戏程序员并不需要完全了解数据库系统的每一部份,只要知道如何与数据库建立联机、基本操作、数据表设计、索引建立、正规化、S Q L 语言、交易或预储程序等。总之,开发游戏最重要的,是 “运用适当的工具”。

大多数游戏软件偏好使用的是 “成熟的技术”而非 “尖端的技术”。但对新的技术和观念,还是应该抱持积极接触、思考的态度,不一定要学会它,但至少了解新的技术和观念,适合用来做什么,可以怎样运用。

技术以外:

不论你是否相信。当你在这个产业愈久,观察的愈多,你会发现,在游戏界,编程技术以外的“能力”,有时甚至比“技术”本身更重要! (其实绝大多数的工作本就如此,在游戏界也不例外)最重要的一点,笔者认为,是团队工作的配合度和能力。

 游戏开发的工作,就像厨师,最终的目的是做出好吃的菜色(不是种菜也不是磨面粉),不是说技术不重要,它是根本。但不应把目光局限在技术上。一个游戏成功的因素很多,少了任何一点 (包括运气),就有可能会失败。技术可以让编程人员加分,但不要因为技术的加分,反而在其它方面产生扣分的负 作用。多观摩成功者/产品的经验,学习其中的思维观点、设计规划的理念、眼界和格局,将技术实践为有价值、创新的产 品,才是成功之道。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值