UE4虚幻引擎开发手机游戏
作者:互联网
该文章来自用户转载 点击阅读原文
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 •扩充性良好的设备适配 •最低配置:GalaxyS4,Iphone5UE4 移动平台渲染器
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.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阴影的时候使用
•随后,在需要混合阴影投影的地方使用
前面已经对使用UE4开发高品质的手机游戏的UE4渲染器、特性集和渲染管线做了介绍,这篇文章是要对它下面部分进行介绍,结合这两部分的干货内容,大家才能更好的去利用UE4引擎做出一款好的手机游戏。
4. 基础Pass(准备阶段)
• 根据阴影和灯光的属性为物体选择合适的Shader
• 无光模式
• 预处理的距离场阴影 + 光照图
• 预处理的距离场阴影 + 光照图 + CSM(用于处理动态物体阴影)
• 动态光照(一般与CSM阴影配合)
• 其它
4. 基础Pass(绘制阶段)
绘制所有拥有不透明材质的物体(同时计算物体光照), 在HDR/线性空间输出场景颜色
• 动态的方向光和点光源(逐像素光照, ps中计算光照)
• 静态的距离场阴影
• 动态的CSM阴影
• 静态灯光产生的光照图
• 天光
• 反射
4. 基础Pass(渲染顺序)
物体的渲染顺序由设备决定
• 不需要任何排序的情况
• 支持TBDR的芯片,一般都支持 “HiddenSurface Removal”(“隐藏面消除”)
• 重新按从近到远的顺序对每个列表进行排序
• 最小化状态改变
• 重新按从近到远的顺序对所有列表中的所有物体进行排序
• 最小化Overdraw
• non-ImgTec GPU的默认选项
• 你能够根据自己的需要对该行为进行定制
• r.ForwardBasePassSort = x
5. 延时贴花
• 需要场景深度获取的功能
• 通过支持的扩展实现
• GL_ARM_shader_framebuffer_fetch_depth_stencil
• GL_EXT_shader_framebuffer_fetch
• GL_OES_depth_texture
• 深度缓冲区解析
• 支持“Receives Decals”标识
• 模板操作
• 贴花不支持光照
6. 混合阴影投影
• 与延时贴花类同
• 不能与静态光照进行比较好的混合
• 静态光照 + CSM是一个更好的选择(4.12+)
7. 半透明物体处理
• 利用Base Pass时使用的相同Shader,在半透的混合模式下对图元进行绘制。
• 不对深度缓冲区进行写操作。
• 反射支持
• 需要完整的场景颜色拷贝。
8. 后处理
• 仅在HDR打开的时候才被支持
• 根据效果使用的情况需要一些额外的Pass
• 景深
• 自定义的后处理材质
• Tonemapper Pass发生在最后阶段
• 将HDR 颜色映射到8位每通道的RGB颜色
• 同时将颜色值写回后备缓冲区
• Bloom也在该阶段应用
• Filmic tonemapping(4.13+)
9.HUD & UI
• 直接将UI对象绘入后备缓冲区
• Slate BP(蓝图)
• 幕布(Canvas)
• 交换后备缓冲区
光照: 全动态光照
移动的方向光 + CSM阴影
• 编辑器准备
• 方向光组件,“Mobility” 属性设置为 “Movable”
• 设置“Dynamic Shadow Distance Movable Light” 的值
• 设置“Num Dynamic Shadow Cascades”的值
• 优点
• 所有的光都是动态的,都可以被运行时修改
• 减少内存大小和包体大小(因为没有预计算的光照信息)
• 缺点
• 所有在场景中的物体,不管是静态还是动态的,都需要被CSM渲染
• 额外的渲染批次和CSM生成开销
静态方向光
更简单的移动平台光照准备
• 直接光和高光被逐像素计算
• 强度和颜色能被运行时改变,但光的方向不能被改变
• 编辑器准备
• 方向光组件中,将“Mobility”属性设置为“Stationary(1 supported)”
• 将“Cast Dynamic Shadows”属性设置为“False”
优点
• 更快的渲染速度
• 高质量的距离场阴影
缺点
• 光的方向不能运行时改变
• 仅支持混合角色阴影
• 内存和包体大小因为预计算的Shadowmap等信息变大
静态方向光 + CSM阴影
4.13版本的优化
• 不再需要对每个物体设置是否接收CSM阴影的属性。
• 编辑器准备
• 方向光组件,将“Mobility”属性设置为“Stationary(1 supported)
• 设置“Dynamic Shadow Distance Stationary Light”的值
• 设置“Num Dynamic Shadow Cascades”的值
• 禁用 “Inset Shadows For Movable Objects”选项
优点
• 静态几何体通过距离场阴影产生静态阴影
• 动态角色阴影能够很好的与静态阴影混合
缺点
• CSM生成消耗(仅仅只包含动态对象)
• 基础Pass需要一个额外的纹理单元(用于CSM阴影)
动态点光源
与其他光照准备独立
• 每个物体/表面支持最多4个点光
• 将“Max Movable Point Lights” 设为大于0的值, 该选项在Project Settings/ Engine Rendering中
优点
• 当成基础Pass的一部分进行渲染,所以不会产生额外的渲染批次
缺点
• 需要额外的shader计算
灯光通道(???没有搞明白这东东的作用)
灯光通道在4.13及以上版本被支持
• 限制:每个物体仅一个静态或者动态方向光能被应用
后处理 – FilmicTonemapper
• 对于美术来说可以更自由的获取他们想要的视觉效果。
• 通过控制台变量启用
• r.tonemapperfilm(4.12-5.15)
• 4.15默认开启了该选项
• r.mobile.tonemapperfilm(4.16+)
• 因为有额外的性能开销,建议仅在高端机上使用。
自定义后处理过程
• 自定义后处理过程
• 通过材质系统创建后处理Shader
• 自定义深度
• 算定义深度(4.14新增)
• 选中的物体可以被渲染到一个独立的深度缓冲区中
• 这个独立的缓冲区可以在自定义的后处理中被采样
后处理 – 自定义模板值
自定义模板值(4.15新增)
• 在PC上可以直接对模板缓冲区中的模板值进行采样
• 在移动GPU上不能进行该操作
• UE4通过渲染到一个独立的颜色缓冲区的方式支持该功能
非渲染部分
移动平台的补丁和DLC支持
最小化的APK/IPA + DLC 打包向导(4.13)
• 极小的包体下载(AppStore/GooglePlay)
• 仅需要下载内容时显示的UI
• 从云端下载游戏内容和补丁
• 强制用户内容更新
移动平台的补丁和DLC支持
“Mobile Patch Utilities” BP 库(4.14)
• 通过BP控制下载安装处理过程
• 进度条 & 错误处理
• 存储空间
• Wifi 可用性
• 其他
大Apk包体支持
• 在中国分包模式不可行(阿西, 专门提到中国), 然而在某些情况下大包体在一些设备上不能正常工作
• 4.16开始这个问题被修复,现在不存在APK包体大小的限制了
4.16中的移动平台改进
• 更小的Android执行程序
• 更改编译器的选项移除不使用的代码
• UI 相关蓝图的性能优化
• Android的运行时权限获取
4.16中的移动平台改进
• 材质节点新增“VertexInterpolator” – 对移动优化极其有用(???使用VS中的插值代替PS插值)
开发中的移动平台功能
• 更快的帧迭代时间 –Android平台
• 改进的 编辑器内 移动平台预览
• 改进的PC iOS版本发布
• 简单的远程工具链安装
• 远程日志输出?
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
标签:渲染器,渲染,支持,阴影,手机游戏,虚幻,缓冲区,UE4 来源: https://www.cnblogs.com/skiwnchiwns/p/10342651.html