1)iOS包ShaderVariantCollection预热慢问题
2)使用SBP打Bundle如何读取AssetBundleManifest
3)如何将一张贴图经过Shader处理后的结果输出给另外一个Shader使用
4)为什么我的水这么干净,和UE教程里的有差别
这是第392篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。
Rendering
Q:ShaderVariantCollection变体集合,大概400个变体数据,ShaderVariantCollection.WarmUp(),卡顿大概40秒。单个Shader变体编译需要100ms,拆分为多个SVC,分段预热后,单个Shader编译时间基本没变化,总耗时基本无差别。
同样的包,Andorid就算低端机型,预热总时间也不会超过10s。
预热Unity也没有提供异步方法,只有同步,现在不管在哪个阶段去预热都会有超长的空置卡顿时间。
有没有人遇到过?是不是iOS需要设置什么?
A:是iOS的问题,iOS的第一次要生成Metal的Shader,这里不管中高端基本上都差不多耗时,最好是自己找时机分段预热,不要放在首场景。
感谢司马老师@UWA问答社区提供了回答
AssetBundle
Q:升级到2019之后,使用BuildPipeline.BuildAssetBundles方法打Bundle变得很慢。我们发现Unity新推出的Scriptable Build Pipeline有更快的打包速度(1个小时降为15分钟),但是作为兼容之前AssetBundleManifest的新类型CompatibilityAssetbundleManifest并没有被打成Bundle,而是一个Yaml格式的文件:
想请教一下,这里是如何处理的,或者说资源的依赖关系是如何存储的。
(PS:没用Addressable,因为是线上运行项目,资源的路径都配在了Excel里,需要改的地方太多。)
A:可以从Result中获取依赖信息,自定义保存依赖列表:
`public static ReturnCode BuildAssetBundles(IBundleBuildParameters parameters, IBundleBuildContent content, out IBundleBuildResults result, IList<IBuildTask> taskList, params IContextObject[] contextObjects) `
感谢啊哩啵啵@UWA问答社区提供了回答
Rendering
Q:如何将一张贴图经过Shader处理后的结果输出给另外一个Shader使用?例如有一张贴图A,经过Shader A处理后加了个外描边,想把这个含有外描边的结果输出成Texture给另外一个Shader B使用,可以这样操作吗?
A:可参考下述方法:
1:内置管线使用GrabPass,只需要一个Shader和一个Mesh Pass1加外描边,Pass2 Grabpass抓屏,Pass3使用抓屏纹理。
2:后处理Blit方式,需要创建一个RT,另一个Shader直接使用这张RT。
感谢hxwaa@UWA问答社区提供了回答
Rendering
Q:图一是UE教程的水,图二是我的水,为什么我的水这么干净,是什么功能没打开嘛?
A:我不确定哪里是水,大概猜一下,你的"水面"的"脏"的东西是环境反射,因为"反射"效果过于出现大范围Pattern化的内容,所以是法线图的Tiling。你应该调整Tiling, 让Tiling数值更小一些,同时调整法线强度,或者直接删了。
感谢Renderman@UWA问答社区提供了回答
封面图来源于网络
今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。
UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com