UE4虚幻引擎开发手机游戏(一)
作者介绍
大纲
介绍
当前市场上使用UE4开发手游的情况
天堂II 革命
天堂II 革命
Netmarble Games(网石游戏)使用标准的UE4特性进行该游戏的开发
UE4 移动平台渲染器
UE4渲染器
UE4拥有3个不同的渲染器
特性集
特性集介绍
•ES2
•Mobile渲染器
•对应OpenGLES2.0-3.x(Android平台) OpenGL ES2.0(iOS平台,支持ES3.0的IOS平台已经能够支持metal, 所以直接使用metal渲染器)
•支持最大8个纹理单元
•Android平台:
ES3.0扩展的支持
Fallback到32位RenderTarget
特性集介绍
ES3_1高端Mobile特性集
•Mobile渲染器
•OpenGLES 3.1(Android平台) Vulkan(Android平台, Android7.0) Metal(iOS平台)
•最大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是虾米?
•用来取代OpenGL和OpenGLES的次世代的渲染Api。
•由工业派设计,克拉魔发起。
•专为下一代硬件设计。
•
支持Vulkan的UE4(Android平台, iOS官方标配是Metal, 不支持Vulkan)
•运行Android7.0的设备现在自带一个可工作的Vulkan驱动。
•轻量级的Api, 最小化Cpu开销。
•“PipelineState Objects”带来高效的渲染状态切换。
•更多的渲染批次,因为每个渲染批次更轻量化
•???大意应该是按“RenderPass”组织方式带来更高效的Gpu硬件利用率(字被人挡住了。。。)
这里是Epic官方的Vulkan示例(可以自行查阅相关视频)
颜色缓冲区(HDR模式)
对比延时渲染器, UE4移动渲染器使用一个前向渲染器, 仅输出颜色,而不是使用Gbuffer。
•场景颜色
•理想的情况在支持的设备上使用16位浮点RenderTarget。
•不支持的情况使用“ RGBE 编码”或者“马赛克”模式(??Whatis “mosaic”mode???)。
•在渲染过程中RGB存储HDR颜色值。
•Alpha通道用来存储后续会使用到的深度值(软粒子,贴花)。
•
•深度缓冲区
•通常使用24位深度,8位模板的模式。
•
•后备缓冲区
•32位RGBA。
•存储后处理和Tonemapping后的最终结果。
RGBE HDR 编码
RGB + 指数 的编码方式需要被低端移动设备使用(运行Android5.X的GalaxyS6/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. 视口建立
•查询所有可见物体
•视锥裁剪
•距离裁剪
•预计算的可见性(类似U3D的Umbra,离线计算场景的可见性,运行时通过少量开销即可判断静态物体的遮挡情况)
•关联的可见性
•查询所有可见阴影
•收集动态Mesh项
•更新视口相关的UniformBuffer
2. GPU粒子模拟
•需要支持OpenGLES3.1的设备
•
•在GPU上对粒子进行模拟
•
•将粒子位置写入128位的目标中
•
•将粒子的速度写入64位的目标中
3. 阴影图渲染
•准备深度绘制目标
•查询所有产生阴影的对象
•使用主光视角对这些物体进行渲染
•阴影图将在后续过程被使用
•在基础Pass阶段处理CSM阴影的时候使用
•随后,在需要混合阴影投影的地方使用