Shader Graph和Amplify Shader Editor有哪些区别

Shader Graph和Amplify Shader Editor有哪些区别

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好用很多。

  1. Amplify Shader Editor生成的是明文Shader文件,可以自行修改调整部分不合理的生成;Shader Graph也能看到他生成的Shader,但是设计上Unity尽量希望黑盒,不想让你看到。
  2. Amplify Shader Editor可以几条管线互相切,Shader Graph只能在URP下使用。
  3. Amplify Shader Editor兼容所有Shader Graph的节点和参数。
  4. Shader Graph界面比Amplify Shader Editor好看,品控比较好,小bug没Amplify Shader Editor多。
  5. 每一步计算的节点结果,Shader Graph能预览基本所有的,Amplify Shader Editor如果是自己定义的管线全局参数以及有些内置的,不太好预览。
  6. 连连看这种生成的Shader质量都很差,基本需要效率的都得翻新一遍。

常见的优化,比如c=tex2d(uv) 紧接着使用c,是需要等待GPU操作显存回来的时间消耗。
这种一般会插入其他计算,抵消这个消耗。

比如:

c = tex2d(uv)
//do other thing
c = c*c;

目前两种都是按节点逻辑生成,一个uv节点就会生成tex2d(uv)和后续计算的逻辑。
没有整体做语义分析的优化。

感谢uwa菜鸡奶泡泡.@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/620c9123e7172c2775ea8f00


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问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/6228644a80139e0c1f1f661a


Build

Q:最近在使用12700f的丐版电脑,发现打包(IL2CPP)速度比5950x快了20%(472s对比621s,同工程)。

不知道大家有没有对比过十二代Intel,如果真的这么好,新电脑可以全面十二代Intel加b660了。

补充:内存都足够,没有用到页面缓存。

A:按照官方的说法,IL2CPP在2020.2.0b2之前都是单线程的,AMD的CPU一般是多线程强,Intel的单线程强,所以可以根据Unity版本选择最佳的CPU类型。

官方说法:
https://forum.unity.com/threads/il2cpp-player-build-time-improvement-coming-to-2020-2-0b2.963614/

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


Rendering

Q:查看了官网的描述:SRP Batch会批处理GPU命令,将Draw Call降低下来。

经过我们反复的FrameDebug测试,即使在不同的材质、不同的贴图和不同的颜色,但只要Shader以及Shader变体是同一个则可以合并批次。

那么我们是否还有必要打包图集?

A:使用SPR Batcher的注意事项:

  1. 需要是同一个Shader、同一个变体,可以是不同的材质球,项目需要使用自定义渲染管线,Shader代码必须兼容SRP Batcher。
  2. SRP Batcher不支持MaterialPropertyBlock。
    参考《使用MaterialPropertyBlock来替换Material属性操作》
  3. 参与SRP Batcher的渲染物体必须是一个Mesh或者Skinned Mesh。所以,粒子和UI上用到的纹理还是需要打包图集。

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

封面图来源于: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(原群已满员)