ShaderGraph笔记(1)

发布于 2019-04-18  42 次阅读


本篇记录ShaderGraph工作流相关内容
根据Unity的说法,LWRP中使用单Pass前向渲染,那么描边等需要多Pass的效果应如何实现呢?
如何设置RenderState(Blend/Queue/Ztest/Offset)、shader变体
vertex(逐顶点)和fragment(逐片元)的代码如何在Graph中体现呢,a2v、v2f结构体如何判断;

在默认Graph界面,我们可以看到Unlit Master,那么有几个疑问了:
输出方面
1.Position是哪个空间的的Position
2.这里的Color是否指fragment return的Color.rgb
3.这里的Alpha是否指fragment return的Color.a
4.AlphaClipThreshold是什么,根clip(_CutOff)什么关系
选项方面
1.Surface:Opaque/Transparent是否指RenderState中的Queue,如何Queue+1
2.Blend:Alpha/Premultiply/Additive/Multiply 具体的混合效果
3.Two Sided:是否指RenderState中的Cull,默认为Back、勾选后Cull Off?
我们会有这么多的疑问,希望在阅读Unity官方文档时能解惑。

Master Node
Master Node是一个特殊的节点,是一个ShaderGraph的末端,定义shader的表面。
任何ShaderGraph都必须且仅有一个Master Node。
Master Node会在不同的SRP之间自动切换,需要有可用的backend。
可查看Node Library中的Master Nodes。

Unlit Master
Position
Stage:Vertex
逐顶点计算顶点在Object Space中的位置;
相当于Unity后续会直接将顶点从Object Space转换到NDC,放弃对裁剪空间顶点位置的编辑;
Type:Vector3
相比CG语义中的POSITION,仅输出xyz分量,也就是说不考虑维度的变化;
和Code版相比,仅在Object Space中实现顶点的位移,如:沿法线方向移动
这样也很难做出描边效果的,描边本质上是“多出了一倍的顶点”,才有更多细节;

Color/Alpha/AlphaClipThreshold
Stage:Fragment
逐片元计算片元颜色值;
Color为RGB通道;Alpha为A通道,需要Blend公式指定对RGB通道的影响方式;
AlphaClipThreshold:Vector1,需要一个节点连接生效,相当于clip(_Color.a);

Surface
下拉列表:Opaque/Transparent
定义材质是否为透明;

Blend
下拉列表:Alpha/Premultiply/Additive/Multiply
为透明材质定义Blend公式

Two Sided
单选按钮:True/False
如果为True,Front和Back都会被渲染


关注成长,注重因果。