Unity VFXGraph特效源文件的Shader详解

Shader信息提示:

如下面视频,该案例的Shader都是通过官方Shader Graph可视化制作的。该篇文章介绍了案例里常用的【vfxCase_V_Base】、【vfxCase_V_Fresnel】、【vfxCase_V_AirDistor】这些Shader的参数详解。


vfxCase_V_Base参数详解

如下图红框vfxCase_V_Base着色器,绿框展示了它的参数。

图片[1]-Unity VFXGraph特效源文件的Shader详解-游戏特效案例库

如下面案例,<主贴图>坑位可以放入红框里带Alpha通道的贴图,和不带Alpha通道的贴图。

如下面案例,<副贴图Sec>坑位放入红框带Alpha通道和不带Alpha通道贴图的效果是不一样的,这样和主贴图配合使用,实现更丰富的效果。

如下面案例,<遮罩Mask贴图>坑位是用<不带Alpha通道>的黑白贴图模拟遮罩效果,这样你通过黑白贴图就能脑补、预判出遮罩大概的效果。

如下面案例,<溶解Dissolve贴图>坑位是用<不带Alpha通道>的黑白贴图模拟溶解效果,这样你通过黑白贴图就能脑补、预判出溶解大概的效果。

如下面案例,<扭曲Twist贴图>坑位是用<不带Alpha通道>的黑白贴图扭曲其它贴图,这样你通过黑白贴图就能脑补、预判出扭曲大概的效果。

如下面案例,<顶点动画VerTexAnim贴图>坑位是用<不带Alpha通道>的黑白贴图控制顶点的偏移量,这样你通过黑白贴图就能脑补、预判出顶点动画大概的效果。

如下面案例,激活<菲尼尔遮罩FresnelMask>后,模型的边就虚化了,并且还可以激活Invert反向。


vfxCase_V_Fresnel参数详解

图片[2]-Unity VFXGraph特效源文件的Shader详解-游戏特效案例库

vfxCase_V_AirDistor参数详解

图片[3]-Unity VFXGraph特效源文件的Shader详解-游戏特效案例库

VfxAirDistor参数详解着色器主要模拟空气热扰动的效果,在<这个链接>视频里1分30秒左右的位置,介绍了如何开启空气热扰动。在下面视频案例中:

  • 注意,下面案例中,后面棋盘格物体材质球的RenderQueue要小于或等于2500,假如大于2500就会覆盖掉热扰动的效果,在<vfxCase_ParAirDistor着色器参数详解>笔记里有演示。

着色器通用参数的详解

如下面案例,点击X框后就会弹出Y框通用参数,啥叫通用参数?就是案例里用到的【vfxCase_VfxBase】、【vfxCase_ParFresnel】、【vfxCase_VfxAirDistor】这些Shader都有的参数。

如下面视频案例,用vfxCase_VfxBase着色器演示了Surface Type表面类型选项,然后分别放入两张带Alpha通道的Png贴图做测试,其中:

  • Opaque类型用于模拟<没有透明>的实体材质,所以<不会>显示贴图的Alpha通道效果。
  • Transparent类型用于模拟<有透明>的半透明材质,所以<会>显示贴图的Alpha通道效果。做特效的时候几乎都是用这个选项。

只有上一个参数<Surface Type表面类型>为Transparent时,才有该Blending Mode选项,其作用如下面视频:

  • Alpha模式,用于模拟前面材质遮住后面材质的效果。
  • Premultiply模式,程序员和TA在做一些比较特殊的效果时才会用到的模式,我们做特效的时候很少用到。
  • Additive模式,用于模拟当前材质与后面材质相加变亮的效果。
  • Multiply模式,用于模拟当前材质与后面材质相乘变暗的效果。

如下面视频案例,它的作用是控制渲染模型的哪一面。其中:

  • Both是渲染模型的正面和背面。
  • Front是只渲染模型的正面。
  • Back是只渲染模型的背面。


如下面视频案例,是Render Face的另一个案例。

如下面视频案例,在渲染Transparent半透明物体,且Render Face为Both时,模型的背面会显示到前面来,这时开启<Depth Write深度写入>,就能正确显示模型物体的前后关系了。其中:

  • ForceEnabled选项是<开启>Depth Write。
  • ForceDisabled和Auto选项都是<关闭>Depth Write。

上面Depth Write选项针对的是自身物体的前后深度,而这里的Depth Test选项针对的是自身与其它物体的深度前后关系。首先,这里的<深度>指的是什么?它指的是颜色像素距离摄像机的远近,像素距离摄像机越近,那么这个像素的深度越小。像素距离摄像机越远,那么这个像素的深度越大。这时我们再看下面视频案例:

  • 当白球默认的Depth Test的是LEqual<小于或等于>,意思是当前白球像素深度值<小于或等于>后面的灰色背景深度值时,那么白球像素就会被渲染出来。
  • 当把白球的Depth Test换成Greater<大于>时,意思是当前白球像素的深度值<大于>后面的灰色背景时,白球像素才会被渲染出来,否则就不被渲染出来。而此时白球深度明显是小于灰色背景,所以此时白球像素没被渲染出来。
  • 当然,我们这里只是做一个简单的案例解释,因为我们特效师几乎不怎么用这个选项,只有TA和程序员在做一些特殊效果时才会用到这个选项,所以到此为止,不深究。我们保持默认的LEqual即可。

如下面视频案例,它的作用是把贴图透明度比较低的部分裁剪掉,透明度比较高的部分都保留,所以就会形成下面这种硬边的效果,Opaque类型和Transparent类型都可以使用。

  • 注意,该功能只在使用<vfxCase_VfxBase>着色器时才有效。
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容