游戏引擎 订阅
游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、Mac OS X、微软Windows。游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。 [1] 展开全文
游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、Mac OS X、微软Windows。游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。 [1]
信息
属    性
程序或者组件
外文名
Game Engine
用    途
游戏
中文名
游戏引擎
游戏引擎功能
可见,引擎并不是什么玄乎的东西,无论是2D游戏还是 3D游戏,无论是角色扮演游戏、即时策略游戏、冒险解谜游戏或是动作射击游戏,哪怕是一个只有1兆的小游戏,都有这样一段起控制作用的代码。经过不断的进化,如今的游戏引擎已经发展为一套由多个子系统共同构成的复杂系统,从建模、动画到光影、粒子特效,从物理系统、碰撞检测到文件管理、网络特性,还有专业的编辑工具和插件,几乎涵盖了开发过程中的所有重要环节,以下就对引擎的一些关键部件作一个简单的介绍。首先是光影效果,即场景中的光源对处于其中的人和物的影响方式。游戏的光影效果完全是由引擎控制的,折射、反射等基本的光学原理以及动态光源、彩色光源等高级效果都是通过引擎的不同编程技术实现的。其次是动画,游戏所采用的动画系统可以分为两种:一是骨骼动画系统,一是模型动画系统,前者用内置的骨骼带动物体产生运动,比较常见,后者则是在模型的基础上直接进行变形。引擎把这两种动画系统预先植入游戏,方便动画师为角色设计丰富的动作造型。引擎的另一重要功能是提供物理系统,这可以使物体的运动遵循固定的规律,例如,当角色跳起的时候,系统内定的重力值将决定他能跳多高,以及他下落的速度有多快,子弹的飞行轨迹、车辆的颠簸方式也都是由物理系统决定的。碰撞探测是物理系统的核心部分,它可以探测游戏中各物体的物理边缘。当两个3D物体撞在一起的时候,这种技术可以防止它们相互穿过,这就确保了当你撞在墙上的时候,不会穿墙而过,也不会把墙撞倒,因为碰撞探测会根据你和墙之间的特性确定两者的位置和相互的作用关系。渲染是引擎最重要的功能之一,当3D模型制作完毕之后,美工会按照不同的面把材质贴图赋予模型,这相当于为骨骼蒙上皮肤,最后再通过渲染引擎把模型、动画、光影、特效等所有效果实时计算出来并展示在屏幕上。渲染引擎在引擎的所有部件当中是最复杂的,它的强大与否直接决定着最终的输出质量。引擎还有一个重要的职责就是负责玩家与电脑之间的沟通,处理来自键盘、鼠标、摇杆和其它外设的信号。如果游戏支持联网特性的话,网络代码也会被集成在引擎中,用于管理客户端与服务器之间的通信。通过上面这些枯燥的介绍我们至少可以了解到一点:引擎相当于游戏的框架,框架搭好后,关卡设计师、建模师、动画师只要往里填充内容就可以了。因此,在3D游戏的开发过程中,引擎的制作往往会占用非常多的时间,《马克思·佩恩》的MAX-FX引擎从最初的雏形Final Reality到最终的成品共花了四年多时间,LithTech引擎的开发共花了整整五年时间,耗资700万美元,Monolith公司(LithTech引擎的开发者)的老板詹森·霍尔甚至不无懊悔地说:“如果当初意识到制作自己的引擎要付出这么大的代价的话,我们根本就不可能去做这种傻事。没有人会预料得到五年后的市场究竟是怎样的。”正是出于节约成本、缩短周期和降低风险这三方面的考虑,越来越多的开发者倾向于使用第三方的现成引擎制作自己的游戏,一个庞大的引擎授权市场已经形成。其中最大的收益者是各大网络游戏公司,通过第三方引擎开发的网络游戏获益巨大。但随着市场急剧变化,用第三方引擎开发网络游戏的成本也越来越高。于是游戏引擎开发商们开始绞尽脑汁设计一种可以大量节约开发成本和周期的引擎。直到2010年zerodin引擎开发的巨作Dragona出品引起了各大游戏业巨头关注,因为此时方才发现了巨作也可以用这么少的成本,这么短的时间开发而成。
收起全文
精华内容
参与话题
问答
  • 游戏开发工具之游戏引擎

    千次阅读 2018-11-16 22:22:51
    目前市场上游戏引擎多种多样,主流的游戏引擎有unity,unreal,建议初学游戏开发的小伙伴先从这两个引擎学起。有人说,unreal要比unity难学很多,初学者应先接触unity,其实我个人觉得游戏引擎就是普通软件,unity与...

    今天第一次与大家分享技术文章。

    谈到游戏开发工具,我们首先能想到的是游戏引擎,平面设计工具与建模工具。今天主要和大家分享一下我对游戏引擎的看法与认知。

    目前市场上游戏引擎多种多样,主流的游戏引擎有unity,unreal,建议初学游戏开发的小伙伴先从这两个引擎学起。有人说,unreal要比unity难学很多,初学者应先接触unity,其实我个人觉得游戏引擎就是普通软件,unity与unreal没有太大差异,包括市场上众多游戏引擎均是如此。倘若有一个游戏引擎的使用经验,再去学习其它工具,都感觉能轻松上手。关键是你能不能坚持学好自己接触的第一个游戏引擎。

    unity工作界面

    在这里插入图片描述

    我在一开始学习unity的时候,它比自己想象的学习难度要大很多。首先,整个开发界面是英文的(目前最新版已经支持中文,对于新学者来说,可以减轻学习压力),你需要熟悉里面的操作,还要清楚它的功能。我建议大家不要急于做项目上手,最好是先看一些基础的视频教程,熟悉基本操作之后开始接触如何编程,unity使用c#语言进行开发,所以熟悉这门语言之后再开始接触unity内置代码库是比较高效的学习顺序。最后需要做的就是实战了,先跟着教程做一个小游戏让自己有一些成就感(这个很重要,我管它叫“激励法学习”,不然你可能会中途放弃),然后就开始做属于自己的游戏。熟练使用引擎往往是从你做第一个自己的游戏时开始的,如果不去做自己的游戏,你会很快忘记之前“学会”的操作(不信的话可以试试)。

    unreal工作界面
    在这里插入图片描述

    至于unreal引擎,它与unity的不同之处在于它主要拥有强大的“蓝图”编辑功能,这为不会编程的开发者提供了方便的接口。今天主要和大家分享关于unity的学习经验,以后再和大家分享unreal的学习过程。

    学习游戏开发的过程是比较枯燥乏味的,但只有学会基础,才能做出属于自己的作品,我坚持下来了,你也一定可以做到。同时呢,今天给大家分享一些我在学习过程中看的视频教程,很好的视频,建议大家观看,阅读原文点开分享链接。

    当然,游戏引擎的学习光靠这些是远远不够的,还有很长的路要走,我会在接下来的文章里继续介绍。至于c#语言,想要从事游戏开发行业是必须要学的,所以,下面的链接是c#精品教程,免费赠送大家。

    链接:https://pan.baidu.com/s/1V7z2B-ZNKP5nXR1p217E0w

    提取码:urxp

    展开全文
  • 游戏引擎

    千次阅读 2018-06-05 23:22:19
    什么是游戏引擎?     机就无法跑起来,人类没有心脏就会死亡。而引擎就是发动机,就是心脏。 维基百科对于游戏引擎的定义:     游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像...

    什么是游戏引擎?

        机就无法跑起来,人类没有心脏就会死亡。而引擎就是发动机,就是心脏。

    维基百科对于游戏引擎的定义:

        游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程序而不用由零开始。大部分都支持多种操作系统平台,如 Linux、Mac OS X、Windows。大多数游戏引擎包含以下系统:渲染引擎、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。

        游戏引擎就是图形引擎。准确地说,游戏引擎约等于图形引擎。玩家口中所说的“虚幻”“寒霜”等,这每一款引擎对于图形渲染的处理方式都不同,所以用某个引擎编写出来的游戏,具体的表现画面也会不同。比如,有的引擎编写出的光影效果特别绚丽,有的则粒子效果特别真实。

        游戏引擎是一整套游戏解决方案。其实,游戏引擎并不仅仅等同于图形引擎。图形引擎只是游戏引擎中一个占比极大的组成部分。一款好的游戏引擎,不仅要看它对于图形图像的处理能力,也要看它对于其他部分的处理能力,比如对音频、音效的播放、键盘鼠标的处理,以及 UI 界面的编辑和各种处理工具的提供。这里的处理工具包括地图编辑器、关卡编辑器、人物编辑器、资源编辑器、物理碰撞、碰撞检测等。所以,从专业的角度讲,游戏引擎是完成开发一套游戏的解决方案,而不仅涉及图形部分。

        游戏引擎是一整套编程接口。要写游戏就必须写程序,所以有游戏引擎就一定需要编程。不管你是直接面对引擎编写代码,还是在引擎提供的编辑器(比如关卡编辑器)基础上编写简单的逻辑代码,写代码都是必不可少的。在引擎提供的编程接口上,你能很容易地调用各种接口完成游戏的开发。

    游戏引擎的工作工程

        从代码层面来说。这里是一段伪代码:

    int DrawLine(const Surface& s, int sx, int sy, int fx, int fy, int fit, const Color& color);

        这段伪代码提供了一个在屏幕上画一个线条的函数。该函数提供了 7 个传入参数,分别是:

    • 目标图层
    • 线(在游戏窗口内)的起始 x 点
    • 线(在游戏窗口内)的起始 y 点
    • 线(在游戏窗口内)的终止 x 点
    • 线(在游戏窗口内)的终止 y 点
    • 线条粗细
    • 线条颜色

        在调用了这个函数之后,就能很容易在屏幕上画出一个线条。同时,在这个函数背后,引擎做了一系列这样的动作:

    • 判断传入的 Surface 图层对象是否正确、是否存在;
    • 判断传入的起始点、终止点是不是存在负数;
    • 判断颜色是不是正确;
    • 拆分 Color 变量为 RGB 值,填入到 SDL 绘图接口,调用 SDL 绘图接口绘制一条线。

        画线的接口函数在背后分解、组合、计算,然后会将绘制工作交给底层绘图接口。

        这个画线函数,它展示了引擎中函数的使用方式。如果我们用一般的画线函数画圆,那首先要知道圆的直径和计算方式;如果画矩形,那就要知道哪里是起始点和终结点。这一系列动作等于将引擎所做的工作包含在了画线函数里,只需要关心画线的这一系列参数如何使用就可以了。

        从非代码层面来说

        游戏引擎其实也包括游戏开发的一系列工具,也就是诸如地图编辑器、关卡编辑器、人物编辑器、资源编辑器等。美术、策划、制作人等,这些开发流程中的责任人,可以往工具内填入需要的东西,制作出需要的内容。

        拿人物编辑器来说。如果我们使用通用编辑工具(比如 3DMAX、Maya 等)编辑出来内容,需要经过格式的转换才能应用到游戏中,但是这样不仅耗费转换时间,也耗费调试时间。因为通用工具可能并不适合引擎本身所定义的格式,需要不停修正和更改。如果引擎本身就提供了这样的制作工具,那么制作出的内容直接就能在游戏中使用,不需要转换,所见即所得。

        游戏引擎背后的工作方式是:

        在代码层面,游戏引擎是对绘图接口、操作系统、音频等接口进行的代码层面的封装;

        在工具层面,游戏引擎是一整套游戏内容的制作工具,方便你制作针对这个引擎的游戏内容。

    自己开发引擎还是直接购买?

        从一般意义上讲,如果有实力,当然是自己开发引擎更贴合公司的情况。然而,这样付出的代价就是,花费大量的人力和财力,而且,以一般小公司或者起步阶段的开发者的开发水平,编写出的引擎,很可能只是一个半成品或者问题多多的残次品。自研引擎并不是一个不可能完成的任务,但是要看公司的财力和程序员的实力。

        购买商业引擎是现在大部分公司都会走的一条路。购买商业引擎只需要花费一笔钱就能拿到成熟的游戏引擎,直接可以开发游戏,然而付出的代价就是,可能需要从头开始学习这套引擎的工作原理、工具套装。

        如果你非常熟悉 3DMAX 等通用工具,那要从头学习开发工具,就会产生许多问题,比如:

    •     引擎中包含的开发工具基本没有通用性可言。就算吃透了工具,对你今后的能力提升和职业规划也没有明显的帮助;

    •     如果引擎升级或者更换引擎,就需要从头再学一次工具,会耗费大量时间和精力。当然会有一些优秀的商业引擎支持通用工具制作的内容导出和转换,直接在引擎中可以使用,当然这种引擎的购买费用也会更高;

    •     另外,商业引擎本身也会存在一些隐藏得很深的 bug。在游戏发布后,这些 bug 可能会影响到游戏本身的质量和口碑。引擎出问题,游戏一定出问题,这也是购买商业引擎需要考量的一个风险。

        但是,在实际的开发过程中,考虑到公司的经济实力和程序员的开发能力,一般来说,大多数开发者都会选择购买商业引擎,毕竟这在一定程度上,是个非常省时省力的事情。

    游戏引擎是用什么编写的?

        我们需要掌握更多游戏引擎相关的知识。因为,不管你是购买游戏引擎还是自己开发游戏引擎,了解游戏引擎,会让你对游戏编程的总体脉络有一个了解。一旦在开发过程中出现问题,比如你发现屏幕贴图出问题了,那究竟是自己的代码出现问题,还是引擎本身出现问题呢?熟知游戏引擎的开发逻辑,你就能很快定位问题所在。

        游戏引擎并没有一种固定的开发语言,依赖于你所制作游戏的目标平台是什么。

         1.C/C++

        在 Windows 或者 Linux 下开发游戏,游戏引擎 99% 都是使用 C/C++ 或者汇编语言编写。由于 C/C++ 和汇编运行效率高,所以在 Windows 下的执行效率也非常高。你看到的 Python 游戏引擎、Ruby 游戏引擎等脚本语言引擎,都是在 C/C++ 的基础上进行封装的。这样可以方便程序员将专注力放在游戏逻辑上,而不是在处理底层问题上。

         2. JavaScript/TypeScript

         如果是 HTML5 游戏,游戏引擎的编程接口 99% 是使用 JavaScript 完成的。比如耳熟能详的 Cocos2d 引擎、白鹭引擎等等。至于其他配套的开发工具,可以使用任意软件开发语言进行编写。

         3. .NET

         经过微软的努力和版本迭代,在 Windows 下,.NET 的运行效率和开发效率已经提高了好几个等级。由于和 Windows 紧密结合,现在的.NET 的运行效率只比 C/C++ 编写的代码低一点。在电脑配置比较高的情况下,用户基本不会有太多的感知。而.NET 对于 Windows 底层的调用和控制,比 C/C++ 更方便,编程也更容易,所以现在已经出现了一些引擎是使用.NET 编写的。

         4. Java

        和.NET 一样,使用 Java 编写的游戏引擎并不多。虽然 Java 的运行效率已经有了质的提升,但是对于编写大型游戏来说还是有相当大的瓶颈。随着电脑硬件配置的提升,使用 Java 编写游戏也不再是一件不可能的事情。比如大火的《我的世界》,就是使用 Java 编写的。

        游戏引擎是一整套的游戏开发程序接口和开发组件,可以让你更方便、更专注于游戏的开发;

        游戏引擎控制着游戏的几乎所有内容,游戏的表现质量和游戏引擎直接相关;

        针对不同的平台,游戏引擎所使用的编程语言也不一样。而了解了游戏引擎的编写,在之后的开发过程中,会有非常多的便利。

    展开全文
  • SpriteKit游戏引擎视频教程

    万人学习 2015-01-25 17:05:55
    SpriteKit是Apple新推出的2D游戏引擎,与Cocos2d-x类似。可以使用Objective-C和Swift语言开发。可开发iOS和Mac OS X下的2D游戏。本课程主要介绍了SpriteKit的常用技术,包括基础知识、action、粒子系统、物理引擎等...
  • 3D游戏引擎之游戏摄像机的使用

    千人学习 2015-08-24 15:30:08
    3D游戏引擎之游戏摄像机的使用视频教程,该课程主要讲解游戏中摄像机以及摄像机在游戏中的运用和注意问题。 嘉宾介绍:姜雪伟,技术总监,拥有13年IT实战研发经验,先后就职于网龙、久游、趣游等IT公司担任过主程...
  • 3D游戏引擎设计与开发

    万人学习 2015-03-16 08:27:45
    本课程主要是讲解3D游戏引擎架构,以及如何去封装3D游戏引擎,充分利用固定流水线逐一实现从游戏开发核心底层到游戏逻辑的编写,引领你一步步编写3D引擎。以及如何在封装好游戏引擎的基础上进行游戏逻辑开发。
  • 游戏引擎架构

    千次阅读 2014-02-19 14:39:07
    游戏引擎架构 宣传语:迈向现代游戏之路完美入口 业界万众企盼 隆重推荐) 作者:【美】Jason Gregory(杰森.格雷戈瑞) 著 译者:叶劲峰 译 ISBN: 978-7-121-22288-7 出版时间:2014年1月出版 定价:128...

    游戏引擎架构


    宣传语:迈向现代游戏之路完美入口 业界万众企盼 隆重推荐

    作者:【美】Jason Gregory(杰森.格雷戈瑞) 著

    译者:叶劲峰 译

    ISBN: 978-7-121-22288-7

    出版时间:2014年1月出版

    定价:128.00元

    页数:800页

    开本:16开


    编辑推荐

    《游戏引擎架构》由游戏界传奇人物云风及“天天爱消除”团队倾情作序推荐,既是游戏工作者必读Bible,对其他IT从业者也不无裨益。

    內容包括:

    - 游戏开发中的大规模C++软件架构

    - 游戏编程所需的数学

    - 供调试、源代码控制及性能剖析的游戏开发工具

    - 引擎基础系统、渲染、碰撞、物理、角色动画、游戏世界对象模型等引擎子系统

    - 多平台游戏引擎

    - 多处理器环境下的游戏编程

    - 工作管道及游戏资产数据库


    内容提要

    《游戏引擎架构》同时涵盖游戏引擎软件开发的理论及实践,并对多方面的题目进行探讨。本书讨论到的概念及技巧实际应用于现实中的游戏工作室,如艺电及顽皮狗。虽然书中采用的例子通常依据一些专门的技术,但是讨论范围远超于某个引擎或API。文中的参考及引用也非常有用,可让读者继续深入游戏开发过程的任何特定方向。

    《游戏引擎架构》为一个大学程度的游戏编程课程而编写,但也适合软件工程师、业余爱好者、自学游戏程序员,以及游戏产业的从业人员。通过阅读《游戏引擎架构》,资历较浅的游戏工程师可以巩固他们所学的游戏技术及引擎架构的知识,专注某一领域的资深程序员也能从本书更为全面的介绍中获益。


    目录

    推荐序1 iii

    推荐序2 v

    译序         vii

    序言         xvii

    前言         xix

    致谢         xxi

    第一部分  基础     1

    第1章  导论          3

    1.1 典型游戏团队的结构      4

    1.2 游戏是什么      7

    1.3 游戏引擎是什么      10

    1.4 不同游戏类型中的引擎差异 11

    1.5 游戏引擎概观 22

    1.6 运行时引擎架构      27

    1.7 工具及资产管道      46

    第2章  专业工具          53

    2.1 版本控制 53

    2.2 微软Visual Studio    61

    2.3 剖析工具 78

    2.4 内存泄漏和损坏检测      79

    2.5 其他工具 80

    第3章  游戏软件工程基础          83

    3.1 重温C++及最佳实践       83

    3.2 C/C++的数据、代码及内存     90

    3.3 捕捉及处理错误      118

    第4章  游戏所需的三维数学     125

    4.1 在二维中解决三维问题 125

    4.2 点和矢量 125

    4.3 矩阵 139

    4.4 四元数      156

    4.5 比较各种旋转表达方式 164

    4.6 其他数学对象 168

    4.7 硬件加速的SIMD运算   173

    4.8 产生随机数      180

    第二部分  低阶引擎系统     183

    第5章  游戏支持系统          185

    5.1 子系统的启动和终止      185

    5.2 内存管理 193

    5.3 容器 208

    5.4 字符串      225

    5.5 引擎配置 234

    第6章  资源及文件系统     241

    6.1 文件系统 241

    6.2 资源管理器      251

    第7章  游戏循环及实时模拟     277

    7.1 渲染循环 277

    7.2 游戏循环 278

    7.3 游戏循环的架构风格      280

    7.4 抽象时间线      283

    7.5 测量及处理时间      285

    7.6 多处理器的游戏循环      296

    7.7 网络多人游戏循环 304

    第8章  人体学接口设备(HID)       309

    8.1 各种人体学接口设备      309

    8.2 人体学接口设备的接口技术 311

    8.3 输入类型 312

    8.4 输出类型 316

    8.5 游戏引擎的人体学接口设备系统 318

    8.6 人体学接口设备使用实践      332

    第9章  调试及开发工具     333

    9.1 日志及跟踪      333

    9.2 调试用的绘图功能 337

    9.3 游戏内置菜单 344

    9.4 游戏内置主控台      347

    9.5 调试用摄像机和游戏暂停      348

    9.6 作弊 348

    9.7 屏幕截图及录像      349

    9.8 游戏内置性能剖析 349

    9.9 游戏内置的内存统计和泄漏检测 356

    第三部分  图形及动画         359

    第10章  渲染引擎       361

    10.1 采用深度缓冲的三角形光栅化基础   361

    10.2 渲染管道        404

    10.3 高级光照及全局光照   426

    10.4 视觉效果和覆盖层        438

    10.5 延伸阅读        446

    第11章  动画系统       447

    11.1 角色动画的类型   447

    11.2 骨骼        452

    11.3 姿势        454

    11.4 动画片段        459

    11.5 蒙皮及生成矩阵调色板        471

    11.6 动画混合        476

    11.7 后期处理        493

    11.8 压缩技术        496

    11.9 动画系统架构        501

    11.10 动画管道      502

    11.11 动作状态机 515

    11.12 动画控制器 535

    第12章  碰撞及刚体动力学       537

    12.1 你想在游戏中加入物理吗   537

    12.2 碰撞/物理中间件  542

    12.3 碰撞检测系统        544

    12.4 刚体动力学   569

    12.5 整合物理引擎至游戏   601

    12.6 展望:高级物理功能   616

    第四部分  游戏性         617

    第13章  游戏性系统简介   619

    13.1 剖析游戏世界        619

    13.2 实现动态元素:游戏对象   623

    13.3 数据驱动游戏引擎        626

    13.4 游戏世界编辑器   627

    第14章  运行时游戏性基础系统       637

    14.1 游戏性基础系统的组件        637

    14.2 各种运行时对象模型架构   640

    14.3 世界组块的数据格式   657

    14.4 游戏世界的加载和串流        663

    14.5 对象引用与世界查询   670

    14.6 实时更新游戏对象        676

    14.7 事件与消息泵        690

    14.8 脚本        707

    14.9 高层次的游戏流程        726

    第五部分  总结     727

    第15章  还有更多内容吗   729

    15.1 一些未谈及的引擎系统        729

    15.2 游戏性系统   730

    参考文献         733

    中文索引         737

    英文索引         755


    精彩节摘

    推荐序1

    最初拿到《Game Engine Architecture》一书的英文版,是编辑侠少邮寄给我的打印版。他建议我接下翻译此书的合同。当时我正在杭州带领一个团队开发3D游戏引擎,我和我的同事都对这本书的内容颇有兴趣,两大本打印的英文书立刻在同事间传开。可惜那段时间个人精力顾及不来,把近千页的英文读物精读而后翻译成中文对个人的业余时间是个极大的挑战,不能担此翻译任务颇为遗憾。

    不久以后听说Milo Yip(叶劲峰)已开始着手翻译,甚为欣喜。翻译此巨著,他一定是比我更合适的人选。我和Milo虽未曾蒙面,但神交已久。在网络上读过一些他的成长经历,和我颇为相似,心有戚戚。他对游戏3D实时渲染技术研究精深为我所不及,我们曾通过Google Talk讨论过许多技术问题,他都有独到的见解。翻译工作开始后,Milo是香港人,英文技术术语在香港的中文译法和大陆的有许多不同。但此书由大陆出版社出版,考虑到面对的读者主要是大陆程序员,Milo希望能更符合大陆程序员的用词习惯,所以在翻译一开始就通过Google Docs创建了协作页面,邀请大家共同探讨书中技术名词的中译名。从中我们可以一窥他作为译者的慎重。

    三年之后,有幸在出版之前就拿到了完整的译本。这是一本用LaTeX精心排版的800页的电子书,我只花了一周时间,几乎是一口气读完。流畅的阅读享受,绝对不仅仅是因为原著精彩的内容,精美的版面和翔实的译注也加了不少分。

    在阅读本书的过程中,我不只一次地获得共鸣。例如在第5章的内存管理系统的介绍中,作者介绍的几种游戏特有的内存管理方法我都曾在项目中用过,而这是第一次有书籍专门将这些方法详尽记录;又如第11章动画系统的介绍,我们也同样在3D引擎开发过程中改进原有动画片段混合方法的经历。虽然书中介绍的每个技术点,都可能可以在某篇论文,某本其他的书的章节,某篇网络blog上见过,但之前却无一本书可以把这些东西放在一起相互参照。对于从事游戏引擎开发的程序员来说,了解各种引擎在处理每个具体问题时的方案是相当重要的。而每种方案又各有利弊,即使不做引擎开发工作而是在某一特定游戏引擎上做游戏开发,从中也可以理解引擎的局限性以及可能的改进方法。尤其是第14章介绍的对游戏性相关系统的设计,各个开发人员几乎都是凭经验设计,很少见有书籍对这些做总结。对于基于渲染引擎做开发的游戏程序员,这是必须面对的工作,这一章会有很大的借鉴意义。

    本书作者是业内资深的游戏引擎开发人,他所参于的《神秘海域》和《最后生还者》都是我的个人最爱。在玩游戏的过程中,作为游戏程序员的天性,自然会不断地猜想各个技术点是如何实现的,背后需要怎样的工具支持。能在书中一一得到印证是件特别开心的事情。作者反复强调代码实践的重要性,在书中遍布着C++代码。我不认为这些代码有直接取来使用的价值,但它们极大地帮助了读者理解书中的技术点。书中列出的顽皮狗工作室用lisp方言作为游戏配置脚本的范例也给我很大的启发,有了这些具体的代码示例以及作者本身的一线工程师背景,也让我确信书中那些关于主机游戏开发相关等,我所没有接触过的内容都也绝非泛泛而谈。

    国内的游戏开发社区的壮大,主要是随最近十年的MMO风潮而生。而就在大型网络游戏在中国有些畸形发展,让这类游戏偏离电子游戏游戏性的趋势时,我们有幸迎来了为移动设备开发游戏的大潮。游戏开发的重心重新回到游戏性本身。我们更需要去借鉴单机游戏是如何为玩家带来更纯粹的游戏体验,我相信书中记录的各种技术点会变的更有帮助。

                                                                                                           云风 @简悦云风

    推荐序2

    在我认识的许多游戏业开发同仁中,只有少数香港同胞,Milo Yip(叶劲峰)却正是这样一位给我印象非常深刻的优秀香港游戏开发者。我俩认识,是在Milo加入腾讯互动娱乐研发部引擎技术中心后,说来到现在也只是两年多时间。其间,他为人的谦逊务实,对待技术问题的严谨求真态度,对算法设计和性能优化的娴熟技术,都为人所称道。Milo一丝不苟的工作风格,甚至表现在对待技术文档排版这类事情上(Milo常执著地用LaTeX将技术文档排到完美),我想这一定是他在香港读大学、硕士及在香港理工大学的多媒体创新中心从事研究员,一贯沿袭至今的好作风。

    我很高兴腾讯游戏有实力吸引到这样优秀的技术专家;即使在其已从上海迁回香港家中,依然选择到深圳腾讯互动娱乐总部工作。叶兄从此工作日每天早晚过关,来往香港和深圳两地,虽有舟车劳顿,但是兼顾了对家庭的照顾和在游戏引擎方面的专业研究,希望这样的状况是令他满意的。

    认识叶兄当时,我便知道他在进行Jason Gregory所著《游戏引擎架构》一书的中译工作。因为自己从前也有业余翻译游戏开发有关书籍的经历,所以我能理解其中的辛苦和责任重大,对叶兄也更多一分钦佩。我以为,本书以及本书的中文读者最大的幸运便是,遇到叶兄这位对游戏有着如同对家对国般强烈责任感,犹如“游戏科学工作者”般的专业译者!

    现在(2013年年末)无疑是游戏史上对独立游戏制作者最友好的年代。开发设备方便获得(相对过往仅由主机厂商授权才能获得专利开发设备,现在有一台智能手机和一台个人电脑就可以开发)、技术工具友好、调试过程简单方便,且互联网上有丰富的例程和开源代码参考,也有网上社区便于交流。很多爱好者能够很快地制作出可运行的游戏原型,其中一些也能发布到应用商店。

    但是不全面掌握各方面知识,尤其是游戏引擎架构知识,往往只能停留在勉强修改、凑合重用别人提供的资源的应用程度上,难以做极限的性能改进,更妄谈革命式的架构创新。这样的程度是很难在成千上万的游戏中脱颖而出的。我们所认可的真正的游戏大作,必定是在某方面大幅超越用户期待的产品。为了打造这样的产品,游戏内容创作者(策划、美术等)需要“戴着镣铐跳舞”(在当前的机能下争取更多的创作自由度),而引擎架构合理的游戏可以经得起也值得进行反复优化,最终可以提供更多的自由度,这是大作出现的技术前提。

    书的作者、译者、出版社的编者,加上读者,大家是因书而结缘的有缘人。因叶兄这本《游戏引擎架构》译著而在线上线下相识的读者们,你们是不是因“了解游戏引擎架构,从而制作/优化好游戏”这样的理想而结了缘呢?

    亲爱的读者,愿你的游戏有一天因谜题巧妙绝伦、趣味超凡、虚拟世界气势磅礴、视觉效果逼真精美等专业因素取得业界褒奖,并得到玩家真诚的赞美。希望届时曾读叶兄这本《游戏引擎架构》译作的你,也可以回馈社会,回馈游戏开发的学习社区,帮助新人。希望你也可以建立微信公众号、博客等,或翻译游戏开发书籍,造福外语不好的读者,所以如果你的外语(英语、日语、韩语之于游戏行业比较重要)水平仍需精进,现在也可以同步加油了!

                                                                                                              沙鹰  @也是沙鹰

    译序

     

    数千年以来,艺术家们通过文学、绘画、雕塑、建筑、音乐、舞蹈、戏剧等传统艺术形式充实人类的精神层面。自20世纪中叶,计算机的普及派生出另一种艺术形式电子游戏。游戏结合了上述传统艺术以及近代科技派生的其他艺术(如摄影、电影、动画),并且完全脱离了艺术欣赏这种单向传递的方式游戏必然是互动的,“玩家”并不是“读者”、“观众”或“听众”,而是进入游戏世界、感知并对世界做出反应的参与者。

    基于游戏的互动本质,游戏的制作通常比其他大众艺术复杂。商业游戏的制作通常需要各种人才的参与,而他们则需要依赖各种工具及科技。游戏引擎便是专门为游戏而设计的工具及科技集成。之所以称为引擎,如同交通工具中的引擎,提供了最核心的技术部分。因为复杂,研发成本高,人们不希望制作每款游戏(或车款)时都重新设计引擎,重用性是游戏引擎的一个重要设计目标。

    然而,各游戏本身的性质以及平台的差异,使研发完全通用的游戏引擎变得极困难,甚至不可能。市面上出售的游戏引擎,有一些虽然已经达到很高的技术水平,但在商业应用中,很多时候还是需要因应个别游戏项目对引擎改造、整合、扩展及优化。因此,即使能使用市面上最好的商用引擎或自研引擎,我们仍需要理解当中的架构、各种机制和技术,并且分析及解决在制作中遇到的问题。这些也是译者曾任于上海两家工作室时的主要工作范畴。

    选择翻译此著作,主要原因是在阅读中得到共鸣,并且能知悉一些知名游戏作品实际上所采用的方案。有感坊间大部分游戏开发书籍并不是由业内人士执笔,内容只足够应付一些最简单的游戏开发,欠缺宏观比较各种方案,技术与当今实际情况也有很大差距。而一些Gems类丛书虽然偶有好文章,但受形式所限欠缺系统性、全面性。难得本书原作者身为世界一流游戏工作室的资深游戏开发者,在繁重的游戏开发工作外,还在大学教授游戏开发课程以至编写本著作。此外,从与内地同事的交流中,了解到许多从业者不愿意阅读外文书籍。为了普及知识及反馈业界社会,希望能尽绵力。

    或许有些人以为本著作是针对单机/游戏机游戏的,并不适合国内以网游为主的环境。但译者认为这是一种误解,许多游戏本身所涉及的技术是具通用性的。例如游戏性相关的游戏性系统、场景管理、人工智能、物理模拟等部分,许多时候也会同时用于网游的前台和后台。现时,一些动作为主、非MMO的国内端游甚至会直接在后台运行传统意义上的游戏引擎。至于前台相关的技术,单机和端游的区别更少。此外,随着近年移动终端的兴起,其硬件性能已超越传统掌上游戏机,开发手游所需的技术与传统掌上游戏机并无太大差异。还可预料,现时单机/游戏机的一些较高级的架构及技术,将在不远的未来着陆移动终端平台。

    译者认为,本书涵括游戏开发技术的方方面面,同时适合入门及经验丰富的游戏程序员。书名中的架构二字,并不单是给出一个系统结构图,而是描述每个子系统的需求、相关技术及与其他子系统的关系。对译者本人而言,本书的第11章(动画系统)及第14章(运行时游戏性基础系统)是本书特別精彩之处,含有许多少见于其他书籍的内容。而第10章(渲染引擎)由于是游戏引擎中的一个极大的部分,有限的篇幅可能未能覆盖广度及深度,推荐读者参考[1],人工智能方面也需参考其他专著。

    本译作采用LaTeX排版,以Inkscape编译矢量图片。为了令阅读更流畅,内文中的网址都统一改以脚注标示。另外,由于现时游戏开发相关的文献以英文为主,而且游戏开发涉及的知识面很广,本译作尽量以括号形式保留英文术语。为了方便读者查找内容,在附录中增设中英文双向索引(索引条目与原著的不同)。

    本人在香港成长学习及工作,至2008年才赴内地游戏工作室工作,不黯内地的中文写作及用字习惯,翻译中曾遇到不少困难。有幸得到出版社人员以及良师益友的帮助,才能完成本译作。特别感谢周筠老师支持本作的提案,并耐心地给予协助及鼓励。编辑张春雨老师和卢鸫翔老师,以及好友余晟给予了大量翻译上的知识及指导。也感谢游戏业界专家云风、大宝和Dave给予了许多宝贵意见。此书的翻译及排版工作比预期更花时间,感谢妻子及儿女们的体谅。此次翻译工作历时三年半,因工作及家庭事宜导致严重延误,唯有在翻译及排版工作上更尽心尽力,希望求得等待此译作的读者们谅解。无论是批评或建议,诚希阁下通过电邮、新浪微博、豆瓣等渠道不吝赐教。

                                                                                                                           叶劲峰(Milo Yip)                                                                                                                       2013年10月

    作者简介

    作者介绍:Jason Gregory在1994年开始任职专业软件工程师,自1999年3月开始在游戏产业中任职软件工程师。在圣迭哥Midway Home Entertainment公司开始游戏编程的他,为《疯狂飞行员(Freaky Flyers)》及《Crank theWeasel》开发PlayStation 2/Xbox上的动画系统。在2003年,他转到洛杉矶艺电,为《荣誉勋章:血战太平洋(Medal of Honor: Pacific Assault)》开发游戏引擎及游戏性技术,并在《荣誉勋章:空降神兵(Medal of Honor: Airborne)》中担任首席工程师。他现时是顽皮狗公司的通才程序员,为《神秘海域:德雷克船长的宝藏(Uncharted: Drake's Fortune)》及《神秘海域:纵横四海(Uncharted: Among Thieves)》开发引擎及游戏性软件。他也在南加州大学教授游戏技术的课程。

     

    译者简介:叶劲峰(Milo Yip)从小自习编程,并爱好计算机图形学。上中学时兼职开发策略RPG《王子传奇》,该游戏在1995年于台湾发行。其后他获取了香港大学认知科学学士、香港中文大学系统工程及工程管理哲学硕士。毕业后在香港理工大学设计学院从事游戏引擎及相关技术的研发,职至项目主任。除发表学术文章外,也曾合著《DirectX9游戏编程实务》。2008年往上海育碧担任引擎工程师开发《美食从天而降(Cloudy with a Chance of Meatballs)》Xbox360/PS3/Wii/PC,2009年起于麻辣马开发《爱丽丝:疯狂回归(Alice: Madness Returns)》Xbox360/PS3/PC,2011年加入腾讯互动娱乐引擎技术中心担任专家工程师,所研发的技术已用于《斗战神》、《天涯明月刀》、《众神争霸》等项目中。

     


    媒体评论

    本书针对每一个现代游戏开发相关的重要系统和话题,给出一个完美、综合的概览,无论是计算机科学、软件工程,或是游戏主程,以及业余爱好者、游戏玩家,本书均不可或缺。

    ——获评CHOICE杰出学术作品

    ……这里有最专业的领域知识与概念讲解……有了它,你将具备对如何构建游戏引擎的深入理解……本书让人印象尤其深刻,因为该领域再也找不到另一本如此详尽的图书。

    ——Eric Haines,www.realtimerendering.com/blog/

    作者将数年经验及专业积累集中在这本完整、全面的著作中,内容跨越游戏引擎开发理论与实践。书中提供的游戏开发过程各方面的精彩实例,保罗万象且对读者大有补益。不仅游戏引擎开发人员看后会大受鼓舞,甚至也可作为有经验的该领域技术专家的实用参考。本书可谓无价,除内容“用户友好”外,其附录也值得强烈推荐,无论是个人开发者、专家还是计算机科学学术人员,都可将其作为资源集合与参考资料,当然游戏设计架构人员更是不可不读。

    ——The Midwest Book Review

    本书涵盖有关如何开发游戏引擎要旨的巨量数据。

    ——Gamasutra.com, November 2009

    本书曾位列“the Game Developer”杂志前沿大奖候选图书。

    ——PR Newswire


    前言

    欢迎来到《游戏引擎架构》世界。本书旨在全面探讨典型商业游戏引擎的主要组件。游戏编程是一个庞大的主题,有许多内容需要讨论。不过相信你会发现,我们讨论的深度将足以使你充分理解本书所涵盖的工程理论及常用实践的方方面面。话虽如此,令人着迷的漫长游戏编程之旅其实才刚刚启程。与此相关的每项技术都包含丰富内容,本书将为你打下基础,并引领你进入更广阔的学习空间。

    本书焦点在于游戏引擎的技术及架构。我们会探讨商业游戏引擎中,各个子系统的相关理论,以及实现这些理论所需要的典型数据结构、算法和软件接口。游戏引擎与游戏的界限颇为模糊。我们将把注意力集中在引擎本身,包括多个低阶基础系统(low-level foundation system)、渲染引擎(rendering engine)、碰撞系统(collision system)、物理模拟(physics simulation)、人物动画(character animation),及一个我称为游戏性基础层(gameplay foundation layer)的深入讨论。此层包括游戏对象模型(game object model)、世界编辑器(world editor)、事件系统(event system)及脚本系统(scripting system)。我们也将会接触游戏性编程(gameplay programming)的多个方面,包括玩家机制(player mechanics)、摄像机(camera)及人工智能(artificialintelligence,AI)。然而,这类讨论会被限制在游戏性系统和引擎接口范围。    

    本书可以作为大学中等级游戏程序设计中两到三门课程的教材。当然,本书也适合软件工程师、业余爱好者、自学的游戏程序员,以及游戏行业从业人员。通过阅读本书,资历较浅的游戏程序员可以巩固他们所学的游戏数学、引擎架构及游戏科技方面的知识。专注某一领域的资深程序员也能从本书更为全面的介绍中获益。

    为了更好地学习本书内容,你需要掌握基本的面向对象编程概念并至少拥有一些C++编程经验。尽管游戏行业已经开始尝试使用一些新的、令人兴奋的编程语言,然而工业级的3D游戏引擎仍然是用C或C++编写的,任何认真的游戏程序员都应该掌握C++。我们将在第3章重温一些面向对象编程的基本原则,毫无疑问,你还会从本书学到一些C++的小技巧,不过C++的基础最好还是通过阅读[39]、[31]及[32]来获得。如果你对C++已经有点生疏,建议你在阅读本书的同时,最好能重温这几本或者类似书籍。如果你完全没有C++经验,在看本书之前,可以考虑先阅读[39]的前几章,或者尝试学习一些C++的在线教程。

    学习编程技能最好的方法就是写代码。在阅读本书时,强烈建议你选择一些特别感兴趣的主题付诸实践。举例来说,如果你觉得人物动画很有趣,那么可以首先安装OGRE,并测试一下它的蒙皮动画示范。接着还可以尝试用OGRE实现本书谈及的一些动画混合技巧。下一步你可能会打算用游戏手柄控制人物在平面上行走。等你能玩转一些简单的东西了,就应该以此为基础,继续前进!之后可以转移到另一个游戏技术范畴,周而复始。这些项目是什么并不重要,重要的是你在实践游戏编程的艺术,而不是纸上谈兵。

    游戏科技是一个活生生、会呼吸的家伙 ,永远不可能将之束缚于书本之上。因此,附加的资源、勘误、更新、示例代码、项目构思等已经发到本书的网站。

    展开全文
  • 游戏开发入门(十一)游戏引擎架构

    万次阅读 多人点赞 2018-02-25 16:13:20
    链接:游戏开发入门(十一)游戏引擎架构(8节课 时常:约2小时40分钟) 该堂课是对游戏引擎内容的一个概括总结,同时也是对游戏开发技术的一个相当全面的总结。 正如我在开篇所提到的,游戏引擎架构的学习有助于...

    链接:游戏开发入门(十一)游戏引擎架构(8节课 时常:约2小时40分钟)

    该堂课是对游戏引擎内容的一个概括总结,同时也是对游戏开发技术的一个相当全面的总结。
    正如我在开篇所提到的,游戏引擎架构的学习有助于我们建立一个对游戏全局性的认识。


    笔记与总结(请先学习视频内容)

    下面我会按照视频的顺序自底向上的简单讲解各个概念,参考文中最后的架构图(英文版与中文版可以对照着看)。

    1.游戏引擎
    就如汉字最开始是由图案构成的一样,游戏引擎一开始也只是一个单独的游戏。当人们不断的制作新的游戏的时候,发现很多功能是通用的,没有必要做重复的内容。所以,人们开始对游戏里面的功能进行抽象总结,这样在开发新的游戏的时候可以直接使用之前的成果,即节省时间,又可以避免很多前人遇到的坑。
    这些由之前开发游戏的经验与成果所抽象总结的一个系统就是游戏引擎。一个成熟的游戏引擎应该尽可能的通用于各种游戏制作,提供一套完善的制作流程。各个游戏大厂一般都有自己的游戏引擎,其他小型公司一般使用的是商业游戏引擎,如Unity,UE4。

    2.架构
    架构是一个系统的草图,描述了构成系统的抽象组件以及他们之间的关系。任何一个稍微复杂一些的软件系统都需要一个合适的架构,对于如此复杂的游戏引擎,当然更为需要。

    3.第三方软件开发包
    也就是常说的第三方库,包括静态库与动态库。别人写好的封装好的代码库,引入之后直接调用。

    4.平台独立层
    这里面的内容并不是说与平台完全无关,而是说其基本的逻辑在各个平台大致是相同的,而且几乎都是必须要用到的。其中的差异通过适配器来适配到各种平台。

    5.原子类型与原子操作
    这个偏向于操作系统层面,所谓原子就是不可拆分的。在操作系统底层,一般只有bool,int等类型是可以被各个系统识别的,我们在高级语言所写的类在系统底层都会被转换为原子数据来操作。

    6.定时器
    游戏中定时器是一个非常重要的内容,很多游戏逻辑都需要,比如每隔2秒恢复10点生命值。为了提高游戏各项精度,很有必要提供一个高精度的定时器。

    7.Graphics Wrappers 图形包裹类
    图形抽象层,动态切换DX/OpenGL

    8.Moudule模块
    游戏引擎相当复杂,我们需要将其拆分成各个模块来便于我们理解与使用。如渲染模块,物理模块,音效模块,动画模块等,不同的引擎在模块的设计上不同。

    9.字符串
    我们看到在核心系统架构内,字符串被单独拿出来,证明其独特性。字符串的复杂性主要在于编码,同样的内容不同的编码其二进制数据是不同的,我们在进行本地化(国际化)的时候不得不面对这个问题。另外,hash string表示将一个字符串转换成一个数值,在服务器验证的时候经常用到。
    关于编码的相关讲解:
    Unicode 和 UTF-8 有何区别?https://www.zhihu.com/question/23374078
    字符集详解(一看就懂系列)http://blog.csdn.net/u012999985/article/details/77619368

    10.调试
    一般分为断点调试与日志输出调试,好的调试方法可以快速的定位问题。下一节还会更详细的描述。

    11.语法分析器
    其实可以理解为XML等文件解析器,方便我们使用XML等描述游戏对象,做相关配置

    12.性能分析
    一般的引擎都会提供相关的性能分析工具,比如unreal内置的Profiler。当然,我们还可以选择一些其他的工具,比如Intel的vtune。

    13.引擎配置
    游戏引擎里面有太多的参数需要我们配置了,如何方便的修改配置并应用?常见的手段就是ini文件,通过简单的修改配置文件里面的内容,可以在引擎启动时就调整某些内置选项,比如光照精度,游戏控制等等。很多游戏项目里面也经常会用到配置文件。

    14.曲线
    学过图形学的朋友应该比较熟悉,常见的曲线有B样条与贝塞尔曲线。我们游戏中摄像机移动,各种渲染插值都会用到曲线。

    15.RTTI、反射、序列化

    • RTTI是运行时类型识别,C++基本概念。简单来说就是在运行的时候可以判断一个对象的类型。
    • 反射是在RTTI的基础上提供有关类的更详细的信息。
    • 序列化就是将类对象保存到磁盘并能在之后正确的加载还原出来。

    16.唯一标识符
    这个在网络里面经常用到,比如给一个网络玩家添加一个唯一标识,给一个同步对象添加唯一标识,一般叫做GUID。

    17.游戏资产
    简单理解就是各种文件了,动画资源文件,图片文件,字体文件,地图文件等等。这么多种类型的文件当然需要一个统一的管理与解析,资源管理也是非常复杂的一个模块,有点像一个小的操作系统了。

    18.材质与纹理
    直接参考链接:贴图、纹理、材质的区别是什么?

    19.摄像机
    摄像机的位置决定了渲染的内容

    20.物理
    核心内容:动力学与碰撞
    其他内容:射线检测,一般在带有物理的引擎中,所有的射线检测都是基于物理的。射线检测非常好用,一般我们的无实弹枪的命中,障碍检测都需要射线检测。

    21.BSP树
    BSP树与八叉树各有什么优劣,分别有什么应用场合?https://www.zhihu.com/question/29739023

    22.关于剔除
    渲染我们值只渲染玩家可见的部分,其他的剔除。有些数量庞大的对象我们只加载玩家附近的,其他的剔除。

    23.光照贴图
    动态光照对cpu以及gpu的消耗是很大的,为了减小开销。我们可以将静态的光照贴图贴在对象上从而代替动态关照。

    24.动态阴影
    http://www.cppblog.com/shadow/archive/2005/12/23/1991.aspx

    25.贴花Decal
    就是将一个面片贴到指定的模型上来表现新的图案效果,比如子弹打在地上的弹孔。贴花是在触发时临时创建的带图案的模型,并不是直接在原来的模型上绘制。

    26.HDR与后处理
    前面渲染部分有讲解 http://blog.csdn.net/u012999985/article/details/79090657

    27.环境映射EnvironmentMapping
    这里翻译成环境映射比较好,环境映射是一种用来模拟光滑表面对周围环境的反射的技术。而环境贴图一般指CUBEMAP,属于环境映射的基本实现方式。

    28.PRT
    PRT是指Precomputed Radiance Transfer,光辐射传输预计算。把辐射率的传输(包括阴影和相互反射的关系)预生成球谐函数(spherical harmonics, SH)的系数存储在几张纹理中(SH lightmap).然后,存储静态 light probe 的 SH,或动态地把光源生成 SH,点积后就可以得到含有环境光照、阴影和相互反射的全局光照效果。[引用自知乎Milo Yip回答]
    简单来说就是实现全局光照。

    29.层级式物体依附
    这个翻译到汉语有点绕口。其实本意就是骨骼关联,我们可以将任意一个对象Attach到任何一个骨骼上面。骨骼是层级关系,被attach的对象就会跟着这个骨骼保持一致,不会受这个骨骼的子骨骼影响。

    30.MatchMaking
    这一块涉及到网络游戏的游戏模式,涉及到游戏大厅内直接玩,还是单独开房间,如何匹配等问题。一般引擎都会提供相关的接口来对接,不过很多细节还需要游戏项目自己去写。

    31.音频
    一般分为音效和音乐,音效是简短的几秒的声音,音乐一般是长时间播放的背景音乐。引擎应该提供渐变,混合等效果,3D游戏引擎还需要提供三维音频模型。

    32.前端FrontEnd
    前端这一块主要指UI,包括HUD与内置GUI。
    IGC表示利用游戏内容实时录制动画,很多过场动画都是这么做的,比CG要节省太多成本。

    33.静态与动态元素
    一般在游戏世界,那些在整个游戏过程中位置不会移动的就是静态元素,如建筑,地形,草木。可以与玩家产生位移交互的一般就是动态元素,如NPC,动物等。当然,这不是绝对的,任何东西理论上你都可以把他做成是动态的,不过很明显二者在实现上有很大的差异。

    34.世界载入
    所有在游戏场景的物体都需要从硬盘载入到内存中运行,这个过程就是World Loading。涉及到场景加载还有很多技术,比如流式加载,可以用于大世界场景的动态加载。

    35.脚本
    脚本方便程序修改,可以像资源一样热更新到程序里面。

    36.游戏专用子系统
    这里就是指我们常见的各种游戏逻辑模块,如道具模块,武器系统,成就系统等。当然,游戏引擎没有必要去实现这些内容,因为他们属于游戏项目逻辑。不过,鉴于大部分引擎都是基于游戏项目演变的,所以不同的引擎会构建不同的游戏GamPlay框架,如虚幻4的游戏框架就是基于FPS的,非常适合FPS游戏项目的开发。

    37.玩家机制
    这个博主觉得也可以叫做玩家角色控制模块,就是指你是如何控制你的角色移动,动作表现,相机位置,碰撞等内容的。

    38.游戏摄像机
    前面提到的摄像机是从渲染底层来看的,他决定了渲染的内容。不过在游戏逻辑这一块,我们主要在乎的是他的位置。是一直跟随着玩家,还是可以通过上帝视角查看,这都是游戏逻辑需要控制的。

    39.人工智能
    理论上如当前火爆的AI技术一样,你可以用深度学习,机器学习去操作影响AI角色的表现。但实际上,大部分游戏里面的AI角色都是比较“低能”的,只要会简单的寻路,简单的感知即可。原因很简单,我花费最简单的逻辑就能让玩家体验到逼真的AI了,何必搞得那么复杂。
    当然,这并不是不需要去深入探索游戏AI,目前还是有很多游戏领域的人在这个方面探索的。

    40.常用开发工具
    引擎开发IDE:Visual Studio
    版本管理:SVN,Git

    41.Debug,Release
    主要差别有一下几点:

    1. Debug模式下程序没有优化,可以断点
    2. Debug模式很多代码会做更多的检测,如数组越界。导致有时候在Debug有断言中断的位置,换成Release就没有任何问题。
    3. Debug模式下编译出来的程序比Release大的多,而且跑起来也可能慢的多。

    42.软件的主要构成
    视频中讲师的理解是:算法+数据结构+设计模式

    43.游戏开发常用的数学知识
    向量运算,三角函数,矩阵运算,四元数,随机数,坐标系运算(笛卡尔坐标系、极坐标系、球坐标系),空间变换,以及其他的几何学(点到面的距离,点是否在几何体内等),微积分

    44.内存管理
    涉及到内存碎片,内存分配,内存泄露,虚拟内容等内容,这部分内容可以找一本操作系统的书来学习一下。

    45.容器
    就是我们常说的数据结构,包括堆、栈、数组、链表、树、图、队列等。注意他们的特点与使用场景,比如是不是连续内存,是不是动态改变大小等。

    46.I/O
    I/O即输入/输出(Input/Output),一般指磁盘IO与缓存IO。我们在读写时可能需要将磁盘内容写到内存,内存写到缓存,缓存写到寄存器等等操作,一般这些操作是很耗时间的。所以CPU不能在IO时干等着,他会将任务交给DMA去处理,这样整个IO对CPU的消耗就大大减轻。不过即使如此,在上下切换时也要消耗CPU的时间,所以减少IO的数量还是很有必要的。

    47.游戏循环与渲染循环
    其实整个游戏本质上就是一个无限循环的程序,所有的逻辑都在循环里面处理。
    同理,渲染模块本身也是一个循环,里面会有更新相机,更新场景元素,开始渲染,输出到屏幕等操作。

    48.对象组件模型
    很多游戏引擎都采用这种模式来构建游戏对象,组件模型通过将多个功能独立包装成单独的组件,可以自由的装配或或拆卸。达到了很好的解耦效果,增加了组件的通用性与灵活性。

    这里写图片描述
    这里写图片描述

    上一篇:游戏开发入门(十)游戏中的网络模块
    下一篇:游戏开发入门(十二)游戏开发全总结

    原文链接(转载请标明):http://blog.csdn.net/u012999985/article/details/79369542

    展开全文
  • 三维游戏引擎开发-渲染

    万人学习 2015-04-12 20:28:28
    介绍移动设备,介绍一款游戏引擎具备的要素,并依次进行开发实现,采用标准C++语言进行开发,需要有扎实的C++基础
  • 游戏引擎游戏引擎开发入门

    千次阅读 2012-09-23 16:58:01
    早想写一点游戏设计的文章与大家交流,一是经验的问题,二是公司正在紧张的游戏制作期,实在抽不出多少时间,一直没有动手,今天忽然头脑发热,写了一段,以后准备陆续写一些游戏创意,策划,制作,流程管理,和制作工具等方面...
  • 想学安卓游戏开发,想问问现在安卓开发用什么游戏引擎,大型的预习也是java代码吗??还有网游呢???untiy3d只能是c#吗???cocos2d呢??真心求知道谢谢。。。。没有开发过游戏,请调教 我现在在java web公司...
  • 微信小游戏引擎游戏引擎。如何学习一款游戏引擎- http://blog.csdn.net/jxw167/article/details/53735483android游戏引擎汇总- http://blog.csdn.net/mjm_49/article/details/776579763D引擎- ...
  • 游戏引擎与C++

    千次阅读 2017-03-22 16:03:40
    游戏引擎与C++参考CppCon 2016: Jason Jurecka “Game engine using STD C++ 11"此presentation主要关注C++11在游戏引擎中的使用游戏引擎的特点不会使用太多STD游戏的历史很久远,且对内存、cpu的使用很苛刻比如对于...
  • C++游戏引擎开发

    万次阅读 2009-02-06 10:18:00
    游戏引擎开发用C++实现跨平台游戏引擎开发 你是否梦想写一部格斗游戏但却无从着手呢?是否你只因游戏开发好玩而对之感兴趣?本文我们将分析一个通用的跨平台游戏引擎,每个游戏开发新手都可以自由地使用它。 1. 3D...
  • 3D游戏引擎剖析

    千次阅读 2015-02-21 10:11:09
    介绍 自Doom游戏时代以来我们已经走了很远。 DOOM不只是一款伟大的游戏,它同时也开创了一种新的游戏编程...大量的新游戏根据已经存在的游戏引擎开发出来,而大多数都以ID公司的Quake引擎为基础, 这些游戏包括Coun
  • JavaScript游戏引擎列表

    千次阅读 2013-03-20 13:24:42
    这里有一个网址收集了关于JS游戏引擎开发库的一个列表,转过来。 游戏引擎 Name Latest Release License Type Notes The Render Engine 1.5.3 MIT   跨浏览器; 大规模 API; 开源. 2 ...
  • 开源游戏引擎推荐

    2013-06-11 11:04:18
    1.HTML5开源游戏引擎lufylegend 2.libGdx2D/3D的游戏开发引擎 -----------未完待续---------
  • 3D游戏引擎源代码

    热门讨论 2011-09-13 22:18:08
    由于本人现在大四,忙于实习和找工作,引擎代码没有时间去整理和优化了,现在将代码公开,希望能给初学游戏编程的同胞们有所帮助。 注意事项: 开发工具vs2008+dx9.0 由于“历史”的原因,有些代码后来被添加、删除...
  • 教你实现自己的Java 2D游戏引擎

    热门讨论 2009-02-21 17:41:12
    通过手把手教你设计,实现一个高度可重用的Java 2D游戏引擎。全面提高你Java编程技巧。 资源以NetBeans 6.5 工程的形式提供,除了有核心(Core)的引擎源代码(注释详细)外,还有以该引擎编写的SpaceInvaders(太空入侵...
  • 风魂游戏引擎源码

    千次下载 热门讨论 2007-07-04 15:37:30
    风魂游戏引擎源码,网易游戏开发负责人云风成名作。
  • 3D游戏引擎系列三

    千次阅读 2017-01-27 17:30:25
    已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。CSDN课程视频网址:http://edu.csdn.net/lecturer/144 笔者以前在游戏论坛担任过技术版主,以及在51CTO...
  • 3D游戏引擎系列二

    千次阅读 2017-01-27 11:28:47
    已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。CSDN讲课视频网址:http://edu.csdn.net/lecturer/144 已经出版了一本《手把手教你架构3D游戏引擎》,主要...

空空如也

1 2 3 4 5 ... 20
收藏数 23,855
精华内容 9,542
关键字:

游戏引擎