2

Shader Graph和Amplify Shader Editor有哪些区别

 2 years ago
source link: https://blog.uwa4d.com/archives/TechSharing_290.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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(原群已满员)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK