ue4移动到一定距离_堡垒之夜的移动端优化实践(Vulkan与OpenGL ES)

本文介绍了《堡垒之夜》在移动端的优化实践,重点关注使用Vulkan与OpenGL ES的差异。文章涵盖了挑战、解决方案、Vulkan的优势、性能优化策略,以及移动端内容的适配。优化措施包括添加RHI线程、使用Vulkan减少draw call和状态改变、优化遮挡剔除等,旨在提高性能和内存效率。
摘要由CSDN通过智能技术生成

本文翻译自:https://www.khronos.org/assets/uploads/developers/library/2019-gdc/Vulkan-Bringing-Fortnite-to-Mobile-Samsung-GDC-Mar19.pdf

由于本人才疏学浅,翻译难免有误,望各位不吝惜指正。


e6d8afdcdafd978309b4699a98c7ac35.png

感谢作者为我们带来的分享:堡垒之夜的移动端优化(Vulkan与OpenGL ES)。


c906b722c681c567a82a181455a05295.png

文章内容

  • 第一部分------在移动端实现堡垒之夜的挑战和我们的解决方案
    • 移植堡垒之夜到移动端的挑战
    • 性能
    • 内存
    • UE的改进
  • 第二部分------堡垒之夜移动端的Vulkan实现方案
    • Vulkan的优点
    • 性能优化
    • 缓存命中和内存占用优化

af54506c4a148a6db502bc2d76dfe836.png

完全相同的游戏体验,而不是精简版

一开始,我们的目标就是实现一个跨平台的游戏:

  • 在所有平台使用相同的地图(所有平台定期同步更新)
  • 对游戏玩法有影响的部分必须在所有平台支持
  • 游戏的交战距离在多个平台保持一致
  • 代码实现不能偏离UE4主线

00d5781a7bf35823b3bcfae530f38a4f.png

堡垒之夜使用的渲染特性(PC和主机)

  • 延迟渲染
  • 可移动的方向光源
  • CSM(级联阴影贴图)
  • Ray-traced Distance Field Shadows
  • 可移动的天空
  • Distance Field Ambient Occlusion
  • Screen Space Ambient Occlusion
  • 局部光照
  • 点光源+聚光灯
  • 阴影
  • 阴影缓存
  • 材质
  • 基于物理
  • 次表面散射
  • 双面植被
  • 效果
  • 体积雾
  • Light Shafts
  • GPU粒子模拟
  • 柔化粒子
  • 贴花
  • 植被动画
  • 后处理
  • 泛光
  • 对象的轮廓
  • ACES Tonemapper
  • 反走样
  • TAA
  • MSAA

斜体表示未使用的特性。


5f5d4757adff57bf42852760dbca53fa.png

堡垒之夜使用的渲染特性(移动端)

  • 前向渲染
  • 可移动的方向光源
  • CSM(级联阴影贴图)
  • Ray-traced Distance Field Shadows
  • 可移动的天空
  • Distance Field Ambient Occlusion
  • Screen Space Ambient Occlusion
  • 局部光照
  • 点光源+聚光灯
  • 阴影
  • 阴影缓存
  • 材质
  • 基于物理
  • 次表面散射
  • 双面植被
  • 效果
  • 体积雾
  • Light Shafts
  • GPU粒子模拟
  • 柔化粒子
  • 贴花
  • 植被动画
  • 后处理
  • 泛光
  • 对象的轮廓
  • ACES Tonemapper
  • 反走样
  • TAA
  • MSAA

斜体表示未使用的特性。


b8ed0798d4042095e57b265bd69e6aa8.png

移动端的内容适配

  • 可破坏的层次LOD
    • 将多个独立的资源根据层次结构聚合成一个代理对象
      • 根据距离信息使用代理对象代替原资源
    • 堡垒之夜是一个允许破坏场景任意部分的游戏
      • 顶点着色器根据vertex color所包含的标记信息从代理资源中剔除被破坏的几何数据

711415abfaf0c11851c4bf0c6d588425.png

从数字角度看堡垒之夜移动端

  • 渲染数据
    • 场景共有80,000+对象
      • 通常有10000+对象被加载
    • 平均每帧800 draw call,峰值2000+ draw call
    • 高端设备使用了600,000+三角形
  • Shader/PSO
    • 实际使用了4300个PSO进行渲染!
      • 从一个包含了28000个shader对象池获取
  • 内存
    • 1.2GB~2GB
      • 对于不同的设备使用不同的渲染API和shader分配策略

a9e109702102d4c001fc3febaddab761.png

挑战

  • 性能
  • 内存
  • 设备兼容性

bfea2b4d718952f309e9a2614364cd6d.png

性能

  • CPU侧优化
    • draw call代价------图形API瓶颈
      • 添加一个RHI线程
      • 使用Vulkan取代OpenGL ES
    • 减少draw call和状态改变
      • 改进遮挡剔除
      • 排序渲染
      • 实例化渲染
  • GPU侧优化
    • 调整渲染内容
    • 调整分辨率和帧率
    • 改进渲染的代码实现
      • 压缩render pass

7b0e40213a1e2a38b9ee0a2036a857e1.png

draw call代价------渲染线程

  • UE4包含了两个主线程
    • Game Thread
      • 根据玩家输入,网络数据,物理模拟更新游戏状态
      • 将游戏对象的状态变化入队
      • 将资源变化入队
      • 发送渲染指令渲染场景
    • Render Thread
      • 出队游戏对象的状态变化,并将状态变化应用到代理对象上
      • 创建和更新渲染资源
      • 渲染场景

渲染场景:

  1. 获取上一帧的遮挡查询结果
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值