1)Shader Graph和Amplify Shader Editor有哪些区别
2)Canvas AdditionalShaderChannels设置无效
3)IL2CPP打包速率问题
4)SRP是否还需要图集
这是第290篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。
UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)
Shader
Q:请教各位,Unity自带的Shader Graph或Amplify Shader Editor,在使用和生成的Shader性能问题上,除了Amplify Shader Editor目前自带Node功能的丰富度以及社区资源丰富度应该更胜一筹外,两者还有多少区别?
项目背景:新项目(手游),基于Unity URP的二次元NPR+PBR,3D场景+3D角色。
A1:参考如下:
体验:Amplify Shader Editor优
使用:Amplify Shader Editor优
通用程度:Amplify Shader Editor优
兼容性:Shader Graph优
未来发展:Shader Graph优
结论:两个都用并不冲突,但是我倾向于优先使用Shader Graph慢慢替代Amplify Shader Editor。
感谢大崔-287520@UWA问答社区提供了回答
A2:实际体验上Amplify Shader Editor会比Shader Graph好用很多。
- Amplify Shader Editor生成的是明文Shader文件,可以自行修改调整部分不合理的生成;Shader Graph也能看到他生成的Shader,但是设计上Unity尽量希望黑盒,不想让你看到。
- Amplify Shader Editor可以几条管线互相切,Shader Graph只能在URP下使用。
- Amplify Shader Editor兼容所有Shader Graph的节点和参数。
- Shader Graph界面比Amplify Shader Editor好看,品控比较好,小bug没Amplify Shader Editor多。
- 每一步计算的节点结果,Shader Graph能预览基本所有的,Amplify Shader Editor如果是自己定义的管线全局参数以及有些内置的,不太好预览。
- 连连看这种生成的Shader质量都很差,基本需要效率的都得翻新一遍。
常见的优化,比如c=tex2d(uv) 紧接着使用c,是需要等待GPU操作显存回来的时间消耗。
这种一般会插入其他计算,抵消这个消耗。
比如:
c = tex2d(uv) //do other thing c = c*c;
目前两种都是按节点逻辑生成,一个uv节点就会生成tex2d(uv)和后续计算的逻辑。
没有整体做语义分析的优化。
感谢uwa菜鸡奶泡泡.@UWA问答社区提供了回答,欢迎大家转至社区交流:
十二代INTEL对比四代锐龙? -- UWA问答:帮助开发者找到更好的答案
UGUI
Q:在UI中使用到的Shader中用到了uv1和uv2通道,在Canvas AdditionalShaderChannels中选择添加了对应通道后没有效果,相同代码资源在2019.4.26f1c1正确显示,请教大家是否是版本问题还是需要特殊设置处理?
Unity版本:2018.4.17f1
A:在2018.4.23f1版本上参考这个链接的Outline效果进行了测试,在小米9真机上没有发现问题。
可以参考一下《基于Shader实现的UGUI描边解决方案》。
PS:看了一下2018.4.18到2018.4.23之间的所有的Release Note,没有发现相关问题的修复。这个文章是使用Shader来实现Outline的,感觉效果挺不错的。
感谢Xuan@UWA问答社区提供了回答,欢迎大家转至社区交流:
十二代INTEL对比四代锐龙? -- UWA问答:帮助开发者找到更好的答案
Build
Q:最近在使用12700f的丐版电脑,发现打包(IL2CPP)速度比5950x快了20%(472s对比621s,同工程)。
不知道大家有没有对比过十二代Intel,如果真的这么好,新电脑可以全面十二代Intel加b660了。
补充:内存都足够,没有用到页面缓存。
A:按照官方的说法,IL2CPP在2020.2.0b2之前都是单线程的,AMD的CPU一般是多线程强,Intel的单线程强,所以可以根据Unity版本选择最佳的CPU类型。
官方说法:
Unity - IL2CPP player build time improvement coming to 2020.2.0b2 - Unity Forum
感谢张迪@UWA问答社区提供了回答,欢迎大家转至社区交流:
十二代INTEL对比四代锐龙? -- UWA问答:帮助开发者找到更好的答案
Rendering
Q:查看了官网的描述:SRP Batch会批处理GPU命令,将Draw Call降低下来。
经过我们反复的FrameDebug测试,即使在不同的材质、不同的贴图和不同的颜色,但只要Shader以及Shader变体是同一个则可以合并批次。
那么我们是否还有必要打包图集?
A:使用SPR Batcher的注意事项:
- 需要是同一个Shader、同一个变体,可以是不同的材质球,项目需要使用自定义渲染管线,Shader代码必须兼容SRP Batcher。
- SRP Batcher不支持MaterialPropertyBlock。
参考《使用MaterialPropertyBlock来替换Material属性操作》。- 参与SRP Batcher的渲染物体必须是一个Mesh或者Skinned Mesh。所以,粒子和UI上用到的纹理还是需要打包图集。
感谢Faust@UWA问答社区提供了回答,欢迎大家转至社区交流:
十二代INTEL对比四代锐龙? -- UWA问答:帮助开发者找到更好的答案
封面图来源于:Command Buffer Refraction
使用Amplify Shader Editor创建的,使用了Command Buffers的模糊折射着色器。
适用于表现玻璃材质,无需使用Amplify Shader Editor就可以运行工程。
今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)