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(原群已满员)