一、计算机游戏概述

  • 游戏编程

通过本课程的学习,使学生了解计算机游戏编程的基本方法,掌握游戏编程的基本理论基本技能, 能够独立编程设计实现二维游戏,了解三维游戏涉及的相关知识,培养学生应用理论知识分析解决与游戏编程相关的实际问题的能力,为今后在相关的领域的深入学习和应用开发打下基础


计算机游戏及其分类

计算机游戏的定义: 从游戏技术上看计算机游戏是以计算机为操作平台,通过人机互动形式实现的,能够体现当前计算机技术较高水平的一种娱乐方式

第9艺术: 有人把游戏称为继绘画、雕刻、建筑、 音乐、诗歌(文学)、舞蹈、戏剧、 电影之后的人类历史上的第9种艺术。

游戏类型【按照是否需要服务器支持分类】

  • 网络游戏
    • 客户端网络游戏
    • 网页游戏
    • 移动端网络游戏
  • 单机游戏

网络游戏:英文名称为Online Game,又被 称为 “在线游戏”,简称“网游”。通常以个人电脑(PC)、平板电脑、智能手机等载体为游戏平台,以游戏运营商服务器为处理器,以互联网为数据传输媒介,必须通过广域网网络传输方式(Internet、移动互联 网、广电网等)实现多个用户同时参与的游戏产品,以通过对于游戏中人物角色或者场景的操作实现娱乐、交流为目的的游戏方式, 具有可持续性的个体性多人在线游戏。

客户端网络游戏:客户端网络游戏 是网络游戏的形式之一,是需要在电 脑上安装游戏客户端软件才能运行的 游戏。国内的客户端网络游戏主要有 大型角色扮演类网络游戏(MMORPG) 和休闲客户端网络游戏。

游戏客户端,是指与游戏服务器相 对应,为客户提供本地服务的程序。 一般安装在普通的用户电脑上,需要与游戏服务端互相配合运行。服务端是为游戏数据库服务的,而客户端就是游戏数据使用端。几乎现在任何网络游戏都有其客户端,用来连接服务端为玩家服务。

网页游戏:网页游戏是用户可以直接通过互联网浏览器玩的网络游戏, 它不需要安装任何客户端软件。网页游戏又称无端游戏、Web Game,简称 “页游” 。【《传奇》,是兄弟,来砍我】

移动端网络游戏:指的是运行在移动终端上的网络游戏,是以移动互联网为传输媒介,以游戏运营商服务器和用户手持设备为处理终端,以移动支付为支付渠道, 以游戏移动客户端软件为信息交互窗口的多人在线游戏方式。其与电脑形式近似, 可以实现娱乐、休闲、交流和取得虚拟成就的功能。【《绝地求生》《刺激战场》】

单机游戏:单机游戏以独立的个人电脑 (PC)软硬件设备为依托,主要供单人或利用网络IPX/SPX协议、TCP/IP协议或者UDP协议,供有限数量的用户在局域网中玩的游戏。【《Human fall flat》】

游戏类型【按照内容分类】

  • 动作游戏(ACT)
  • 社交游戏
  • 棋牌类游戏
  • MMORPG
  • 休闲游戏
  • 角色扮演(RPG)
  • 第一人称射击(FPS)
  • 冒险游戏(AVG)
  • 策略游戏(SLG)
  • 运动游戏(SPT)

社交游戏:也是网络游戏的一种形式, 英文全称为Social Game,指的是一种运 行在社会性网络服务(SNS)社区内,通过互动娱乐方式增强人与人之间社交游戏交流的网络游戏。社交游戏的特点是互动性强、简单易玩容易上手、以趣味休闲的内容为主,网民参与度高。社交游戏种类繁 多,已经成为大多数网民重要的网络休闲方式之一。【《VRChat》】

MMORPG:MMORPG即大型多人在线角色扮演类游戏,MMORPG客户端网络游戏是客户端网络游戏的类型之一。指的是使所有的用户都存在于一个大的虚拟世界中,用户可以使用拥有不同特点的角色体验虚拟生活,游戏本身是持续发展的。
通常用户创造和操控一个游戏主角,游戏主角通过赢得战斗、完成任务累积一定的经验值(Experience)后提升等级,获得金钱和高级装备,同时游戏主角学习到新的魔法和技能,属性(Attribute)增强, 能力由弱变强,用户融入游戏情节中,视自己的角色为游戏故事的一部分。【《魔兽世界》】

休闲游戏:这里所指的休闲游戏,大都 是采用平台竞技方式进行,游戏以“” 的形式存在,每局游戏参与的用户数量相对较少。 一局游戏在一段时间内结束, 此类游戏以纯粹娱乐为主,不强调剧情。 通常游戏用户不需要为玩游戏而付费,但 游戏中的虚拟物品需要花钱购买。【《跑跑卡丁车》】

棋牌类游戏:与平台对战网络游戏类似, 该种游戏也以平台为基础,但表现方式会根 据游戏形式的不同而有所区别。比如客户端网络游戏中棋牌类游戏往往从平台自身下载, 无需单独的购买单机游戏就可以体验,内容也多以棋牌等小型互动游戏为主。网页游戏中的棋牌类游戏具有无需下载,打开网络浏览器即可直接游戏的特性。移动网络游戏则根据移动智能终端的特点决定游戏的特性。【《欢乐斗地主》】

动作游戏:动作游戏一般多为不需要服务器的单机游戏,以操纵人物行动(主要 是战斗)为主要操作模式,相比于目标用户较广的网络游戏,动作游戏基本上具有较高的计算机配置要求。同时,动作游戏一般在渲染,镜头设计,游戏的感官体验这些方面都具有比较出色的表现。【ARPG(动作游戏+RPG)《只狼》】

RPG:RPG(Role Play Game)一般和动作游戏会产生一定的重合性,所以也有很多游戏称为ARPG,RPG相比严格的动作游戏,剧情成为更加重要的因素,而一般的动作游戏在战斗这一环节会更下功夫。【《巫师 3》】


计算机游戏产业发展

站在国内游戏的视角来说

培育期:(20世纪末-2004)

  • 主要为运营型企业

  • 以产品代理为主

  • 开始品牌竞争

2001年网游:石器时代
2002:精灵
2002:大话西游2
2002:泡泡堂
2003:凯旋
2003:传奇3
2003:《传奇世界》
2003:梦幻西游

起步期:(2004-2005)

  • 大量运营商出现
  • 出现自主研发企业
  • 以MMORPG为主导产品
  • 品牌竞争加剧
  • 计时收费模式为主

2004:冒险岛
2004:QQ堂
2004:魔兽世界
2005:街头篮球

快速发展期:(2005-2011)

  • 自主研发超越进口,并开始出口海外
  • 研发型企业不断涌现
  • MMORPG仍为主流
  • 网页游戏、手机游戏等开始出现
  • 道具收费等新兴收费模式开始出现

2006:龙与地下城
2006:诛仙
2007:防沉迷系统
2008:QQ飞车
2008:穿越火线
2009:剑网3

稳定发展期:(2011-2015)

  • 市场竞争格局趋于稳定
  • 细分市场稳定,网页游戏及移动游戏开始成熟
  • 行业进入壁垒提高
  • 游戏题材极大丰富
  • 道具收费成为主流收费模式

2011:英雄联盟
2014:炉石传说
2015:天涯明月刀

手机游戏快速发展期:(2015-2020):

  • 智能手机大范围普及
  • 手机游戏用户超越PC端游戏,成为国内游戏产业的最大市场
  • 大量优质的手机游戏涌现,创造了一些用户上千万甚至上亿级的手机游戏

2015:王者荣耀
2017:荒野行动

VR游戏发展初期:(2016-2020)
2018:Beat Saber
2019:皇牌空战7: 未知空域


游戏引擎

游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏而不用由零开始。大部分都支持多种操作平台,如Linux、Mac OS X、Windows。

游戏引擎包含以下系统:渲染引擎(即 “渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、 脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。

一些常见游戏引擎:

动画,游戏所采用的动画系统可以分为两种:一是骨骼动画系统,一是模型动画系统。前者用内置的骨骼带动物体产生运动,比较常见;后者则是在模型的基础上直接进行变形。引擎把这两种动画系统预先植入游戏, 方便动画师为角色设计丰富的动作造 型。

物理系统,可以使物体的运动遵循固定的规律,例如,当角色跳起的时候,系统内定的重力值将决定他能跳多高,以及他下落的速度有多快。子弹的飞行轨迹、车辆的颠簸方式也都是由物理系统决定的。

渲染是引擎最重要的功能之一,当3D模型制作完毕之后,美工会按照不同的面把材质贴图赋予模型,这相当于为骨骼蒙上皮肤,最后再通过渲染引擎把模型、动画、 光影、特效等所有效果实时计算出来并展示在屏幕上。渲染引擎在引擎的所有部件当中是最复杂的,它的强大与否直接决定着最终的输出质量。

引擎相当于游戏的框架,框架搭好后,关卡设计师、建模师、动画师只要往里填充内容就可以了。因此,在3D游戏的开发过程中,引擎的制作往往会占用非常多的 时间。
正是出于节约成本、缩短周期和降 低风险这三方面的考虑,越来越多的开发者倾向于使用第三方的现成引擎制作自己的游戏,一个庞大的引擎授权市场已经形成。

  • 引擎发展史

1992年,3D ID Software发布了一款只有2兆多的小游戏——《德军司令部》 (Wolfenstein 3D),这部游戏开创了第一人称射击游戏的先河,更重要的是,它在X轴和Y轴的基础上增加了一根Z轴,在由宽度和高度构成的平面上增加了一个向前向后的纵深空间,这根Z轴对那些看惯了2D游戏的玩家造成的巨大冲击可想而知。

约翰·卡马克,ID Software的创始人之一

引擎诞生初期的另一部重要游戏同样是出自ID Software公司的一款非常成功的第 一人称射击游戏——《毁灭战士》 (Doom)。Doom引擎在技术上大大超越 了Wolfenstein 3D引擎。

在引擎的进化过程中,肯·西尔弗曼于 1994年为3D Realms公司开发3D游戏引擎的Build引擎是一个重要的里程碑,Build引擎的“肉身”就是那款家喻户晓的《毁灭公爵》(Duke Nukem 3D)。

一年之后,ID Software公司推出《雷神之锤2》,一举确定了自己在3D引擎市场 上的霸主地位。《雷神之锤2》采用了一 套全新的引擎,可以更充分地利用3D加速 和OpenGL技术,在图像和网络方面与前作相比有了质的飞跃,当时相当多的游戏都采用了Quake II引擎。

1998年,正当Quake II独霸整个引擎市场的时候,Epic Megagames公司(即Epic 游戏公司)的《虚幻》(Unreal)问世了。 游戏中的许多特效即便在今天看来依然很出色,荡漾的水波,美丽的天空,庞大的关卡,逼真的火焰、烟雾和力场等效果。 时至今日,虚幻引擎的图形渲染效果仍旧是业界首屈一指的。

曾获得无数大奖的《半条命》采用的是 Quake和Quake II引擎的混合体,Valve公司在这两部引擎的基础上加入了两个很重要的特性:一是脚本序列技术,这一技术可以令游戏以合乎情理的节奏通过触动事件的方式让玩家真实地体验到情节的发展, 这对于诞生以来就很少注重情节的第一人称射击游戏来说无疑是一次伟大的革命;
第二个特性是对人工智能引擎的改进, 敌人的行动与以往相比明显有了更多的狡诈,不再是单纯地扑向枪口。这两个特点赋予了《半条命》引擎鲜明的个性,在此基础上诞生的《军团要塞》、《反恐精英》 和《毁灭之日》等优秀作品又通过网络代码的加入令《半条命》引擎焕发出了更为夺目的光芒。

在人工智能方面真正取得突破的游戏是1998年发行的Looking Glass工作室的《神偷:暗黑计划》,游戏的故事发生在中古年代,玩家扮演一名盗贼,任务是进入不同的场所,在尽量不引起别人注意的情况下窃取物品。
《神偷》采用的是Looking Glass工作室自行开发的Dark引擎,Dark引 擎在图像方面比不上《雷神之锤2》 或《虚幻》,但在人工智能方面它的水准却远远高于后两者。

Unity与UE:而发展到今天,虚幻4 (UE4) 和 Unity是目前市场上最热门的游戏引擎,也各自拥有为数众多的开发者。 在巨大的市场需求下,独立开发者与游戏工作室仍需要一款优秀的引擎来支持项目的开发,如何选择一款适合自己的引擎是开发者最需要考虑的问 题。

Unity适合小团队制作,甚至是独立制作, 主要趋向是手游(目前Unity仍然是手游市场占有率最高的引擎),而虚幻4适合大团队制作、大制作,主要趋向是PC平台和家用机。Unity5增强了光影渲染,使得整体效果有了长足进步,已经开始逼近虚幻的步伐。虚幻的强大自然不用说,但是他的强大需要硬件的付出支持,玩家要有配置强大的PC,或者在次世代(日语衍生词汇)家用上才能体验到虚幻的震撼。

Unreal Engine4:虚幻引擎4则凭借其更棒的画质和更新更酷的VR技术赢得了许多人的支持,自从虚幻引擎4宣告免费下载后,该引擎至今已聚集了不下750万名开发者用户。实际上,Gear VR 上风评最佳的游戏之一,CCP Games工作室 2015年出品的《Gunjack》(《炮火杰克》)就 是移动端VR上最早采用虚幻引擎4开发的VR游戏之一。【《Explore En Garde》】
虚幻4引擎开始就瞄准了高端游戏市场, 但是目前为了打通手机市场,他们已经通过降低价格的策略进行了调整。相反, Unity科技开始着重于发展基础游戏,旨在为移动手机端打造画质更加精美的2D和3D游戏。

据VisionMobile2017年的一份数据调查显 示,目前有59%的VR游戏开发者正在使用 Unity工具进行游戏制作,免费游戏热门榜 单前1000名中有38%都是基于Unity引擎开发。 在谷歌DayDream游戏平台上超过半数的游戏 也是如此。因此Unity基本已经占据了主机 和PC游戏市场的半壁江山,对于手游制作所 选择的引擎来说更是达到了70%的占有率。
2019年Unity引擎占据全功能游戏引擎市场45%的份额,全世界有6亿的玩家在玩使用Unity 引擎制作的游戏。Unity3D引擎占据全功能游戏引擎市场45%的份额,居全球首位。Unity 3D开发人员占有比例为 47%,Unity 3D全球用户已经超过330万人, 中国区的开发者数量已成为全球第一。


绘制流水线

绘制流水线主要用于创建一个描述三维世界中的物体的二维图像

3维世界

  • 一个3D场景是由物体或模型组成的。
  • 而物体或模型都是通过三角形组成的。 一个由若干三角形构成的物体称为:网格(mesh)。

3D场景 (scene)
 ↑ ↑
物体 or 模型 (model)
 ↑ ↑
三角形 (triangle)
 ↑ ↑
顶点 (Vertex)

Direct3D中的三角形

  • 三角形是构成三维模型的基本元素。
  • 通过三角形列表来描述物体的形状和轮廓。
  • 三角形列表中包含了每个需要绘制的三角形数据。
1
2
Vertex rect[6] = { v0, v1, v2, //三角形0
v0, v2, v3 }; // 三角形1

顶点索引

  • 通常组成三维物体的三角形都会使用许多相同的顶点 ,为避免浪费,就得使用顶点索引
  • 索引的工作原理:在创建一个顶点列表的同时创建一个索引列表

索引列表中保存什么呢?
保存顶点列表中的索引,或者说顶点数组的下标

1
2
3
Vertex vertexList[4] = {v0, v1, v2, v3};
DWORD indexList[6] = {0, 1, 2, // 三角形0
0, 2, 3}; // 三角形1

与前面用顶点表示的三角形列表相比较
36个点和8个点的区别

虚拟摄像机

  • 摄像机决定观察者可以看到的三维世界的范围
  • 摄像机可见的体积范围是一个平截台体
  • 投影窗口位于一个二维平面中, Direct3D中位于z = 1这个平面上
  • 假设近平面和投影平面是一个平面

渲染流水线

  • 输入装配阶段
  • 顶点着色阶段
  • hullShader阶段
  • 曲面细分阶段
  • 裁剪阶段
  • 光栅化阶段
  • 像素着色器阶段
  • 输出合并阶段

输入装配阶段

  • 输入装配阶段(IA)从内存中读取数据 (顶点和索引)来装配称几何基元(三角 形、线段等)。
  • 顶点:顶点不仅包含基本的位置信息, 也可以包含其他数据如法向量、UV值等。

顶点索引

  • 索引:下面代码展示了一个顶点数组用来组成四边形和八边形:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Vertex quad[6] = {
v0,v1, v2, // Triangle 0
ve, v2, v3, // Triangle 1
};

Vertex octagon[24] = {
v0, v1, v2,// Triangle 0
v0, v2, v3, // Triangle 1
v0, v3, v4, // Triangle 2
v0, v4, v5, // Triangle 3
v0, v5, v6, // Triangle 4
v0, v6, v7, // Triangle 5
v0, v7, v8, // Triangle 6
ve, v8, v1 // Triangle 7
};

顶点着色阶段
GPU会对每个顶点使用定义的顶点着色器执行一遍,许多效果可以在顶点着色器中实现,比如:变换,光照,贴图置换等。 它不仅可以访问顶点数据,还可以访问其他保存在GPU内存中的数据,比如:纹理, 灯光数据等。

曲面细分阶段
曲面细分阶段可以细分三角形,产生新的三角形,并且调整它的位置,用以生成更多细节和更好效果:

几何着色阶段
几何着色器输入完整的基元,它可以扩展/增加多个基元或者根据某些条件删除基元,而顶点着色器不能; 比如它可以把点扩展成线或者矩形面; 几何着色器可以流出(stream-out) 顶点数据到内存中的缓存,用以后续的渲染。

裁切
如果几何体完全在截头锥体以外需要被丢弃;如果和边界相交,那么就需要裁切:

光栅化阶段
光栅化阶段的工作是通过投影的3D三角形计算出像素的颜色

像素着色器阶段
像素着色器是指在GPU上执行的程序, 它可以逐像素计算颜色,光照,反射和阴影等效果。

输出合并阶段
在这个阶段,某些像素片段可能被删除(深度或者模板缓冲测试),没有被拒绝的像素片段将被写入后置缓 冲,混合操作之后,这些像素准备被输出到设备上。

认识渲染


二、2D游戏编程-环境安装与基本使用

二维游戏设计概述

二维游戏的基本流程和架构

  • 二维游戏的基本功能:交互和输出
    • 交互部分:根据用户的操作,改变游戏的各种数据,以反映游戏的当前状态。
    • 输出:处理游戏运行中的各种数据,在输出设备上体现游戏的内容,包括游戏画面、游戏音效、游戏提示等。
  • 这两个部件的执行由调度模块指挥,简单的调度模块是一个dowhile循环,串行执行:交互→输出→再输出→再渲染→…。当然也可以将两个部件分成不同的线程,并行执行。

实现二维游戏框架,需要做下面的几个工作

  • 实现游戏地图的加载和编辑操作
  • 图像的半透明技术
  • 精灵动画技术:采用连续静态图片快速切换方式 产生动画效果 【精灵图】
  • 碰撞检测
  • 选用何种语言进行游戏程序开发;
  • 通过VS2019自带的工具箱经过简单的拖拽, 直接进行桌面应用开发;
    优点:简单,快速,灵活。

VS2019的安装与配置

下载链接:Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com)

选项看自己需要进行设置:

C# 基础 菜鸟教程自学

C# 教程 | 菜鸟教程 (runoob.com)

后面老师没有发PPT了。

课程信息

主讲人:王欣

计算机图形学与数字媒体研究室

吉林大学虚拟现实梦工厂

QQ:158930117

email:158930117@qq.com

成绩考核

加权平均:平时出勤及作业 * 0.5+开卷考试 * 0.5

  • 平时作业、出勤率 20%

  • 项目作业完成情况:质量、是否自己完成 30%

    • 纸质
    • 电子
  • 开卷考试:50%

附加分(5分) :作品展示【加上去也不会超过100分】

游戏编程大作业:1-3人一组

6.7左右2D,后面还有3D的

参考资料

  • 毕文斌,孙明亮,冯大磊 编, C# Windows游戏设计,清华 大学出版社,2014年11月。
  • Frank D. Luna 著,王陈 译. DirectX 12 3D 游戏开发实战,人民邮电出版社, 2019年1月。
  • Fletcher Dunn,Ian Parberry 著,史银雪, 陈洪,王荣静 译 ,3D 数学基础:图形和游戏 开发,清华大学出版社, 2005年1月。

第一节课

2023-05-06

学生xxx实习:游戏公司实习,xxx的师傅发现是老师的学生,师傅的师傅发现还是学生的老师

老师的学生,学长(米哈游),老师可以内推?(小声)

第二节课

前沿:AI绘画

Stable Diffusion(推荐使用)

Midjourney

ai素材网

第三节课

二维游戏设计概述

实现二维游戏框架需要做下面几个工作:

  • 实现地图的加载和编辑操作
  • 图像的半透明操作
  • 精灵动画技术:采用连续静态图片切换方式产生动画
  • 碰撞检测

第四节课

讲课,组件怎么用