【特效分享】看着特舒心的 3D拖尾!

首先感谢这位大佬:天煞魔猎手!虽然我可能把他的名字打错了,但这份感谢的心是真的!

这是他的effect教程贴: 【分享】【新年的礼物】Cocos Creator Shader Effect 系列(2020.02.17 支持Cocos Creator 2.3.0 正式版的材质系统)

下面是主题,不懂制作动图,放个静图意思一下吧,3D拖尾 运行效果:

功能简介:
设置好拖尾的横截面的形状(多边形的顶点坐标),就可以产生一个对应形状的拖尾了。

原理:
根据多边形的顶点坐标,生成一串连续的3D坐标点,作为网格的顶点;
移动时,将拖尾头部的顶点A移动到指定的位置,计算后面相邻的顶点B与A的坐标差C,C再乘以一个缩放系数比如0.2,最后顶点B的坐标加上C,就是B的最终坐标;然后以此类推更新后面的顶点坐标;
effect中,目前只是简单地根据UV坐标的X值设置像素点的透明度,颜色全部为白色,后续将会增加可自定义起始颜色、终点颜色以及纹理。(后续就是无限鸽的意思)

语言表达能力有限,反正代码中注释比较多,大家一定可以自己看懂的。

另外目前的方法是更新顶点坐标后,再将坐标数组赋值给网格,不知道是否有更高效的方法,求大佬指点。目前使用的场景都比较简单,性能倒是没问题,但不知道放到大场景中去,对整体性能影响大不大。

压缩包中,有一个effect,一个materail,一个typeScripte,因为我忘了把预制件添加进来了。
用法很简单,新建一个3D节点,添加MeshRenderer组件,将材质和脚本拖过去就行了。
脚本中几个 public 方法,看一下就知道怎么用了。

目前对 Effect 兴趣正浓,若再做了什么有趣的特效,我会继续分享出来,大家快一起来玩这个 Effect~~

对了,我写这个effect时,用的是cocos creator 2.3.1,若其他版本有运行出错的,可以……问问其他大佬!

白嫖了这么久,这次轮到自己发帖了……希望大家能给我留个言,有个心理安慰~

不太懂论坛发帖的使用方式,这是刚刚添加了起始颜色等功能的新的压缩包,之前那个压缩包直接删除,不会有影响吧:
TrailEffect.rar (5.1 KB)

27赞

特别棒

战略性mark

给大佬递茶

大佬!我果然没有把你名字打错!

:blush:

大佬牛逼

资瓷一下 !zsbd

好强,想到https://zhuanlan.zhihu.com/p/99487181这个unity的shader,闲下来试试看!

m,ark

不太懂论坛帖子怎么玩,是不是超过24小时就不能再次编辑了?

刚刚发现的两个BUG,我就在这里说一下算了,懒得再发帖,

一是uv的X坐标写反了,这个最简单的处理方式是把 TrailEffect.effect 文件中第72行的代码改一下:
fade *= v_uv0.x;
改为:
fade *= (1 - v_uv0.x);

二是 TrailEffect.ts 脚本中给材质设置贴图的问题,修改第4行:
const diffuseTexture = “diffuseTexture”;
改为:
const diffuseTexture = “texture”;

另外,若需要代码中动态设置贴图,需要把材质球的 USE_DIFFUSETEXTURE 勾上。

2赞

确实很好看

感谢楼主分享

mark

战略性插眼

感谢楼主,正好需要!

mark。

mark.

mark一下

我以为我看懂了楼主的代码,试着重写了下,结果不会动:joy:最后排查发现是不能打开动态合批(MeshRenderer的Enable Auto Batch),开了就会卡在第一帧,不会跟着移动。
那这个就很伤了,如果给大量投射物挂拖尾的话draw call就容易爆……楼主有啥办法可以正常的打开合批呢?能不能一个组件(节点)同时渲染多条拖尾?
另,draw call也很迷,第一条(父节点最下层的节点)是1,其余是2 :joy: 这种事情绝对很奇怪啊