1)AssetBundle包加载的场景会变暗
2)关于URP的合批问题
3)两次生成的AssetBundle包不一致
4)如何彻底卸载AssetBundle占用的内存
5)renderFrameInterval >1 导致半透明错误的额外叠加
这是第201篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。
UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)
AssetBundle
Q:我发现在项目工程下加载场景AssetBundle包会变暗,但是在打包工程和空工程下加载是正常的,不知道有没有人遇到过这个问题呢?
A:原因是ColorSpace不一致,我突然想到曾经看到过Gamma和Liner不一致的问题,试了下发现能够解决这里的问题,所以只要改成Gamma就行了。
感谢题主WindowsXPC@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5e9e76e1979400061e545049
Rendering
Q:这几天在尝试使用URP,使用的渲染流程是3个Pass,第一个使用URP默认Pass渲染角色,第二个通过Renderer Features进行Stencil的Mask,第三个Pass同样使用Renderer Features进行Outline勾边。
第一个Pass因为使用ShaderGraph做的,因此是URP Batcher Compatible。第二第三个自己写的Shader,开始是不兼容的。但是目前已经改成了URP Batcher Compatible。
所有的材质都开启了Instance。首先从最后渲染效果达到目标,没有问题。但是观察合批数据,觉得有点疑惑:
Statistics内显示Batches有30个,Saved by batching:-27
但是从Frame Debugger观察,角色渲染的3个Pass都进行了SRP Batch,一共16个批次。
而Profile里面显示的和Statistics基本一致。
这儿的差异要怎么理解呢?
A1:看了以下链接,基本已经理解这儿的差异了。实际SRP的Batch并不是真的去减少Draw Call,所以数据有差异的。
https://blogs.unity3d.com/2019/02/28/srp-batcher-speed-up-your-rendering/
感谢题主黄程@UWA问答社区提供了回答A2:这个现象应该还是属于Profiler和FrameDebuger的显示不统一的问题。
像Static Batching实际上也是如题主所说“并不是真的去减少Draw Call”,即GL层的glDraw数变化不大,但Profiler中的Batch数是大幅下降的;而SRP的Batch功能还比较新,所以估计还没把SRP的Batch和Profiler中的Batch统一起来。
该回答由UWA提供,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5ea157f94d93790618e0eba2
AssetBundle
Q:在对Prefab进行打包时发现,前后两次打包,Prefab和所引用的资源都没有变化,生成的AssetBundle包中间却有几个数据不一致,导致计算出的MD5值不一样。
对比Manifest文件,确认Dependencies所依赖的AssetBundle包没有变化, 只是顺序发生了变化。所以是什么原因导致两次出包会有差异呢?
A: 这是Unity引擎自己的特性,从4.x版本到现在一直都存在这种情况。所以,非常建议使用引擎自己提供的Hash值代替MD5来做为AssetBundle是否改变的判断。
该回答由UWA提供,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5e902ead8cabe84a011afc72
AssetBundle
Q:我使用DownloadHandlerAssetBundle.GetContent()获取AssetBundle,会增加内存,但是使用assetbundle.Unload(true),好像并不能彻底卸载内存,或许已经彻底卸载了AssetBundle占用的内存,但是还有一部分没有被卸载。是不是DownloadHandlerAssetBundle.GetContent()这个函数的原因呢?
A: 使用Unity 2018.4.14f1打包exe测试,和这个问题是一样的。
如果aa依赖于bb,先加载bb再加载aa,可以彻底卸载;先加载aa再加载bb,就无法完全卸载;只加载aa也卸载不彻底。另外,前面的测试结果与卸载顺序无关。
感谢Xuan@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5e99500ecd6a9b49fb4a4711
Rendering
Q:关于OnDemandRendering.renderFrameInterval的疑问。
在一些静态UI的时候把OnDemandRendering.renderFrameInterval设置为3,表示渲染频率降为1/3。假设正常是30fps,那么渲染帧率就是10fps。但是在iOS手机上测试后发现一个问题,画面表现为透明的UI在一层层地叠加。
可以看到,箭头的阴影很深,而实际上是很淡的一层阴影。由于渲染帧率降为30fps的1/3,所以每10帧clear一下,阴影并没有叠得很过分。如果把渲染帧设得更低,会看到阴影一层层叠加。
请问下,这是Bug吗?还是有另外的设置?
A: 应该是Bug,Issue ID:1214921, Fixed in 2020.2.0a6,可查看Bug提交。
感谢Xuan@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5ea10d084d93790618e0eba0
今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)
来源:oschina
链接:https://my.oschina.net/u/4346514/blog/4462782