UE4虚幻引擎开发手机游戏(二)
上篇回顾:UE4虚幻引擎开发手机游戏(一)
前面已经对使用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版本发布
• 简单的远程工具链安装
• 远程日志输出?