Shader实现灰飞烟灭效果

前言

相信大家在玩游戏的时候,应该见到过一些怪物死亡过后,就爆裂开来,或化作万千碎片,或化为一缕青烟,或化作一堆粉末,随风飘散。感觉非常这种死亡特效是非常的有意思的。

众所周知,Shader可以做出一些炫酷的效果出来,我这里也用Shader做了一个怪物灰飞烟灭的效果,一起来看看吧。

上效果图。

刚开始这四个怪物在跳舞,然后跳舞结束就灰飞烟灭了。怪物变成了一堆沙粒,粉末消失无踪。那么这个效果是怎么做的呢?我们接下来说下原理。

在我们写Shader脚本时候,大部分时间大家用顶点函数和片元函数就能搞定很多的需求。然后部分人就以为Shader里面就只有顶点函数和片元函数了。

其实除了他们,还有其他一些函数,也是非常有用的,就比如我们今天这个效果,就用到了其他的函数:几何函数或者叫它几何着色器。我们都知道顶点函数是处理模型顶点相关的,片元函数是处理像素相关的。

那么这个几何函数是干嘛的呢?通过名字就应该知道,和几何相关,它呢其实是处理图元相关的函数,其实说白了就是处理三角形的。

我们都知道模型是由网格组成的,那么网格又是又无数的三角形组成的。任何的物体都能由无数的三角形组成。好了,这个点就说到这里了,我们接下来说下这个效果的原理。

OK,既然说了几何函数是处理三角形的,一般情况下我们的图元差不多就是像一个三角形就是一个图元这样的。然后三角形是把三个顶点连接起来组成的一个三角形。

这是一般的情况,那么我们这里是要让模型变粉末,沙子这样的,那么如果以之前的操作,所有的顶点连接起来后,就勾勒出一个完整的模型了,这绝对是不允许的,那么我们怎么做呢?

我们可以把普通的三角形图元做出点图元。然后为了勾勒出来的模型尽量的不香一个完整的模型。我们可以让这些点图元尽量离的远一点。

做法是这样的:把三角形图元做出点图元,点的位置取三角形的正中心位置。然后这样一来,就是下面的情况了,如图:

这是正常的三角形勾勒的模型。下面是点图元:

然后现在大概的模型轮廓还是看的见一些,接下来就是让它灰飞烟灭,那么怎么做呢?飘散嘛,很简单,他们现在聚在一起了,我就让他们分散远离,飘散而去。那么是谁远离(运动)呢?

很明显,是让顶点进行移动。那么在这里我们可以用一个物理学公式来计算顶点的位移。最终我们就完成了这个效果了。完整代码如下:

这就是几何函数的内容,也是本次特效的关键所在。其他的不重要,都是常规的渲染物体的写法。这个效果函数非常的不错的。

好了本次的分享就到这里了。有需要demo的朋友请私聊加我。

你可能感兴趣的:(Shader实现灰飞烟灭效果)