在帝都每天擠地鐵上下班,無數地鐵廣告飛來,最近看到一個廣告特效:地鐵車輛由飛裂的碎片變成了一輛完整的車輛,咱也來整一個
工程下載:關注公衆號《IT木子李》回覆:unity敖丙的冰凍爆裂技能
上代碼+講解
三個主要控制變量:_Height 當前模型被冰凍到的高度,_Alpha 模型漸變到透明的控制,_TAmount 分裂的程度
計算三角面的法線方向,也就是爆裂的方向
float3 v1 = IN[1].vertex - IN[0].vertex;
float3 v2 = IN[2].vertex - IN[0].vertex;
float3 norm = normalize(cross(v1, v2));
通過冰凍高度變量,來控制是否冰裂,並把頂點信息輸出到fs
if(IN[0].vertex.z > _Height)
{
for(int i = 0; i< 3; i++) {
g2f o;
o.world = IN[i].vertex;
o.vertex = explode(IN[i].vertex, norm);
o.vertex = UnityObjectToClipPos(o.vertex);
o.uv = IN[i].uv;
triangleStream.Append(o);
}
}
else
{
for(int i = 0; i< 3; i++){
g2f o;
o.world = IN[i].vertex;
o.vertex = UnityObjectToClipPos(IN[i].vertex);
o.uv = IN[i].uv;
triangleStream.Append(o);
}
}
通過高度來採樣不同的貼圖
if(i.world.z > _Height)
{
col = tex2D(_IceTex, i.uv);
col.a = _Alpha;
}
else
{
col = tex2D(_MainTex, i.uv);
}