UE4虚幻引擎开发手机游戏(一)

发表于2017-05-09
评论10 2.13w浏览
UE4虚幻引擎作为游戏开发引擎之一,在很多项目中都会使用到。下面就给大家分享下如何使用UE4开发高品质的手机游戏。

作者介绍


大纲

•介绍
•UE4 针对3A级手游的渲染管线和特征集
•使用ES3.1, Vulkan, Metal Api的高端机图形处理讲解

•即将发布的UE4移动平台特性

介绍

当前市场上使用UE4开发手游的情况

•有许多已经发布的和正在使用UE4开发的手游, 品质相当高
•开放世界的MMO已经可以在手机上流畅运行
2016年发布的高品质游戏《天堂II 革命》

天堂II 革命

•移动平台的开放世界MMO
•拉高移动平台品质(Sad。。。)
•巨大的成功(月流水1.76亿美元)

天堂II 革命

Netmarble Games(网石游戏)使用标准的UE4特性进行该游戏的开发

•开发, 测试和调试都在PC上完成
•UE4 移动渲染器
•移动HDR, 后处理
•无缝地图
•LevelStreaming(UE4的关卡组织方式,不翻译了)
•材质
•使用BP(蓝图)制作的UI
•扩充性良好的设备适配
最低配置:GalaxyS4Iphone5

UE4 移动平台渲染器

UE4渲染器

UE4拥有3个不同的渲染器

•延时渲染器(DeferredRenderer)
•编辑器, PC和主机的默认渲染器
•需求SM4, SM5 特性集(FeatureLevel, UE4定义硬件平台特性的方式,不同FeatureLevel对应不同的硬件平台特性)
•前向VR渲染器(实际上是专门为VR增加的Forward+渲染器,后续也慢慢用作手机的高端渲染器)
•最早用于Epic开发的VR游戏 《Rebo Recall》,这样可以直接支持MSAA抗锯齿(延时渲染对抗锯齿的支持非常不友好, VR游戏对抗锯齿又有较高要求)
•拥有跟延时渲染类似的特性(可以支持较多的动态灯光),然后也与延时渲染存在一些小的差异(比如屏幕空间效果)
•需求SM5特性集(其实就Forest引擎的移植版来说,用Cpu代替cs对物体的光照集进行剔除,在较早期的移动平台也可以支持该渲染器)
•移动渲染器(其实就是经典的Forward渲染器)
•一般是移动平台使用(其实也有部分追求高帧率的游戏使用该方式,在对场景做静态烘焙后, 游戏品质也可以达到水准之上)
•前向渲染(对物体进行绘制的同时计算光照,所以灯光数越多, 系统压力越大)
•对光照和阴影的支持比前面两个渲染器差很多

•需求“ES2”,“ES3_1”特性集

特性集

•UE4可以在多个特性集之间进行切换,特性集会决定材质编辑器支持的Shader特性。
•特性集同样检测可用的UE4渲染器。
•“ES2”和“ES3_1”命名的特性集并非严格对应OpenGLES2 OpenGL ES3 API集合
•ES2渲染器会在可能的情况下使用ES3的特性。

•材质切换节点(FeatureLevel Switch)可以在材质中使用

特性集介绍
ES2
Mobile渲染器
•对应OpenGLES2.0-3.xAndroid平台)       OpenGL ES2.0iOS平台,支持ES3.0IOS平台已经能够支持metal, 所以直接使用metal渲染器)
•支持最大8个纹理单元
Android平台:

 ES3.0扩展的支持
Fallback
32RenderTarget

特性集介绍

ES3_1高端Mobile特性集

Mobile渲染器

OpenGLES 3.1Android平台) VulkanAndroid平台, Android7.0 MetaliOS平台)

•最大16层纹理单元支持

•浮点RenderTarget支持

VertexTextures Fetch支持

sRGB支持(可以支持硬件Gamma校正,但此处一般使用更简化的Shader计算代替,方便统一低配与高配机的效果)

特性集介绍

SM4

•延时渲染器

Direct3D10OpenGL3.0 Metal支持

•最大16层纹理单元

•支持延时渲染的最低特性集

 

特性集介绍
SM5
•延时或者前向VR渲染器(Forward+)
Direct3D11 OpenGL4.0 Playstation 4 XboxOne Metal GLES3.1 +AEP
16+纹理单元支持
•支持Tessellation(曲面细分)的最低特性集,可以利用Compute Shader完成一些高级渲染特性支持。

特性集(Android

打开黄框选中的特性可以让UE4生成ES3_1特性集使用的Shader

UE4在对应设备执行时会自动选择最匹配的RHI(抽象硬件接口)和特性集

•这些配置可以被设备配置重写

Android Vulkan介绍

Vulkan是虾米?

•用来取代OpenGLOpenGLES的次世代的渲染Api

•由工业派设计,克拉魔发起。

•专为下一代硬件设计。

支持VulkanUE4Android平台, iOS官方标配是Metal, 不支持Vulkan

•运行Android7.0的设备现在自带一个可工作的Vulkan驱动。

•轻量级的Api, 最小化Cpu开销。

•“PipelineState Objects”带来高效的渲染状态切换。

•更多的渲染批次,因为每个渲染批次更轻量化

•???大意应该是按“RenderPass”组织方式带来更高效的Gpu硬件利用率(字被人挡住了。。。)

 

这里是Epic官方的Vulkan示例(可以自行查阅相关视频)

颜色缓冲区(HDR模式)

对比延时渲染器, UE4移动渲染器使用一个前向渲染器, 仅输出颜色,而不是使用Gbuffer

•场景颜色

•理想的情况在支持的设备上使用16位浮点RenderTarget

•不支持的情况使用“ RGBE 编码”或者“马赛克”模式(??Whatis mosaicmode???)

•在渲染过程中RGB存储HDR颜色值。

Alpha通道用来存储后续会使用到的深度值(软粒子,贴花)。

•深度缓冲区

•通常使用24位深度,8位模板的模式。

•后备缓冲区

32RGBA

•存储后处理和Tonemapping后的最终结果。

RGBE HDR 编码

RGB + 指数 的编码方式需要被低端移动设备使用(运行Android5.XGalaxyS6/Note4等)

•需要 EXT_shader_framebuffer_fetch的扩展(该扩展在GalaxyS6上可用)

•支持full HDR, bloom 而且没有分辨率限制。

从图中可以看到Native HDR和“Encoding HDR的实现基本没有区别

 

颜色缓冲区(LDR 模式)

32位硬件后备缓冲区 & 深度缓冲区

•系统分配(比如Android上的EGL

•许多移动设备并不支持sRGB

•场景在Gamma空间中被直接渲染到后备缓冲区,随后透明物体和UI也被直接渲染到后备缓冲区

•最快的渲染方式(一般给简单游戏或者VR游戏使用)

移动平台渲染管线

1.视口建立

2.GPU粒子模拟

3.渲染阴影图

4.基础Pass渲染

5.贴花处理

6.混合阴影处理

7.半透明物理处理

8.后处理 & ToneMapping

9.HUD& UI

1. 视口建立

•查询所有可见物体

•视锥裁剪

•距离裁剪

•预计算的可见性(类似U3DUmbra,离线计算场景的可见性,运行时通过少量开销即可判断静态物体的遮挡情况)

•关联的可见性

•查询所有可见阴影

•收集动态Mesh

•更新视口相关的UniformBuffer

2. GPU粒子模拟

•需要支持OpenGLES3.1的设备

•在GPU上对粒子进行模拟

•将粒子位置写入128位的目标中

•将粒子的速度写入64位的目标中

3. 阴影图渲染

•准备深度绘制目标

•查询所有产生阴影的对象

•使用主光视角对这些物体进行渲染

•阴影图将在后续过程被使用

•在基础Pass阶段处理CSM阴影的时候使用

•随后,在需要混合阴影投影的地方使用

 


  UE4虚幻引擎开发手机游戏(二)

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引