先说方法:

  1. Launch 到 PS4 Devkit上,在PS4上输入Stat unit 看瓶颈在哪里。我们发现Frame 和Draw数值几乎一样,其余两项相对较小,这表明瓶颈在渲染线程上。
  2. 关于渲染线程的相关知识:https://docs.unrealengine.com/udk/Three/RenderThreadProfilingHome.html
  3. 在编辑器中打开Session Frontend,打开Profiler,在左边的MySessions中找到并选择当前激活的(后面有绿色点)Launch On Device>PS4 Development Kit
  4. 点击右侧的Data Capture,稍等一段时间(十几秒以上)再次点击DataCapture,会提示是否把数据传输到本地,选择是
  5. 传输完成后在下方出现的提示信息中点击“Load File”即可打开数据。注意,该数据存储在开发机上,如果以后需要再次打开改数据,参考如下路径:O:\开发机ip地址\data\工程名称\工程名称\saved\profiling\unrealstats\,所有的capture 文件都放在这里,文件夹名称都包含了时间,这里O:是开发机硬盘在PC上的映射盘符。
  6. 打开后在graph view 中拖动选择一定范围的数据,然后选择下方的Maximum,然后在Event Name中找到问题线程,(目前是Render Thread)。

  7. 逐层展开查找耗时最多的。重点看Inc Time(MS)和Inc Time(%)这两项,点击其标题可以以此项进行排序,默认即是以Inc Time递减顺序排序。注意CPU Stall - Wait For Events可以忽

    略,出现这个通常是cpu在等待GPU。

我们找到的问题记录:


  1. Init View中的Init dynamic shadow,占据了13ms的渲染时间,并且下方给出了具体是那些actor的问题
    解决方法:
    a. 把streetLightActor中的灯光投影彻底关闭(这里不是很清楚,为什么没有开启他们的dynamic shadow,也出现在dynamic shadow的条目里)
    b. 把Directional Light的动态阴影关闭
    结果:平均帧率从20提高到30,帧率提高了10
  2.  第一个问题解决后,再次Profile,找到的问题是Occlusion Cull,占用了不到4ms,原因是场景中物体太多,culling带来了负担

    解决:
    a. 场景中的独立物体采用distance culling,
    b. 删除大量背景树木,牺牲一点效果来换取效率
    这里提供两篇很好的参考:
    http://timhobsonue4.snappages.com/culling-visibilityculling.htm
    https://answers.unrealengine.com/questions/173484/cpu-render-thread-optimization.html
    结果:似乎帧率并没有大幅的提升……

  3. 经过多次测试,发现并不存在特别明显的某方面的瓶颈,渲染线程每项的耗时都比较高,因此决定需要从减少同时渲染物体数量上着手。我们的场景类似于赛车类游戏的赛道,场景很大,道具(包括灯光)种类很少,但是由于路径很长,重复量非常大。我们将整体场景沿玩家行进路线进行了场景切割(分成了16个区域),除路上的路灯模型、路灯灯光、路下方的支撑柱以及路上的标志牌灯,也同时把路旁的广告牌等道具划分到相应的区域内,采取了Streaming Level的方式加载这些关卡。结果帧率得到了极大的提升,可以说从根本上解决了帧率低的问题。

UE4-PS4开发渲染线程优化方法及记录的更多相关文章

  1. UE4里的渲染线程

    记的上次看过UniRx里的源代码,说是参考微软的响应式编程框架,响应式编程里的一些理论不细说,只单说UniRx里的事件流里的事件压入与执行,与UE4的渲染线程设计有很多相同之处,如果有了解响应式编程相 ...

  2. android开发中图片优化步骤

    android开发中图片优化方法 1.图片加载方法,方便用户加载图片 /*** * 加载本地图片 * @param context:主运行函数实例 * @param bitAdress:图片地址,一般 ...

  3. (转)electron主线程中通过mainWindow.webContents.send发送事件,渲染线程接收不到

    转自 https://segmentfault.com/q/1010000015599245/ 准备实现的功能: 页面1(渲染进程1)中点击按钮,发送事件给到主进程.主进程成功接收事件后,通过main ...

  4. (转\整)UE4游戏优化 多人大地型游戏的优化(二)渲染线程的优化

    施主分享随缘,评论随心,@author:白袍小道 小道暗语: 1.因为小道这里博客目录没自己整,暂时就用随笔目录结构,所以二级目录那啥就忽略了.标题格式大致都是(原or转) 二级目录 (标题) 2.因 ...

  5. UE4 性能优化方法(工具篇)

    本文依据UE4官方文档以及官方博客等总结而来,可能不全面,后面会陆续添加.内置工具的详细说明请参考官方文档. 游戏帧率很低,或者有卡顿的现象,可能会有很多原因,这时候不要乱猜,比如是不是人物太多了或者 ...

  6. 网站url路径优化方法完全讲解 (url优化、基于tp5、API接口开发)

    url优化可是网站开发的必备高阶技能,先看本实例优化前后效果比较: (同为调用前台模块下的index控制器下的index方法) 优化前:www.tp5.com/tp5/public/index.php ...

  7. 【DSP开发技术】影响高性能DSP功耗的因素及其优化方法

    影响高性能DSP功耗的因素及其优化方法 德州仪器DSP技术应用工程师 冯华亮 摘要 本文讨论影响高性能DSP功耗的因素,介绍一些DSP功耗的优化方法. 随着嵌入式应用需求的不断提高,DSP的速度也不断 ...

  8. android webview开发问题及优化汇总

    我们在native与网页相结合开发的过程中,难免会遇到关于WebView一些共通的问题.就我目前开发过程中遇到的问题以及最后得到的优化方案都将在这里列举出来.有些是老生常谈,有些则是个人摸索得出解决方 ...

  9. [原] Android性能优化方法

    GPU过度绘制 打开开发者选型,"调试GPU过度绘制",蓝.绿.粉红.红,过度绘制依次加深 粉红色尽量优化,界面尽量保持蓝绿颜色 红色肯定是有问题的,不能忍受 使用Hierarch ...

随机推荐

  1. Tensorflow | 基本函数介绍 简单详细的教程。 有用, 很棒

     http://blog.csdn.net/xxzhangx/article/details/54606040 Tensorflow | 基本函数介绍 2017-01-18 23:04 1404人阅读 ...

  2. vue组件父子间通信之综合练习--假的聊天室

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. Android安全测试(二)反编译检测

    1.测试环境 SDK: Java JDK, Android SDK. 工具: 7zip, dex2jar, jd-gui 2.操作步骤 第一步:把apk改后缀名为zip 第二步:将zip文件解压,得到 ...

  4. UVa 12169 Disgruntled Judge 紫书

    思路还是按照紫书,枚举a,得出b, 然后验证. 代码参考了LRJ的. #include <cstdio> #include <iostream> using namespace ...

  5. 为什么说 Babel 将推动 JavaScript 的发展【转】

    Babel是一个转换编译器,它能将 ES6 转换成可以在浏览器中运行的代码.Babel 由来自澳大利亚的开发者Sebastian McKenzie创建.他的目标是使 Babel 可以处理 ES6 的所 ...

  6. 医院里的CR、DR、CT、磁共振、B超都是什么?

    转自 百度知道MR CT CR DR DSA X线 都事医学影像疾病诊断的一种. MRI 是磁共振影像检查,可以获得横断面,矢状面和冠状面的影像.空间分辩率好. CT 是一种X线诊断设备,是一种复杂的 ...

  7. MySql-8.0.16版本部分安装问题修正

    本帖参考网站<https://blog.csdn.net/lx318/article/details/82686925>的安装步骤,并对8.0.16版本的部分安装问题进行修正 在MySQL ...

  8. TensorFlow 解决“ImportError: Could not find 'cudnn64_6.dll'”

    解决“ImportError: Could not find 'cudnn64_6.dll'” 1. 问题描述 运行一个基于Tensorflow的代码时报错,如下所示: ImportError: Co ...

  9. python random模块导入及用法

    random是程序随机数,很多地方用到,验证码,图片上传的图片名称等,下面说说python random模块导入及用法 1,模块导入 import random 2,random用法 random.r ...

  10. 固定导航栏(jquery)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...