当前课程知识点:游戏程序设计 > 第一章 《游戏开发导论》 > 1.5 游戏引擎(下) > 1.5 游戏引擎(下)
首先是渲染引擎
渲染引擎是通用子系统里面的一个
最重要最重要的一个部分
它通常也会分为四个子模块
分别是低阶渲染器
场景图和剔除优化模块
还有视觉效果和前端
低阶渲染器
包含引擎中全部原始的渲染功能
它主要的作用就是用来高速的绘制图形
高速绘制游戏里面的一些几何图形
但它这个阶段他是不考虑哪些场景
是否可见简单点来讲
低阶渲染器就是图形渲染管线
它只负责画
就是你给它什么东西
它就画什么东西
所以我们可以把低阶渲染器理解为
图形渲染管线的一个流程
我们先简单介绍一下这个流程吧
首先就是我们要创建3D的3D模型
然后把3D的模型
配置到一个虚拟的空间里面
然后模型的顶点会进入到一个叫
Vertex shader
就是顶点着色器顶点着色器
它的一个主要功能就是做
顶点的变换和着色的处理了
有可能这个时候也会做一些
顶点阴影方面的处理
如果你的模型想需要改变的话
那么有可能会进入到一个几何着色器
几何着色器
它会对顶点进行一个增加或者删除
来达到一个对模型进行变换了一个功能
然后
然后模型会再从它的一个世界空间
变换到一个摄像机的空间
到了摄像机空间之后
再对模型进行
一个多边形的裁剪和背面的剔除
就把摄像机看不到的那些面给剔除掉
以及摄像机背面以模型背面
就摄像机看不到的那些面也剔除掉
然后再进入
然后到了一个光栅化
光栅化就是把一个3D的模型转变成
一个屏幕上的一个2D的像素
然后再通过像素着色器
对整个每个像素进行上色
计算光照等等
同时
还会使用把贴图给应用上去
最后就是进行混合到
输出到我们的一个缓存里面
然后再提交到我们显示的
我们的显示设备上面
低阶渲染器它只负责绘制
但我们不可能把所有东西都绘制出来
我们只会是我们看的到的东西
所以这里就需要一个像场景图
和剔除优化这样一个模块
来决定哪些东西是需要画的
假设我们有
左边那样一个原始的场景
然后经过中间的视锥剔除之后
我们就能看到屏幕外的东西就被剔除掉了
在经过右边的遮挡剔除
我们能够看到那些被遮挡的
物件也被剔除掉
剩下的这些东西才会真正的进入到
低阶渲染器去执行快速的绘制
然后大家能够看到有几个灰色的
这边有两个有几个灰色的
这边都已经相当于被遮挡
剔除给裁剪掉
关于视觉效果方面的话
光影和特效是视觉效果里面
非常重要的一个部分
一个很简单的房子
一旦有了光影之后也会变得非常的好看
后处理是
视觉效果里面也非常重要的一个部分的
像我们经常会用到一些后处理
去加强整个画面的一个表现力
向使用一些景深、眩光
还有颜色矫正
抗锯齿
屏幕空间的反射、环境遮挡、光溢出
人眼适应和虚光这些
都是我们比较常用的一些后处理的效果
然后低阶渲染器
它所绘制出来的画面经过后处理之后
整个视觉效果就能得到极大的提升
还有渲染引擎里面一个前端模块
通常指的就是各种UI
比如像我们在游戏界面上经常看到的
HUD就是平视显示器
以及图形用户界面
全动视频和游戏的内置电影等等
我们在画面上面看到的就是用网页技术
来做的一个游戏大厅的demo
它是用Web技术
来做了一个游戏的一个大厅
在游戏里面
另外一个比较重要的系统就是物理系统
物理系统主要分为碰撞检测
和物理模拟两个方面
碰撞检测是为了防止物理
能够为了防止物体互相穿透
能够让它们能够在一个虚拟世界里面
合理的进行互动
而物理模拟就是指的是
真实或者半真实的动力学模拟
通常游戏引擎是不会自己
再重新去实现一套物理引擎的
一般都是对世界三大物理引擎的
一个SDK的一个封装
也就是havok、 physX 和 BULLET
一般商业引擎里面用的比较多的是phys X
因为havok是收费的
而
碰撞检测
我们可能也会分为以下的几种情况吧
像碰撞无响应指的就是
两个物体发生了碰撞
你看了这个球跟那个墙发生的碰撞
但是它并没有产生碰撞的事件
右上角那张图的就是碰撞
有响应指的是两个物体
它发生碰撞之后会产生一个碰撞的事件
我们可以通过去得到这些碰撞事件
去做一些进一步的处理
重叠无响应指的就是
你可以理解为两个物体之间
完全不知道对方的存在
也就是左下角这个示例
重叠有响应指的就是两个物体
在发生重叠的时候
它能够触发一个重叠的事件
我们通过得到重叠事件之后
我们可以做一些其它的一些处理
而在物理模拟方面
比较常见的
比较常见的一个物理的运用就是
布娃娃模拟的
这个就是
布娃娃模拟
然后载具的模拟向右上角载具的模拟
还有布料的模拟以及可破坏物件的模拟
这个是我们在游戏里面
运用的比较多的一些物理方向的模拟
动画系统也是一个游戏里面
比较重要的子系统之一了
游戏里面的动画可以分为以下几种类型
首先是精灵和纹理动画
也就是一个相当于是一个2D动画
然后就是一个骨骼动画
像我们在右上角看到了这个就是骨骼动画
还有就是变形目标动画和顶点动画
变形目标动画指的就是
通过插值的方式来计算顶点的位置
你可以通过它通过一个
输出各种参数来插值它的顶点
顶点之间的一个的实时计算出来
它顶点的位置
然后我们再来重点看一下
骨骼动画也是我们在游戏里面
用的比较多的一个技术
我们会使用相对简单的骨头系统
去设定精细的三维网格模型
它的一个姿势
然后所有的骨头它的姿势
都是以矩阵表的形式来存在的
权重决定的骨骼和网格顶点之间的关系
渲染器利用矩阵表和权重去转换顶点
然后每个顶点拥有一个或多个矩阵
混合了之后再混合出最终的位置
然后我们称之为蒙皮
这几个这几个概念
可能听起来有点
不好理解
我们就按
用一个示例来给大家讲解一下骨骼动画
它是怎么运作
首先我们会有
前面我们讲过了
我们会再通过MAYA MAX
输出我们的一些模型资源
模型资源就有骨骼模型资源以及它的一个
权重
我们
这个是骨骼模型
这个是我们输出的一个模型
然后这个是骨架就是
我们通过
通过权重来通过权重来决定这个
这个人物的那个模型的顶点
跟骨骼之间的一个关系
它的根骨骼之间的一个关系
这就这一个权重的作用
然后再通过秒描述
三维角色
这是我们就有动作
动作它的作用就是用来描述整个三维角色
它的一个网格的姿势
其实动作其就是它的一个骨骼的一个
一些矩阵的数据的变换
然后再经过蒙皮之后
蒙皮就是把顶点跟骨骼之间的关系
建立起来之后再贴上贴图
我们就能看到像
游戏引擎里面才看到的这个
栩栩栩栩如生的这个角色的动作
然后是关于多人游戏的子系统的
多人游戏的形式主要有几下几种
首先是单屏多人
就是两个人或以上的输入设备
它会接入到同一台游戏主机
它一个摄像机会维持所有角色
在整个画面当中
而分屏多人指的就是
多个输入设备
它接到同一台游戏主机
然后每个角色有自己的摄像机
然后它通过分割屏幕
来使每一个玩家都能看到自己的角色
而网络多人指的就是
多台游戏主机
它会连到同一个网络上面去
然后每个机器接待一位玩家
像我们的一个局域网的射击游戏
像绝地逃生
这种设计游戏就是一个网络游戏
大型网络游戏指的就是
很多的游戏玩家成百上千的游戏玩家
它会连接到一个巨大的
持久的在线游戏世界里面
这些虚拟的世界通常是由
一组强大的服务器所运作
像我们一般的大型的mmo
就指的是大型的多人在线游戏
然后是关于一些人体
人体学接口设备
我们常用的就是键盘
鼠标
手柄
方向盘甚至跳舞毯等等
最后就是游戏引擎的最上层的
这一层就是我们所谓的
GAME PLAY类的框架层
我们称之为游戏专用子系统
它通常会包括3c
3c指的就是
角色character镜头camera控制器 control
这三个C以及还有一些武器道具
载具
人工智能等等
游戏专用子系统里面
我们重点来看看人工智能这一部分
游戏引擎架构这本书
它上面是没有关于AI的一个介绍
这块内容是我自己的一些经验和理解
首先
人工智能它的英文缩写就是AI
它是研究开发用于模拟延伸
和扩展人的智能的理论方法
技术及
应用系统的一门新的技术科学
这个有点不好理解
我们简单点理解的话就是游戏当中的AI
它主要就是分为几个部分
棋牌类AI动作射击游戏里面的NPC
和怪
以及战略游戏里面的
AI的控制的单元
我们在游戏里面常用的AI
就是这三种类型
这里我们会以常见的NPC一来介绍一下
我们怎么去设计一个NPC
要设计一个NPC的话
我们通常会考虑两个部分
首先是怎么做
首先是要做什么
然后再是怎么做
通常做抉择的工具主要有三种
像有向状态机行为树和机器学习
大家可能都都有听说过
这三个方面的一些技术
像在我们现在现代游戏引擎里面
通常用的比较多的就是
像行为树来做一个AI的行为抉择
有向状态机算是相对来说比较老一点技术
而机器学习是最近这两年会比较流行
我们也在逐渐在使用机器学习来做一些
AI的一些行为的抉择
那我们这里还是重点介绍一下
目前当下最流行的一个
做AI行为的一个抉择的技术的行为树
行为树它是一种它是一个数状的结构吗
它有几种节点
它有根节点有分支
而且子节点的数量可以是任意的
我们会自顶向下去搜索这棵树
然后去最终决定要做的一个行为
且就是我们的叶子节点
叶子节点里面就是它的各种行为
然后再去执行这些行为
这就是行为树的一个基本的原理
构成行为树的主要元素有控制节点
它的行为节点以及他的前提条件
控制节点还会分为选择节点
还有它的序列
其它的并行节点
选择节点指的就是它会根据前提条件
来选择一个子节点来执行
顺序节点指的就是一次执行所有的子接点
并行节点指的就是同时执行所有的子节点
并设定一个推出的条件
然后行为节点指的就是具体的行为
也就是具体要做的一些事情
不同的游戏
它需要定义不同的一个行为节点
行为节点是可以复用的
每个节点它可以包含一个前提条件
当前提条件满足的时候才会进入这个
选择它后面的节点
这里我们就大致讲一下
行为树的它们一个构造
如果大家有兴趣的话
可以自己下去看下相关的一些技术的文档
前面说的是要做什么
然后
在做AI的时候
另外一个很重要的概念就是要怎么去做
简单点来讲
其实就是怎么做
它的概念就是要去什么地方做什么事情
既然要去到某个地方的话
那么就首先是需要寻路
导航网格寻路
是目前比较普遍的一个寻路的机制
大部分的游戏引擎
都会集成一套导航网格的构建系统
像左边的是unity
右边的是虚幻
以及它通常也会提供一套
基于导航网格的寻路的算法
我们能够它提供一套
能够计算出我们去到某个点
它所经过了其中的一些中间的一些
它的一些路径出来
然后是移动
这种移动只得有好几种
移动可以分为单体移动群体移动
以及带阵型的移动
这里展现的是一种
类似于群体移动的它的一个表现
大家可以看到它在移动当中
它会有一些
它会有一个
它并不是一个体性的移动
它会有一些群体的表现在上面
它会
互相之间会有一些斥力
然后他会朝着一个人物的移动方向
这个是Fortnite(堡垒之夜)
上面它的一个
做的一个虚幻四的一个
群体移动的一个组件
它做了一个功能
最后是动作
它会根据
既然我们挑了位置
要去往那方面去走
我们要有一个动作
来表现出它的一些具体的行为
然后我们会根据动作树去混合出它的
游戏角色它的一个动作的表现
像走跑跳、站蹲趴等等
-1. 1什么是游戏(上)
--选择题
-1.2 什么是游戏(下)
--选择题
-1.3 游戏是如何开发出来的
-1.4 游戏引擎(上)
-1.5 游戏引擎(下)
--单选题
-1.6 如何成为一个游戏开发者
--多选题
-2.1 什么是游戏服务器
--单选题
-2.2 游戏服务器的和分类发展
--单选题
-2.3 核心技术和实现难点
--单选题
-2.4 设计原理与方法论
--单选题
-3.1 三维坐标系统
--多选题
-3.2 向量与运算
--单选题
-3.3 矩阵与线性变换
--双选题
-3.4 四元数
--3.4 四元数
--多选题
-4.1 游戏循环概述(上)
--多选题
-4.2 游戏循环概述(下)
--单选题
-4.3 《无尽之路》的实现
--单选题
-4.4 支撑游戏的功能
--选择题
-4.5 支撑游戏的机制与系统
--多选题
-5.1 基本介绍
--5.1 基本介绍
--单选题
-5.2 随机数生成器
--单选题
-5.3 随机数分布与应用
--单选题
-6.1 什么是游戏玩法开发
--单选题
-6.2 建立愿景 Vision
--单选题
-6.3 划定边界 Scope
-6.4 迭代 Iteration
--单选题
-6.5 迭代 Iteration+抛光Polish
--单选题
-7.1实时图形渲染管道 宏观渲染系统
--单选题
-7.2实时图形渲染管道 应用阶段
--单选题
-7.3实时图形渲染管道 几何阶段
--单选题
-7.4实时图形渲染管道 光栅化阶段
--单选题
-7.5实时图形渲染管道 总结 参考
-8.1 物理回顾1
--单选题
-8.2 物理回顾2
--单选题
-8.3 材质 1
--8.3 材质 1
-8.4 材质 2
--8.4 材质 2
-8.5 材质3
--8.5 材质3
-8.6局部光照
--8.6局部光照
--单选题
-8.7 全局光照
--8.7 全局光照
--单选题
-9.1 动画介绍
--9.1 动画介绍
--多选题
-9.2 游戏动画介绍
-9.3 动画技术类型
--多选题
-9.4 骨骼蒙皮动画
--多选题
-9.5 动画流水线
--多选题
-9.6 动画前沿趋势
--多选题
-10.1 .基本概念
--多选题
-10.2 设计目标
--多选题
-10.3 传输数据分析
--多选题
-10.4 常用同步方案 1
-10.4 常用同步方案 2
-10.4 常用同步方案 3
-10.4 常用同步方案 4
--多选题
-10.5 方案对比
--多选题
-11.1 基本图元
--单选题
-11.2 图元距离(上)
--单选题
-11.2 图元距离(下)
--单选题
-11.3 图元相交测试+ 其他几何方法
--单选题
-12.1 著名物理引擎介绍
--单选题
-12.2 物理引擎原理(上)
--单选题
-12.3 物理引擎原理(下)
--单选题
-12.4 游戏中的物理体
--单选题
-12.5 物理引擎使用入门
--单选题
-13.1开发语言
--13.1开发语言
--单选题
-13.2 开发环境
--单选题
-13.3 腾讯开发组件介绍
--单选题
-13.4 网络通信+业务框架介绍
--多选题
-14.1 进程间通信(上)
-14.2 进程间通信(下)
-14.3 通信格式
-14.4 并发模型
-14.5 超时处理
-14.6 大系统小做(上)
--多选题
-14.7 大系统小做(下)
-14.8 架构层面的技术支持(上)
--单选题
-14.9 架构层面的技术支持(下)
-14.10 分布系统的关键能力
--多选题
-15.1 游戏人工智能综述
-15.2 人工智能在游戏中主要方法 上
--多选题
-15.3人工智能在游戏中主要方法 (下)
-15.4 人工智能在游戏制作中的应用领域1
--多选题
-15.5 人工智能在游戏制作中的应用领域2
-15.6 人工智能在游戏制作中的应用领域3
--多选题
-15.7 人工智能在游戏运营中的应用实践(上)
-15.8 人工智能在游戏运营中的应用实践(下)
--多选题
-16.1 游戏支撑系统(1)
--单选题
-16.2 游戏支撑系统(2)
--单选题
-16.3 游戏支撑系统(3)
--单选题
-16.4 游戏支撑系统(4)
--单选题
-16.5 游戏支撑系统(5)
-17.1 游戏逻辑服务器(上)
--单选题
-17.1 游戏逻辑服务器(下)
-17.2 外挂与反外挂(上)
-17.2 外挂与反外挂(下)
--多选题
-18.1运行环境
--18.1运行环境
--多选题
-18.2物理部署
--18.2物理部署
--多选题
-18.3系统的可运维性
--多选题
-18.4运维案列分析
--多选题