UE4-PS4开发渲染线程优化方法及记录
先说方法:
- Launch 到 PS4 Devkit上,在PS4上输入Stat unit 看瓶颈在哪里。我们发现Frame 和Draw数值几乎一样,其余两项相对较小,这表明瓶颈在渲染线程上。
- 关于渲染线程的相关知识:https://docs.unrealengine.com/udk/Three/RenderThreadProfilingHome.html
- 在编辑器中打开Session Frontend,打开Profiler,在左边的MySessions中找到并选择当前激活的(后面有绿色点)Launch On Device>PS4 Development Kit
- 点击右侧的Data Capture,稍等一段时间(十几秒以上)再次点击DataCapture,会提示是否把数据传输到本地,选择是
- 传输完成后在下方出现的提示信息中点击“Load File”即可打开数据。注意,该数据存储在开发机上,如果以后需要再次打开改数据,参考如下路径:O:\开发机ip地址\data\工程名称\工程名称\saved\profiling\unrealstats\,所有的capture 文件都放在这里,文件夹名称都包含了时间,这里O:是开发机硬盘在PC上的映射盘符。
打开后在graph view 中拖动选择一定范围的数据,然后选择下方的Maximum,然后在Event Name中找到问题线程,(目前是Render Thread)。
- 逐层展开查找耗时最多的。重点看Inc Time(MS)和Inc Time(%)这两项,点击其标题可以以此项进行排序,默认即是以Inc Time递减顺序排序。注意CPU Stall - Wait For Events可以忽
略,出现这个通常是cpu在等待GPU。
我们找到的问题记录:

Init View中的Init dynamic shadow,占据了13ms的渲染时间,并且下方给出了具体是那些actor的问题
解决方法:
a. 把streetLightActor中的灯光投影彻底关闭(这里不是很清楚,为什么没有开启他们的dynamic shadow,也出现在dynamic shadow的条目里)
b. 把Directional Light的动态阴影关闭
结果:平均帧率从20提高到30,帧率提高了10
第一个问题解决后,再次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
结果:似乎帧率并没有大幅的提升……- 经过多次测试,发现并不存在特别明显的某方面的瓶颈,渲染线程每项的耗时都比较高,因此决定需要从减少同时渲染物体数量上着手。我们的场景类似于赛车类游戏的赛道,场景很大,道具(包括灯光)种类很少,但是由于路径很长,重复量非常大。我们将整体场景沿玩家行进路线进行了场景切割(分成了16个区域),除路上的路灯模型、路灯灯光、路下方的支撑柱以及路上的标志牌灯,也同时把路旁的广告牌等道具划分到相应的区域内,采取了Streaming Level的方式加载这些关卡。结果帧率得到了极大的提升,可以说从根本上解决了帧率低的问题。
UE4-PS4开发渲染线程优化方法及记录的更多相关文章
- UE4里的渲染线程
记的上次看过UniRx里的源代码,说是参考微软的响应式编程框架,响应式编程里的一些理论不细说,只单说UniRx里的事件流里的事件压入与执行,与UE4的渲染线程设计有很多相同之处,如果有了解响应式编程相 ...
- android开发中图片优化步骤
android开发中图片优化方法 1.图片加载方法,方便用户加载图片 /*** * 加载本地图片 * @param context:主运行函数实例 * @param bitAdress:图片地址,一般 ...
- (转)electron主线程中通过mainWindow.webContents.send发送事件,渲染线程接收不到
转自 https://segmentfault.com/q/1010000015599245/ 准备实现的功能: 页面1(渲染进程1)中点击按钮,发送事件给到主进程.主进程成功接收事件后,通过main ...
- (转\整)UE4游戏优化 多人大地型游戏的优化(二)渲染线程的优化
施主分享随缘,评论随心,@author:白袍小道 小道暗语: 1.因为小道这里博客目录没自己整,暂时就用随笔目录结构,所以二级目录那啥就忽略了.标题格式大致都是(原or转) 二级目录 (标题) 2.因 ...
- UE4 性能优化方法(工具篇)
本文依据UE4官方文档以及官方博客等总结而来,可能不全面,后面会陆续添加.内置工具的详细说明请参考官方文档. 游戏帧率很低,或者有卡顿的现象,可能会有很多原因,这时候不要乱猜,比如是不是人物太多了或者 ...
- 网站url路径优化方法完全讲解 (url优化、基于tp5、API接口开发)
url优化可是网站开发的必备高阶技能,先看本实例优化前后效果比较: (同为调用前台模块下的index控制器下的index方法) 优化前:www.tp5.com/tp5/public/index.php ...
- 【DSP开发技术】影响高性能DSP功耗的因素及其优化方法
影响高性能DSP功耗的因素及其优化方法 德州仪器DSP技术应用工程师 冯华亮 摘要 本文讨论影响高性能DSP功耗的因素,介绍一些DSP功耗的优化方法. 随着嵌入式应用需求的不断提高,DSP的速度也不断 ...
- android webview开发问题及优化汇总
我们在native与网页相结合开发的过程中,难免会遇到关于WebView一些共通的问题.就我目前开发过程中遇到的问题以及最后得到的优化方案都将在这里列举出来.有些是老生常谈,有些则是个人摸索得出解决方 ...
- [原] Android性能优化方法
GPU过度绘制 打开开发者选型,"调试GPU过度绘制",蓝.绿.粉红.红,过度绘制依次加深 粉红色尽量优化,界面尽量保持蓝绿颜色 红色肯定是有问题的,不能忍受 使用Hierarch ...
随机推荐
- clientdataset 做为 单机数据库的 使用 学习
http://blog.csdn.net/waveyang/article/details/34146737 unit Unit3; interface uses Winapi.Windows, Wi ...
- linux下升级php5.4到php5.6
进入终端后查看php版本 php -v 输出可能如下: PHP 5.4.35 (cli) (built: Nov 14 2014 07:04:10) Copyright (c) 1997-2014 T ...
- Monte Carlo Policy Evaluation
Model-Based and Model-Free In the previous several posts, we mainly talked about Model-Based Reinfor ...
- VC调试方法大全
VC调试方法大全 一.调试基础 调试快捷键 F5: 开始调试 Shift+F5: 停止调试 F10: 调试到下一句,这里是单步跟踪 F11: 调试到下一句,跟进函数内部 Shift+F11: ...
- javascript自定义Map对象
javascript定义map对象开发前端组件的重要性就不过多阐述了,直接参考以下案例即可 <script type=text/javascript charset=utf-8> func ...
- Java:CAS(乐观锁)
本文讲解CAS机制,主要是因为最近准备面试题,发现这个问题在面试中出现的频率非常的高,因此把自己学习过程中的一些理解记录下来,希望能对大家也有帮助. 什么是悲观锁.乐观锁?在java语言里,总有一些名 ...
- Linux 与 Unix 到底有啥区别和联系?
原文:https://opensource.com/article/18/5/differences-between-linux-and-unix 来源:开源中国社区,译者:Tocy, LinuxTe ...
- 移动端1像素解决方法,根据媒体查询transform缩放
.borderOnePx{ position: relative; } .borderOnePx::after { content: ''; height:1px; background:#000; ...
- java synchronized实现可见性对比volatile
问题: 大家可以先看看这个问题,看看这个是否有问题呢? 那里有问题呢? public class ThreadSafeCache { int result; public int getResult( ...
- JS—图片压缩上传(单张)
*vue+webpack环境,这里的that指到vue实例 <input type="file" name="file" accept="ima ...