小随笔:利用Shader实现模型爆炸和沙粒化的效果

小说:初中学生党赚钱作者:王道更新时间:2018-12-16字数:16058

也对,形势比人强,民谣摇滚等音乐式微是事实,哪怕《那些花儿》火了,也没法逆转潮流,他不可能靠着民谣或是摇滚吃一辈子,还是得走上流行的路,那还是别和豆苗扯上关系的好。

时间挂机网赚论坛

一行七人,带着有些踉跄的步伐,朝着魂师入口处缓缓而去。失败,令他们的背影看上去有些单薄。
然后心思一转,便说道:“我现在就只有这些钱,要不你先帮我止痛,稍后我再取钱给你?”

“连我一拳你都接不住还敢叫什么杀拳,不灭金身,简直就是站污这些名字,死吧。”刘皓一拳打碎了绝无神的右臂看着绝无神的惨状没有丝毫的留情留情第二拳直接将绝无神的脑袋给打爆了,绝无神的惨叫也戛然而止。

小随笔:利用Shader实现模型爆炸和沙粒化的效果


0x00 前言

上一篇小随笔《小随笔:利用Shader给斯坦福兔子长毛和实现雪地效果》中,我和大家聊了聊著名的斯坦福兔子和利用geometry shader实现的一些效果。这篇文章继续沿用了同样来自斯坦福的另一个模型Armadillo,同样也使用了geometry shader来实现效果的表现。

0x01 凶恶的怪物和爆炸

当然,用之前的斯坦福兔子的模型做爆炸的效果也是可以的,但是考虑到要让一个那么可爱的模型变成沙砾总觉得不太好,所以长相自带怪物属性的模型Armadillo就成了一个不错的选择。

不过另一个让我选择Armadillo的原因其实是因为它的面数和顶点数相对来说更多,可以看到它有106289个顶点和212574个多边形组成,所以用来做爆炸成为沙砾的效果要更好。

ok,现在让我们把Armadillo的obj文件导入到Unity内,可以看到这个怪物已经站立在我们的场景内了。接下来我们就要利用geometry shader来实现我们想要的爆炸沙粒化的效果了。

之前提到Geometry Shader的时候,往往是利用它来生成更多新的顶点和多边形来实现我们期望的效果,例如利用它在GPU上生成草体,实现真实草的实时渲染。
但是Geometry Shader不仅可以生成新的图元,同时它还可以减少顶点和多边形的输出,以实现一些有趣的效果,比如这篇小文章的例子,利用Geometry Shader来实现怪兽的爆炸和沙粒化效果。

而我们要做的也很简单,就是在Geometry Shader内将输入的由3个顶点组成的三角形图元修改为只有一个顶点组成的点图元。而输出的这个点的坐标我们可以很简单的使用三角形的中心点坐标。

            float3 tempPos = (IN[0].vertex + IN[1].vertex + IN[2].vertex) / 3;
            o.vertex = UnityObjectToClipPos(tempPos);

这样,组成怪兽的网格就由三角形图元变成了点图元,而且顶点数量也随之减少,至于怪物本身也变成了下面这个样子。

但是这个时候的模型是静止的,因此也看不出爆炸甚至是沙砾的效果。所以接下来我们就要让怪物的模型随着时间运动起来。
而一个大家都知道的运动学公式就可以用来实现这个效果:

其中的S就是顶点的最新位置,v0和a的值可以作为一个uniform变量传入shader,运动方向可以是沿着三角形的法线方向,而t的来源则是Unity内置的变量_Time的y分量。
这样,需要的几个变量我们就有了:

            //速度的值加速度的值
            float _Speed;
            float _AccelerationValue;
            float _StartTime

            //法线
            float3 v1 = IN[1].vertex - IN[0].vertex;
            float3 v2 = IN[2].vertex - IN[0].vertex;
            float3 norm = normalize(cross(v1, v2));
            ...
            //时间
            float realTime = _Time.y - _StartTime;

之后只要带入运动学公式就好了:

            tempPos += norm * (_Speed * realTime + .5 * _AccelerationValue * pow(realTime, 2));

最后的效果就变成了这样:

Demo地址:chenjd/Unity-Miscellaneous-Shaders

0x02 后记

ok,以上就是我这周的小随笔。希望大家能有所收获。哦,对了,我用的obj文件各位可以到这里下载:http://www.prinmath.com/csci5229/OBJ/index.html。

-EOF-
最后打个广告,欢迎支持我的书《Unity 3D脚本编程》

欢迎大家关注我的公众号慕容的游戏编程:chenjd01

当前文章:http://zxqss.com/mjl1yxnwl0/index.html

发布时间:2018-12-16 03:12:03

2018年干什么买卖挣钱 狐狸慧赚和搜易贷 怎么样致富 在家里一天赚100赚钱 上海暑假兼职网 上班族找什么兼职好点 创新创业训练项目 这几年有哪些致富项目

编辑:董邓

我要说两句: (0人参与)

发布