从头学ShaderGraph :溶解材质

作者:Lute Li 2020-03-11

溶解材质

先说下新发现

上篇文章不是说HDRP的emission物理单位导致需要乘10w倍吗,我在shadergraph中找到了一个节点叫Emission Node,应该是HDRP独有的。


现在单位是Nits,熟悉显示器的朋友应该清楚,常见显示器的最大亮度不高于400Nits,强劲一点的HDR显示器也不会超过1000Nits


所以我把滑块的最大最小值重新修正了一遍,如果是想用在URP(LWRP)中的同学,可以自行修改(换成乘法就好)。

下面开始正文

灵感来源于Brackeys的youtube教程,但内容更加丰富。

溶解材质是游戏内能经常见到的:怪物死亡,消融模型,淡入淡出,都需要用到。

溶解在材质上分为两步

1.        模型逐步消失

2.        消失边缘发光

先来做模型消失

模型消失即为让模型沿着alpha切割,就是standard的Cutout模式


也就是图中的AlphaClip

默认AlphaClip为0.5,也就是说alpha中,0到0.5的位置会被切掉

现在需要一张用于切割的黑白Noise图。你可以自己做,放在Albedo的Alpha中,也可以用Noise节点来实时生成


目前自带的noise节点为这三个。我选择最后一个作为例子


可见模型被切割了。

现在我需要一个滑块,来控制这张Noise图,有如下变化。


最简单的做法是,加上一个范围是-1到1的滑块。


于是乎切割就做好了。

再加切割边缘光

边缘光更好理解,现在图片0.5是切割的边界。如果0-0.6为发光,0.5以下被切掉,那么发光地方不就成了0.5-0.6。这就是边缘光。

可以用Step这个节点给Alpha做遮罩,把边缘发光加到自发光贴图上,最终输出出去。



上面就是原视频的所有内容

但!我们还要往前!!

在视频里,我看到了一段参考,从上到下的溶解,并且溶解的颜色会变化。


这篇文章的最终目的就是这个。

先分析下如何做

  • 取到上下信息
  • noise上下消融


如何取上下信息?

有两种方法:1.取模型本地的位置信息(Position节点)。2.UV。

这里我选择用UV来做。

因为第一套UV需要给贴图。所以模型展2U,正面映射。


这样,UV的V就能拿来做上下渐变图。

如何上下消融?


Alpha为1,肯定显示,Alpha为0,肯定隐藏。

Noise是一张不规则的黑白图片,

  • 最黑的地方为0,0的位置想要显示,就得加1。
  • 最白的地方是1,1的位置想要隐藏,就得减1。


所以我需要一张图有1到-1的渐变,显然右边那张图是我们想要的。

原图是线性增加的,可以看成图像y=x

而右图,设为y=ax+b,a是黑白渐变的强度。函数满足x=0.5时,y=0。很容易得出,b=-0.5a,所以y=ax-0.5a


照着函数连一下,即可得到我们想要的蒙蔽图。下面一步,便是让最后那张图能上下移动。

*最开始我想的是在最后一个节点上,加上一个滑块。但真正实验过后,你会发现行不通。因为最后一张图有高于1的值,用加上-1没法得到纯黑。而用clamp或saturate限制0-1,会导致渐变有问题。

所以我找了个取巧的办法。


y=2x-1

把渐变滑块加在x上。也就是y=a(x+m)-0.5a

当a等于2时候,m在0-1上滑动,正好会让图像有整个 y在-1到1 的渐变。

而当a大于2时,满足 y在-1到1 的m,也在0-1之间。


AlphaClip的是一个滑块,最小值为2

至此,上下溶解的蒙版制作完成。

至于颜色渐变,用UV的V,lerp两种颜色就好。


至此,本章完结


最后把noise悄悄换成了维诺图


下面是我的文件

文件分享share.weiyun.com

密码:xjqym9

使用方法:找个HDRP或着URP(LWRP),拖进去。我的文件夹下有预制体。记得调自发光强度。

下面是我的artstation地址:

https://www.artstation.com/luteli

相关阅读:从头学ShaderGraph :UV与基础材质

作者:Lute Li
专栏地址:https://zhuanlan.zhihu.com/p/99435201

最新评论
暂无评论
参与评论

商务合作 查看更多

编辑推荐 查看更多