前言
上篇文章初学集合着色器实现了草地效果,这篇再次使用GS实现一个“爆炸效果”。为什么要加上引号呢,因为实现的其实不是一个传统的爆炸效果,更类似于面片向外扩散消失的一种科幻效果,其实通过修改面片大小,颜色和扩散方向,还可以模拟复仇者联盟三最后人化为灰烬的效果。
为什么要实现这个效果呢,实际上我最早知道几何着色器是下载了一个K神实现的开源demo,然后看到了一个非常酷炫的传送特效。
当时我第一感受就是“这尼玛也太太太太帅了吧!!!我什么时候也可以写出这种特效??!!”
感谢这是个开源Demo我可以看到其中的源码,我把下载地址提供给大家点我点我。这个网站还有很多同样酷炫的demo可供学习。这个特效其实使用的就是GS,然后通过调整面片的大小方向等来将物体“打碎”成粒子,再将粒子“重组”成物体。其实仔细观察“打碎”这个过程,有一部分图元用来表现传送了,还有一些细小的图元好像是粉末一样向外挥发掉了,我这次实现的就是后者这个效果,传送效果我以后会补上的。
实现
我其实参考大佬代码实现的Demo不是很复杂,直接放上代码吧。
Shader "MyShader/Explosion"
{
Properties
{
_Color("Color Tint", Color) = (1,1,1,1)
_Emission1("Emission1", Color) = (1,1,1,1)
_Emission2("Emission2", Color) = (1,1,1,1)
_Height("Height", Range(-1.5, 0.5)) = 0
_TotalHeight("Total Height", Float) = 1
_Strength("Explosion Strenth", Range(0, 10)) = 2
_Scale("Scale", Range(0, 5)) = 1
}
SubShader
{
Tags {
"RenderType"="Opaque"}
Pass
{
Tags{
"LightMode" = "ForwardBase"}
Cull Off
CGPROGRAM
#pragma vertex vert
#pragma geometry geom
#pragma fragment frag
#include "UnityCG.cginc"
struct a2v
{
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct v2g
{
float4 vertex : POSITION;
float3 normal : NORMAL;