关于音频:Wwise的内存问题

2次阅读

共计 2646 个字符,预计需要花费 7 分钟才能阅读完成。

1)Wwise 的内存问题
​2)对于 Planar Shadow 的疑难
3)PPS 的 LDR 纹理冗余
4)游戏第一次冷启动耗时长
5)Lua 解析指令的虚构机会占用内存吗


这是第 268 篇 UWA 技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫 10 分钟,认真读完必有播种。

UWA 问答社区:answer.uwa4d.com
UWA QQ 群 2:793972859(原群已满员)

Audio

Q:对于 Wwise 的内存问题:
1. Wwise 加载一个 bank,内存增长次要在哪?在 profiler 上次要体现在哪个参数?
2. 加载 bank 之后,开始播放 event,那么这个 event 声音是否有缓存?播放是否卡顿?

A:这个问题取决于你所应用的版本,以及你为资源设定的读取形式,还有你为资源采取的编解码。

版本方面自 2019.2 开始 Wwise 采取了动态内存治理,profiler 显示的是不同用处的内存占用数据,而在这个大版本之前是须要设置固定大小的初始内存池的。

优化内存调配:
https://www.audiokinetic.com/…

优化内存池:
https://www.audiokinetic.com/…

你能够比拟一下 2019.1 之后和 2019.1 的内存治理文档。

你的资源采取读入内存的形式读取,就会进入内存,如果是 stream 流读取那就会占用 io,这些都能够在 Wwise 的 profiler 里看,并不是给你暗藏起来了。

https://www.audiokinetic.com/…

卡顿取决于你是从内存读取还是流播放,两者可能都会受编解码的影响。通常如果是触发频率高、谋求疾速响应能够用 PCM 或者 ADPCM 来播放,而后 Vorbis 可能会因为 CPU 解决工夫产生提早。如果是流播放,则能够通过启用 Zero Latency 个性,减少 prefetch 来升高提早,但这个办法次要是用来解决播放长文件时的提早。太短的文件如果 prefetch 太长可能还导致其余报错,短的就通过编解码和采样率来做空间工夫均衡就能够了,音质别太差就行。

感激 Icarus@UWA 问答社区提供了答复

Addressable

Q:目前模型用到了 Planar Shadow 立体暗影,然而因为咱们的模型是要投放到 UI 上,须要把暗影一起拍下来。但又不能把接管暗影的地板拍下来,求教如何让接管立体暗影的 plane 只显示暗影,其余中央为通明呢?
(相干 Shader 文件可戳原问答查看。)

A1:你并没有了解 Planar Shadow 的原理,它的暗影实质就是一个 Mesh,不须要接管物体,间接删掉地板即可。

如果你的我的项目没显示进去暗影,那应该是其余方面的起因,跟地板无关。

感激 Jee@UWA 问答社区提供了答复

A2:Shader 中的_WorldPos 示意模型的世界坐标、WorldPos 示意 ShadowPos 吗?如果是这样,这里写的仿佛有些问题。

能够参考下这个 URP Planar Shadow:https://zhuanlan.zhihu.com/p/…

Planar Shadow 的实现个别就是在另一个 Pass 把顶点投到一个“立体”再画一遍,所以应该不会呈现题主所形容的问题。

感激羽飞 @UWA 问答社区提供了答复

Resources

Q:开了 PPS 之后纹理呈现了冗余?LDR 之类的资源,这些应该是 PPS 本人的资源。咱们把 PPS 的资源都打到了一个包里,但还是有冗余。

A:以下是 APK 解压后的资源。

通常是因为被场景(此场景没有打包 AssetBundle)援用和从 AssetBundle 加载导致的。上图中的 LDR 结尾的纹理是用来做随机用的 noise 图。在 URP 中,通常是被 RenderPipelineAsset 中援用的 PostProcessData 援用导致的。

当 GraphicsSettings 中设置了 RenderPipelineAsset,那么打包 APK 的时候,这个 PostProcessData.asset 是最终被打包进 globalmanagers.assets 中,没有打包进 AssetBundle 中的场景如果也援用了 RenderPipelineAsset,最终援用的是 globalmanagers.assets 的 RenderPipelineAsset 实例,这样是不会冗余的。

然而如果在 AssetBundle 中也有打包 RenderPipelineAsset,比方通过 AssetBundle 来动静更改 RenderPipelineAsset,那么就会产生多份 LDR_LLL 这样的纹理了。

感激 Xuan@UWA 问答社区提供了答复

Loading

Q:游戏第一次冷启动的耗时比拟长,想剖析一下具体的耗费在哪里?然而 UWA 的测试报告的数据是从进入游戏后开始的,不晓得怎么才能够进行测试。

A1:大抵归为 3 点:

  1. Resource 文件夹下的文件建设索引,能够想方法改用 AssetBundle;
  2. 预 Shader 解析,这个为了之后的流程性倡议还是先预加载了,当然也能够用一些其余操作陆陆续续加载;
  3. 加载的第一个 scene 比拟大,能够思考搞个空的 scene 先加载上来,异步加载真正的第一个 scene。

感激萧小俊 @UWA 问答社区提供了答复

A2:能够看一下这个问答里的思路:https://answer.uwa4d.com/ques…

感激 OCEAN@UWA 问答社区提供了答复

Memory

Q:Lua 解析指令的虚构机会不会占用一部分内存?

A:几 K 还是有的,但应该很小的,次要还是对象占用的。虚拟机占用的内存次要是堆栈的空间,虚拟机还是得解释代码,执行 API 之类的,还是要点空间的,但应该是很少的。

感激 OCEAN@UWA 问答社区提供了答复

20210918
更多精彩问题等你答复~

  1. Vulkan API 的性能及兼容性
  2. Unity TMP 字体计划如何抉择
  3. 如何实现 AAB 包的增量更新

封面图来源于:URP Iridescence Example
URP 中的虹彩着色器示例。


明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在 UWA 问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA 学堂:edu.uwa4d.com
官网技术 QQ 群:793972859(原群已满员)

正文完
 0