资源打包关系依赖树

资源打包关系依赖树

1)资源打包关系依赖树
​2)Coroutines产生了大量GC的问题
3)手机端的Soft Shadow如何生效
4)Skybox的环境照明问题


这是第292篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

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

AssetBundle

Q:想做包体资源分析,大家有什么好的树显示工具或者思路推荐吗?有比较好的开源方案也可以。最简单就像N叉树一样,比如root一个文件名,然后展开整个树结构。

A:Unity的Treeview,以下是资源引用依赖查找工具ReferenceFinder的截图。

项目地址为:https://github.com/blueberryzzz/ReferenceFinder

感谢马三小伙儿@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/623c8322a43e6117d040ae9b


Script

Q:这种协程产生了大量的GC的问题应该要怎么去定位是在哪里触发的,怎么改呢?

A1:可以试试用这个插件查看一下协程的具体详情,看看能不能定位到问题。里面有个CoroutineTracker专门监控协程的。

https://github.com/GameBuildingBlocks/PerfAssist

感谢Xuan@UWA问答社区提供了回答

A2:建议如下:

  1. 不建议大量使用协程,会有开销,可以采用update取代。
  2. 如果协程里面产生了GC,可以关注一下是否里面有循环new对象,可以采用对象池或者用struct。

感谢aladdin@UWA问答社区提供了回答

A3:yield return new WaitForSeconds(1f);

像这种写法其实会产生GC,可以考虑把new WaitForSeconds(1f)提取到函数外。

感谢萧小俊@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/62397a9ea43e6117d03c8211


Rendering

Q:手机端的Soft Shadow如何生效?

A:可以参考UWA之前的博客文章:

《使用Fast Shadow Receiver优化渲染效率》

《如何实现更真实的软阴影效果》

如果用Unity自带的Soft Shadow,需要注意几个设置项,Graphics Settings里面的Tier2里面必须勾选Cascaded Shadows,这样才会有CollectShadows生成ScreenSpace的Shadowmap。

在Quality Settings里面设置的Cascade Level也会影响阴影的质量,下面两图分别是No Cascades和Four Cascades生成的ScreenSpace Shadowmap的效果。


No Cascades


Four Cascades

感谢Xuan@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/62427081a43e6117d04873e2


Rendering

Q:A场景,通过additive的方式加载B场景。2个场景中都没有任何灯光(包括平行光)、Reflection Probe,且Enviroment Reflections的Intensity Mulitiplier为0,纯靠Enviroment Lighting中的Skybox进行照明。

但是SetActive为第二个场景之后,就会发现照明黑色,如右图所示。重新SetActive为第一个场景,环境照明正确,如左图所示。

如果模式不为Skybox而是Color,则没有上述问题。目前打算自建环境光球谐信息,而不使用unity_SHAr相关数据。有什么比较好的解决方案吗?

A:当把场景B设置为Active的时候,整个Game的Environment的设置就自动切换成场景B的设置了,这时候从FrameDebugger里面可以看到球谐系数变成0了。所以两个模型都黑了。

从Skybox改成Color,起作用的是下图中的3个数值,它们不是0,所以不是黑的。

切换场景A为Active的时候的渲染效果,球谐系数是可以获取到的,所以效果也是正常的,如下图。

所以尝试了一下对场景B进行烘焙,当有了LightingData后,切换到场景B,渲染效果也正常了。变亮了是因为场景B原始设置的Intensity multiplier是5,从FrameDebugger里面看球谐系数不是0了,应该是烘焙后的LihgtingData里面保留了球谐系数。

感谢Xuan@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/62418a80a43e6117d047397d


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

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