http://t.cn/A6Z83hIa?m=4489984440606723&u=5634781030

1、确定当前程序基线:

CPU game thread 91ms

CPU render thread 260ms (gpu wait include)

GPU frame time 200ms

Used memory >5Gb
Build size 46Gb

2、通用做法

减少mip等级

减少LODs层级

调整LOD各级距离

调整到720p

降低音频质量

将事务分帧完成:流式加载、quest system、animation、AI、pathfinding.

3、应该检测的地方:

fps时间构成

内存占用构成

逻辑对象数量构成

渲染对象数量构成

4、CPU优化:抛弃busy-wait

wrong:   while(task_left) {yeild;}

right:  if(acquire.Exchange(false))   s.acquire();

方法:用 Exchange代替 while check.
原理: yield 实际上生成了基于mutex的实现.
(个人感觉就是遇到一个不太常见的语法糖坑)

5、CPU优化:ps4的线程(划分)

主要是线程角色分类、优先级: 主线程-渲染线程-任务线程1234

在下列时机做了spin lock保护
     创建Task
     task从queue中 push/pop

6、CPU优化:平衡各个核的性能负载

两个关键字   lock-free stack  和 CAS。

为了达成CAS条件,建立了 task的指针列表,通过它来控制task的执行顺序。

7、CPU优化:布料模拟

布料模拟是基于 Apex/PhysX 的解决方案。

Switch上从默认的8次迭代计算改成了1次。

并且在一些关键的性能情景(比如战斗)直接全关了。

这肯定会有些BUG,人工处理这些地方。

图例中布料穿模了俩模型。

8、CPU优化:GPU运算布料模拟(布料模拟的代价)

GPU模拟只支持PC,从Nvidia获得的源码(???)

总的内存开销:42Mb

9、CPU优化:Switch上的共享内存的技巧
Switch L2 被所有core共享,然后没看懂了。。
感觉就是减少一些不必要的数据拷贝。

10、CPU优化:音频解码

核心就是使用不同的音频解码方案

Opus decoder for BGM

ADPCM for others
stereo来代替multichannel

11、Cache-friendly 的内存访问方式

重要的工具:structure lahout analyzer tool.

12、CPU优化:LTO

13、CPU优化:LTO+PGO

14、CPU优化:Apex object的构造

构造和析构需要替换掉,能快50倍

15、内存优化:压缩格式

要关注解压速度和压缩比,并根据不同的资源类型和大小做测试,选用最合适的。

解压用的缓存是没法自动cache的,自己做个临时buffer.

16、内存优化:动画里的scale干掉

17、内存优化:用 PadAnalyzer检查全局变量的size.

发现了16Mb的变量字段开销。

18、内存优化:减少重复的成员变量

19、内存优化:选用合适的贴图压缩格式,建议astc. 不过astc6x6实测比dxt1要大一点

20、内存优化:

直接砍掉最细节的lod模型,不过保留头部和头发,胡子

这节省了120Mb 顶点,16Mb 贴图

用utf8代替wchar_t

这省了50Mb

当ApexObjects的顶点数量小于64K时,用int16作为index buffer的数据类型

这节省了>16Mb

21、内存优化:音频流式加载

内存中声音总共占120Mb

用 Cyberpunk 流式加载(还是分包?) , 这省了80Mb

22、包体优化:

语音包语种从4个变成3个

每个语种4.5Gb资源,压缩一下,省了2.2Gb

音频压缩比 PS4/Xbox 11:1 , Switch 20:1 (switch:我不要面子的咯)

23、包体优化:语音包技巧

Novigrad 可以移除 2Gb的streaming cache.

DLC 有 1.9Gb的cache.

移除临时缓存,省了82Mb,

24、结束语

优化花了15个月

关键因素:这是一个巨大的挑战,工程师们喜欢挑战!

固定的硬件条件给了优化巨大的发挥空间

调性能是艺术!(我更愿称之为手艺)
黑科技一堆

Switch屏幕潜藏了大量图形方面的问题(官方吐槽)

....
....

衍生知识点:

semaphore 信号量

spin lock 自旋锁

cache-friendly

PadAnalyzer

-------------------------------------------

其实干货量很少,毕竟只有20分钟,如何去聊得完15个月的事情呢。
关于优化,我的心得就是
1、真机测试、数据说话
2、在一切方向上(硬件、软件、资源、代码、运行时、静态期、磁盘文件、开发中间文件、游戏逻辑、视野距离、屏幕占比、CPU、GPU、Core、OS System以及一切你游戏用到的各种形态的资源)排查哪些东西占着茅坑不拉S,衡量它的贡献度,保大头。
3、异步+分帧是利器,多核任务调度是大势,cache-firendly是还债(这些年硬件快速提升带来的计算红利到头了)

GTC 2020:开发者谈NS版《巫师3》移植相关推荐

  1. 程序员看过来!JS、Java、C 依然强势,Go、Kotlin、Python 潜力股,2020 开发者生态系统报告

    编译 | 屠敏 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 一切过往,皆为序章. 2019 年,走出舒适区的技术圈迎来消费互联网向产业互联网的转型,也开始了数字 ...

  2. 罗永浩宣布进军电商直播;微博回应用户数据泄露;Android 11 开发者预览版 2 发布 | 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自视觉中国 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦, ...

  3. iPhone 9或于4月3日发布;复制粘贴之父Larry Tesler去世;Android 11开发者预览版来了!| 极客头条...

    整理 | 郭芮 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注 ...

  4. Android 12 首个开发者预览版到来

    作者 / Dave Burke,工程副总裁 从手机和笔记本电脑,再到平板电脑.电视甚至汽车,Android 应用每天都在各种设备上支持着数十亿人的工作.娱乐.交流和创造.当越来越多的人开始依赖您所构建 ...

  5. 微软 Build 2020 开发者大会邀请开源社,共赴线上新旅程

    点击上方"开源社"关注我们 | 转载自:微软中国MSDN | 编辑:Corrie | 设计:叶修缘. 微软热爱的开发者,开发者热爱的新技术 微软Build 2020开发者大会大幕将 ...

  6. TensorFlow 2.0开发者预览版发布

    整理 | Jane 出品 | AI科技大本营 从去年 8 月 Google 公开发布消息正在研发 TensorFlow 2.0 ,让我们在 12 月 提前看到了一些 高级 API 的变化,今天我们终于 ...

  7. 发布Wear OS by Google开发者预览版

    今天,我们发布新的 Wear OS by Google 的开发者预览版,为 Wear OS 带来 Android P 平台的功能.对 Wear OS by Google 中国版的开发者,我们特别提供了 ...

  8. 谷歌发布 Android 8.1 首个开发者预览版,优化内存效率

    今晨,谷歌推出了 Android 8.1 首个开发者预览版,此次升级涵盖了针对多个功能的提升优化,其中包含对 Android Go (设备运行内存小于等于 1 GB)和加速设备上对机器学习的全新神经网 ...

  9. pip无法更新_TensorFlow 2.0「开发者预览版」上线,内容每日更新

    TensorFlow 2.0 预览版上线了!近日,谷歌 AI 团队成员 Martin Wicke 在社交网络上向大家发布了这一最流行深度学习框架的「开发者预览版」,该版本又被称为「Nightly 版」 ...

最新文章

  1. 避免到服务器的不必要的往返过程
  2. ECCV 2020 | 腾讯优图8篇论文入选,涵盖目标跟踪、行人重识别、人脸识别等领域...
  3. E0070 不允许使用不完整的类型
  4. Pytorch多进程最佳实践
  5. eclipse生成java项目出错,Java项目使用了HttpClients相关包,用eclipse导出jar包就不能正常运行Error: A JNI error has occurred...
  6. input()与raw_input()
  7. php数组foreach循环添加键值对_在PHP的foreach循环中插入一个$key作为变量
  8. matlab时域转换成频域_从时域到频域,你只需要旋转一下!
  9. 初学Java,LinkedList功能最全的集合类
  10. 【BZOJ1923】外星千足虫,高斯消元解xor方程组
  11. 【转载】白话经典算法系列之六 快速排序 快速搞定
  12. Netty使用kryo序列化传输对象
  13. 利用Docker快速部署Oracle环境
  14. Parallels Desktop 17 亮点整理,7 大改进与变化
  15. Atitit 常用技能点体系树 os win linux android 前后端 gui h5 vue js jquery bootstrap cocos2d Jafavx wpf
  16. Android从 HttpResponse (或者InputStream) 获取字符串内容的代码
  17. redis 加载mysql_Mysql Redis PostgreSQL数据库查看客户端连接
  18. 【OCP题库-12c】最新CUUG OCP 071考试题库(71题)
  19. 曼昆《经济学原理》-微观经济学-随记(二)
  20. 十大气势背景音乐(适合战队,广告招商会场用)

热门文章

  1. ViewBag的简单使用
  2. 快速调整毕业论文格式:调整参考文献的引用样式和段落格式
  3. android 后台实时定位,实现后台定位,持续无限制定位
  4. FA(萤火虫算法)MATLAB源码详细中文注解
  5. Python编程从入门到实践---pygame精灵组
  6. 【漆天编程】MT4和MT5有什么区别?这是我见到过的最好的回答
  7. 枚举类型是什么意思,怎么用?
  8. uniapp制作App实现下载系列功能
  9. 小说名词解释:种田派
  10. 系统分析师-2022年上半年必考知识点