如果对您有所帮助,希望您给我个 Star!
-
用 Unity 的 Particle System 制作特效的时候,经常需要用一个 Billboard 模式的片去实现一个球状特效(能量球、冲击波、爆闪等)
内容为光球的片
实现的效果
-
通过 Billboard,仅用 4 个顶点即可实现球状效果,对比使用球状网格,这样大大降低了 Cpu、Gpu 的消耗,但这种实现方式在高度不够的时候容易发生切片
-
该解决方案通过顶点着色器控制网格的 6 个顶点的世界坐标、纹理采样坐标来解决上述提到的切边问题
-
目前该解决方案已应用到个人制作的各个特效中,效果稳定可靠,在使用上遇到问题或者有任何疑问,欢迎发送邮件到 2662774600@qq.com 进行反馈
-
需要指定当前地面的 Y 坐标
-
不支持旋转
-
unity
安装 Unity 2018.4.12f1
运行场景 scene_index
-
Particle System 引用的材质中的着色器换成 Jiang/ParticleSystemFoldAdd(项目中需要有 shader_particle_system_fold.shader),Texture 设置为效果纹理,GroundY 设置为地面的 Y 坐标(默认为 0)
-
Particle System 的 Render Mode 改为 Mesh
-
把网格设置成 ball_effect(项目中需要有 fbx_ball_effect.fbx)
-
勾选 Custom Vertex Streams
-
添加 Tangent、Center,注意次序不能乱
-
至此,所有发射出来的粒子都会自动防止地面切边
fbx_ball_effect.fbx 中的网格 ball_effect 是一个自带折痕的片,网格数据中折痕坐标与下边界重合,但通过判断纹理采样的坐标,能分辨出顶点是上边界顶点、折痕顶点还是下边界顶点
shader_particle_system_fold.shader 中的顶点着色器,用于决定如何对折网格 ball_effect 来达到效果:
-
粒子没与地板接触:此时效果相当于纯粹的 BillBoard
-
粒子下半与地板接触:上边界不动,折痕自动置于被地板相切的坐标,下边界也置于地板平面,但根据透视向摄像机平移
-
粒子上半与地板接触:上边界不动,折痕自动置于被地板相切的坐标,下边界也置于地板平面,但根据透视向摄像机平移,而且颜色采样会跟上边界一致,以模仿球体的浸入效果
-
粒子完全被地板覆盖:此时效果相当于纯粹的 BillBoard