【Unity】从零使用Amplify Shader - 屏幕抓取与扭曲

前言:

很多实际项目中,我们都需要对当前整个屏幕进行一些特殊处理,那再ASE中其实可以非常快速的实现,下面就跟着教程试试吧。

创建材质:

● 右键 - Create - Amplify Shader - Legacy - Unlit
● 在创建出的Shader上右键 - Create - Material - 起个名字
● 打开ASE编辑器。

初步实现:

  • 在ASE中,想要抓取屏幕内容,只需要了解两个最重要的节点:
    • Screen Position - 屏幕坐标
    • Grab Screen Color - 当前屏幕颜色

在这里插入图片描述

  • 在这里我们首先连接了一个 Component Mask,这也是我们第一次用到这个节点,它的意义也很简单,知道Mask的概念就能懂一半:筛选我们需要的内容,这里因为我们只需要屏幕的二维坐标也就是XY,所以勾选XY即可。
  • 接下来就直接将屏幕坐标连接到Grab Screen Color节点的UV上,最后输出颜色到片元着色Frag Color。
  • 到此为止我们已经可以获得屏幕信息了,可以利用一个2D Sprite来测试一下。

扭曲

  • 这一步操作算是重点了,折射(扭曲)。虽然是重点,但其实也超简单!
  • 先直接上基本完成图,首先把几个控制变量忽略不看。那么就剩下Panner,Texture和Lerp三个节点了。
    • Lerp是核心,作用是对屏幕UV进行了一个插值。 这里给出公式:lerp(a, b, f) //(1-f)a + bf , 简单理解就是B向着A混合。
    • Panner是让UV滚动起来,这里Speed在Y方向-1也就是在Y方向进行滚动。
    • Texture就没什么可说的,用它的R的值来做插值混合,这里用黑底渐变图是为了让图形周围更圆滑,不像矩形那么锋利,可以从接下来的图中看到。

在这里插入图片描述

  • 记得给Lerp的Alpha的控制变量赋值才能看到变化。
  • 那么我们在屏幕中随便给一张背景图片,然后再添加一个2D Sprite矩形测试后的结果如下:
  • 在这里插入图片描述
  • 最后,调整一下截图的尺寸,然后像上面提到的替换一些圆滑的贴图到Texture节点。可以看到动起来以后的画面了:

请添加图片描述

总结:

到上面为止,基本折射扭曲的概念和示例已经差不多结束了,但是值得注意的是,这种全屏操作是非常消耗性能的,因为每帧都会去截取屏幕图形,使用的时候需要慎重考虑。那实际应用中都用在什么地方呢?举个例子:一个类似黑洞的子弹,这种持续时间短且会回收的资源,用一下这样的shader还是性能可接收的。但是用在子弹上多数情况就需要使用粒子,提示这个材质要用在粒子上,需要一个额外节点Vertex Color顶点色,具体大家自己去尝试一下吧

猜你喜欢

转载自blog.csdn.net/sylardie/article/details/127969798