环境
Unity : 2019.4.30f1
URP : 7.7.1
ShaderGraph : 7.7.1
这里说明一下,低版本的 shader graph 没有设置,高版本我使用 11.0.0 没有,到时可以通过高版本的 Graph Inspector面板中通过设置:SurfaceType, AlphaClip, Two Sided 来影响生成的 Opaque/Transparent, Cull 类型,其他的Render State 你还是需要自己来扩展,参考:Unity ShaderGraph - 给低版本的 ShaderGraph 添加 Render State (Pass Setting) 的功能 - 2021/11/4 在低版本的 shader graph 扩展 Render State
因为换了 URP 管线,有部分以前的特效 shader 是离职的美术同学自己用 shader forge 来连连看实现的
那个节点名字、还有用法,有点惨不忍睹,这就是不了解 程序基础的 美术同学编辑的 shader forge 的普遍情况
网上看到过一些 TA ,从 美术 转 程序 的,有些是 建模 转 渲染 TA,这个是真的厉害
还有一些是 特效 转 渲染 TA,也同样是很厉害,甚至有些 美术同学连 PBR,还有 OpenGL 教程都自己去摸了一遍,这个我也是佩服的五体投地,太厉害了!
原本是像预研看看 shader graph 的功能,来替代部分手写 或是 旧的 shader forge 导出的 shader
这样,我可以教会 负责制作特效的美术同学如何 shader graph 的节点
这样很多一些效果,他们都可以自己出实现,只不过 特效同学制作好的 shader graph 连连看
需要去 review 一下,看看 shader graph 有无浪费性能的地方,或是布局不合理的地方,都可以优化
这样,结构其他同学处理,你就可以有更多的时间去做其他的事了
问题
OK,不扯皮,如题,今天我就是打算用 shader graph 来替换掉以前特效同学用 shader forge 实现的特效 shader
但是啊,刚刚开始就出师不利啊,因为我发现:ShaderGraph 竟然没有:Render State,(或是叫:Pass Setting - 译为 Pass 的设置)
就是没有地方设置:
- ZWrite
- ZTest
- Blend
- ColorMask
- ZClip
- Stencil
我是真的醉了!简直了!这些都是制作效果中需要调整的基础配置,这都不提供调整,真的是搞毛线了,真的很不应该,我也无法理解!
然后发现 unity 论坛上也是有人问同样的问题,同样被喷得不行了,当然我这里使用的是 Unity 2019.4.30f1 版本的,shader graph 是 7.7.1 的
相关帖子:
- ZWrite in shader graph
- Is there any way to change ZTest in the Shader Graph shaders?
- Is there still no way to change ZTest and ZWrite directly from Shadergraph ?
不知道最新版本的 unity + 最新的 shader graph 会不会改善,这里占个位,后续我会用比较新的版本来验证试下
OK,下午实验了一下,我真的是无语:
如下图,在 Unity 2021.1.21f1,Shader Graph 11.0.0 也没有,其实我在 13.0 的 Shader Graph (2021/11/1 今天发现的最新版本,也是没有 zwrite 的设置)也没发现有
此时我只能这个表情了:
然后再这个表情:
搬运吐槽
我就不一一搬运这些吐槽内容,只不过偶尔发现有类似的吐槽,看着说的比较中肯的,我都会放上来
参考:URP docs on writing shaders?
so, I think it real waste the time! To Learn it!
所以简单了解一下,一些普通的特效够用的给 美术去编辑即可,复杂的你就不要想了,妥妥的自己撸 shader 吧
解决方法
- 那就是不使用 shader graph,自己手撸 *.shader
- 或是曲线救国法:
- shader graph 连连看 整好后
- 在 Project 选中 Shader Graph 资源
- 在 Inspector 面板点击:Compile and show code
- 然后复制代码
- 新建一个 *.shader 资源
- 然后将复制的代码都粘贴带新的 *.shader
- 你就可以愉快的在 *.shader 修改 Render State(Pass Setting) 了
- Unity ShaderGraph - 给低版本的 ShaderGraph 添加 Render State (Pass Setting) 的功能 - 2021/11/4 在低版本的 shader graph 扩展 Render State
- Shader Graph and UI Mask - 2021/11/5 的今天发现 URP 下 UGUI 有个 BUG,于是与搜索了 URP UGUI Mask,谁知道找到了一个也是我上面曲线救国的方法的视频演示,但是他里面包含了处理 shader graph 因为没的设置 stencil 而不能应该到 ugui mask 组件的功能
- 上面说的:URP UGUI Mask 的 stencil 无效的问题,是因为之前测试 URP 的一些功能时,将 Forward Renderer 的 Overrides/Stencil 勾上了,然后忘记去掉了
- How to UGUI ShaderGraph Tutorial! (With Dropdown Mask) - 这个是具体的操作视频