01 UE入门
概览
课程内容:
- UE学习途径和方法的介绍
- UE编辑器使用和编程技巧
- UE引擎工具了解
课程目标
- 熟悉UE引擎的编辑器操作,了解UE引擎的游戏模式框架
- 能够独立获取和编译UE源码
- 能够在UE引擎中实现蓝图编程和C++编程
- 能够使用UE引擎构建Andorid平台游戏安装包
本节课程作业:
- 源码编译UE4/5,新建一个C++工程,进行简单场景编辑和工程设置
- 编译并构建安装包,确保能够用来将游戏工程安装到手机正常运行(若无Andorid手机可构建桌面版本)
游戏团队的典型结构
graph LR
游戏团队 --> 程序
游戏团队 --> 美术
游戏团队 --> 策划
程序 --> 前台
程序 --> 后台
前台 --> 游戏性-周边系统-工具-性能分析-引擎
后台 --> 游戏性-周边系统-工具-性能分析-引擎
美术 --> 原画-建模-地编-动画-特效
策划 --> 数值-关卡-系统-剧情-战斗
游戏引擎介绍
Unreal
graph LR
优势 --> 渲染品质
优势 --> C++与蓝图
优势 --> 开发周期
优势 --> 跨平台
优势 --> 开源
渲染品质 --> 电影级别PBR渲染
渲染品质 --> 先进的着色模型
C++与蓝图 --> 性能与可视化编程并重
开发周期 --> 基于射击类的GamePlay框架
跨平台 --> 移动-主机-PC-VR
开源 --> 有利于技术提升和定制化改造
商业引擎
名称 | 所属 | 是否开源 | 知名作品 |
---|---|---|---|
Unity | Unity Technologies | 闭源,商业引擎 | 大部分手游,独立游戏 |
Cry Engine | Crytek | 开源,商业引擎 | 孤岛惊魂,孤岛危机 |
Source2 | Valve | 未开源,商业引擎 | Half-Life: Alyx,CS2,Dota2 |
EA | Frostbit Engine | 内部引擎 | 战地系列 |
顽皮狗 | Naughty Dog Game Engine | 内部引擎 | 神海系列,美末系列 |
R星 | RAGE | 内部引擎 | GTA系列,荒野大镖客系列 |
育碧 | AnvilNext2 | 内部引擎 | 刺客信条系列 |
动视 | IW Engine(基于id Tech3) | 内部引擎 | 使命召唤系列 |
游戏引擎架构
推书:Game Engine Architecture
游戏子系统 世界编辑器 动画 游戏基础系统 渲染引擎 物理引擎 工具 资源管理 核心系统 平台独立层 第三方SDK OS 硬件
关于世界编辑器
- 世界编辑器通常是关卡编辑和地形编辑等
- 一般的游戏引擎都是世界编辑器和游戏引擎独立开来,编辑好后再导入游戏引擎,而UE可以在运行过程中修改世界编辑器
游戏引擎:渲染
推荐
- 书:Real Time Rendering
- 课程:GAMES101 & GAMES202
渲染模式
- Deferred Rendering(延迟渲染)
- 编辑器、PC、Console默认渲染管线
- Forward+ Renderer
- 用于桌面VR游戏,支持MSAA
- Mobile Renderer
- Forward Render
- Deferred Render
游戏渲染模式
Immediate Mode Rendering(立即渲染模式):正常处理,对能耗和带宽需求高,适用于PC游戏
Tile Based Rendering:将屏幕划分为多个格子,一次只处理单个小块,有利于减小GPU的显存
Tile Based Deferred Rendering:将渲染过程中看不见的东西提前去掉,减少运算量
正向渲染(Forward Rendering)
我们知道,正向渲染(Forward Rendering),或称正向着色(Forward Shading),是渲染物体的一种非常直接的方式,在场景中我们根据所有光源照亮一个物体,之后再渲染下一个物体,以此类推。
传统的正向渲染思路是,先进行着色,再进行深度测试。其的主要缺点就是光照计算跟场景复杂度和光源个数有很大关系。假设有n个物体,m个光源,且每个物体受所有光源的影响,那么复杂度就是O(m*n)。
正向渲染简单直接,也很容易实现,但是同时它对程序性能的影响也很大,因为对每一个需要渲染的物体,程序都要对每个光源下每一个需要渲染的片段进行迭代,如果旧的片段完全被一些新的片段覆盖,最终无需显示出来,那么其着色计算花费的时间就完全浪费掉了
几何缓冲区(G-buffer)
G-Buffer,全称Geometric Buffer ,译作几何缓冲区,它主要用于存储每个像素对应的位置(Position),法线(Normal),漫反射颜色(Diffuse Color)以及其他有用材质参数。
根据这些信息,就可以在像空间(二维空间)中对每个像素进行光照处理。
Deferred Rendering(延迟渲染)
可以将延迟渲染( Deferred Rendering)理解为先将所有物体都先绘制到屏幕空间的缓冲(即G-buffer,Geometric Buffer,几何缓冲区)中,再逐光源对该缓冲进行着色的过程,从而避免了因计算被深度测试丢弃的⽚元的着色而产⽣的不必要的开销。
也就是说延迟渲染基本思想是,先执行深度测试,再进行着色计算,将本来在物空 间(三维空间)进行光照计算放到了像空间(二维空间)进行处理。
对应于正向渲染O(m*n)的 复杂度,经典的延迟渲染复杂度为O(n+m)。
移动渲染
移动平台渲染器独立于桌面和控制台渲染器,具有自己的专门针对移动设备优化的功能子集。
移动渲染 | 虚幻引擎文档 (unrealengine.com)
游戏引擎:物理
物理引擎包含的内容:碰撞检测,动态约束,刚体物理,车辆物理,布娃娃系统等等
知名物理引擎:
- Havok:先后被英特尔和微软收购,CPU友好,闭源,塞尔达使用的就是Havok
- PhysX:被Nvidia收购,GPU友好,集成于UE4和Unity
- Bullet:最早开源,用于GTA5,荒野大镖客等
UE如今开发了自己的物理引擎Chaos
UE介绍
背景介绍
- UE Evolution
版本 | 年份 | 作品 | 类型 |
---|---|---|---|
UE1 | 1998 | Unreal | FPS |
UE2 | 2003 | UnrealTournament 2003 | FPS |
UE3 | 2006 | Gears of War | TPS |
UE4 | 2014 | Fortnite | TPS |
UE5 | 2021 | Fortnite | TPS |
- UE学习资料
- Youtube虚幻引擎官方账号
- B站虚幻引擎官方账号
- 知乎虚幻引擎官方账号
编辑器的使用
- 不仅是一个世界编辑器
- 管理整个游戏资产数据
- 提供统一、实时、所见即所得的资产数据库视图
1.典型功能
地图关卡的创建和分层
可视化游戏世界
导航
- WSAD/QE + 鼠标右键:改变视角
- F:将相机聚焦在所选的物体上
- Bookmarks:保存和读取视角
- G:取消线框
选取
- ctrl+alt:框选区域中的全部物体
属性设置
安防与对齐辅助工具
- 物体的旋转缩放,选中物体后按WER
- 对齐工具
- 贴地
- 中心贴地:End
- 轴心贴地:Alt + End
- 碰撞盒贴地:Shift + End
快速迭代
Volume
光源
2.命名规范
UE编程技巧
游戏框架
graph LR
PlayerController -- Join --> Game
Game --> GameMode
Game --> GameState
PlayerController -- Possess --> Pawn
AIController -- Possess --> Pawn
PlayerController -- Contains --> HUD,Input,PlayerCameraManager
GameMode 游戏模式
游戏模式类负责设置正在执行的游戏的规则。
规则可包括玩家如何加入游戏,是否课暂停,关卡过度,以及任何特定的游戏行为
GameState游戏状态
游戏状态包含要复制到游戏中的每个客户端的信息,它表示整个游戏的“游戏状态”。通常包含有关游戏分数,比赛进程等等
Blueprint与Lua
蓝图
蓝图是一类特殊的asset,可以使用直观、基于节点的方式创建逻辑,或者设置一些变量数据。
蓝图也可以选择继承C++类,获取C++中定义的变量,调用C++中定义的函数,或者实现C++中定义的event
缺点:
- 容易形成蜘蛛网
- 二进制格式,Diff和MErge不方便
使用原则:
- 用于数值配置
- 用于简单的效果展示
- 用于特别简单的逻辑(代码不超过屏幕范围)
Lua
Lua是目前最主流的游戏脚本语言,UE也支持Lua
使用Lua可以不用再次编译,便于游戏热更新
C++ In UE
编程规范
T-模板类的前缀, i.e. TArray, TMap, TQueue
U- 继承自 UObject 的类前缀, i.e. UTexture
A-继承自AActor 的类前缀, i.e. AGameMode
F-structs及其他多数类均以F为前缀, i.e. FName, FVector
I- 抽象接口类前缀, i.e. ITransaction
E-枚举类型的前缀。,i.e. ESelectionMode
b-布尔变量必须以b为前缀,i.e. bEnabled
UnrealHeaderTool需要正确的前缀才能正常编译
基本类型
不使用C++原生的整型(char, short, int, long, etc.)
自定义ints & strings in GenericPlatform.h (int32, uint32, uint64, TCHAR, ANSICHAR etc.)
容器
TArray, TSparseArray-Dynamic arrays
TLinkedList, TDoubleLinkedList
TMap-Key-value hash table
TQueue- Lock free FIFO
TSet-Unordered set (without duplicates)
And many more in Core module
智能指针
TSharedPtr, TSharedRef-for regular C++ objects
TWeakPtr-for regular C++ objects
TWeakObjPtr – for UObjects
TAutoPtr, TScopedPtr
TUniquePtr
其他常用结构体
- FBox, FColor, FGuid, FVariant, FVector, TBigInt, TRange
UObject
UObjects增加了标准C++的很多功能
Run-time reflection of class properties and functions
Serialization from/to disk and over the network
Garbage collection
Meta data
Also: Blueprint integration
Magic Macros
UCLASS - 类
USTRUCT- 结构体
UFUNCTION- 成员函数
UPROPERTY-成员变量
引擎工具
日志
UE_LOG
可视化日志
内置控制台
游戏运行时,~键用来打开控制台输入窗口(Mobile使用四指同时滑屏操作)
Stat FPS (显示帧数)
t.MaxFPS 1000 (最高帧率限制到1000)
Stat UNIT (对游戏线程,渲染线程,GPU耗时进行统计,分析瓶颈)
Stat GAME (对游戏各个模块的tick耗时进行统计)
Stat SceneRendering (渲染基本信息统计,可以看DrawCall数)
Stat Engine(渲染信息统计,可以看三角形数量)
Stat InitViews (可以看到视口剔除的三角形数量)
Stat RHI (可以看到所有的DrawCall)
调试工具
GPU Profile
RenderDoc
Unreal Insight