Unity 扫描特效 HoloTriangles.shader
来源:互联网 发布:淘宝退货退款发空包 编辑:程序博客网 时间:2024/04/26 13:05
Shader "Custom/HoloTriangles" {
Properties
{
_Color("Main Color", Color) = (0.2, 0.5, 1.0)
_Speed("Speed", Range(0.01, 10)) = 1
_TrianglesScale("Triangles Scale", Range(0.01, 10)) = 1
_RangeScale("Range Scale", Range(0.01, 10)) = 1
_Center("Center", Vector) = (0.0, -1.0, 3.0, 1.0)
}
SubShader
{
Tags{ "RenderType" = "Opaque" }
LOD 100
Pass
{
ZWrite Off
AlphaTest Greater 0
ColorMask RGB
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#define pi 3.14159265358979
#define reciproce_sqrt3 0.57735026918962576450914878050196
half3 _Color;
float _Speed;
float _TrianglesScale;
float _RangeScale;
float4 _Center;
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float4 vertex : SV_POSITION;
float4 world : TEXCOORD1;
};
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.world = mul(unity_ObjectToWorld, v.vertex);
return o;
}
float planeDistance = 0.2;
float offset;
float r(float n)
{
return frac(abs(sin(n*55.753)*367.34));
}
float r(float2 n)
{
return r(dot(n, float2(2.46, -1.21)));
}
float3 smallTrianglesColor(float3 pos)
{
float a = (radians(60.0));
float zoom = 0.125;
float2 c = (pos.xy + float2(0.0, pos.z)) * float2(sin(a), 1.0) / _TrianglesScale;//scaled coordinates
c = ((c + float2(c.y, 0.0)*cos(a)) / zoom) + float2(floor((c.x - c.y*cos(a)) / zoom*4.0) / 4.0, 0.0);//Add rotations
float type = (r(floor(c*4.0))*0.2 + r(floor(c*2.0))*0.3 + r(floor(c))*0.5);//Randomize type
type += 0.3 * sin(_Time.y*5.0*type);
float l = min(min((1.0 - (2.0 * abs(frac((c.x - c.y)*4.0) - 0.5))),
(1.0 - (2.0 * abs(frac(c.y * 4.0) - 0.5)))),
(1.0 - (2.0 * abs(frac(c.x * 4.0) - 0.5))));
l = smoothstep(0.06, 0.04, l);
return lerp(type, l, 0.3);
}
float3 largeTrianglesColor(float3 pos)
{
float a = (radians(60.0));
float zoom = 0.5;
float2 c = (pos.xy + float2(0.0, pos.z)) * float2(sin(a), 1.0) / _TrianglesScale;//scaled coordinates
c = ((c + float2(c.y, 0.0)*cos(a)) / zoom) + float2(floor((c.x - c.y*cos(a)) / zoom*4.0) / 4.0, 0.0);//Add rotations
float l = min(min((1.0 - (2.0 * abs(frac((c.x - c.y)*4.0) - 0.5))),
(1.0 - (2.0 * abs(frac(c.y * 4.0) - 0.5)))),
(1.0 - (2.0 * abs(frac(c.x * 4.0) - 0.5))));
l = smoothstep(0.03, 0.02, l);
return lerp(0.01, l, 1.0);
}
//---------------------------------------------------------------
// Material
//
// Defines the material (colors, shading, pattern, texturing) of the model
// at every point based on its position and normal. In this case, it simply
// returns a constant yellow color.
//------------------------------------------------------------------------
float3 doMaterial(in float3 pos, in float3 midPos)
{
float d = length(pos.xz - midPos.xz) + pos.y - midPos.y;
d /= _RangeScale;
float border = fmod(_Time.y * _Speed, 5.0);
float3 c1 = largeTrianglesColor(pos);
float3 c2 = smallTrianglesColor(pos);
// Small rim
float3 c = float3(1.0, 1.0, 1.0) * smoothstep(border - 0.2, border, d);
// Large Triangles to all
c += c1;
// Small triangle slightly after front
c += c2 * smoothstep(border - 0.4, border - 0.6, d);
// Cutoff front
c *= smoothstep(border, border - 0.05, d);
// Cutoff back
c *= smoothstep(border - 3.0, border - 0.5, d);
// fade out
c *= smoothstep(5.0, 4.0, border);
return c *_Color;
}
fixed4 frag(v2f i) : SV_Target
{
return float4(doMaterial(i.world.xyz, _Center.xyz), 1.0);
}
ENDCG
}
}
}
Properties
{
_Color("Main Color", Color) = (0.2, 0.5, 1.0)
_Speed("Speed", Range(0.01, 10)) = 1
_TrianglesScale("Triangles Scale", Range(0.01, 10)) = 1
_RangeScale("Range Scale", Range(0.01, 10)) = 1
_Center("Center", Vector) = (0.0, -1.0, 3.0, 1.0)
}
SubShader
{
Tags{ "RenderType" = "Opaque" }
LOD 100
Pass
{
ZWrite Off
AlphaTest Greater 0
ColorMask RGB
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#define pi 3.14159265358979
#define reciproce_sqrt3 0.57735026918962576450914878050196
half3 _Color;
float _Speed;
float _TrianglesScale;
float _RangeScale;
float4 _Center;
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float4 vertex : SV_POSITION;
float4 world : TEXCOORD1;
};
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.world = mul(unity_ObjectToWorld, v.vertex);
return o;
}
float planeDistance = 0.2;
float offset;
float r(float n)
{
return frac(abs(sin(n*55.753)*367.34));
}
float r(float2 n)
{
return r(dot(n, float2(2.46, -1.21)));
}
float3 smallTrianglesColor(float3 pos)
{
float a = (radians(60.0));
float zoom = 0.125;
float2 c = (pos.xy + float2(0.0, pos.z)) * float2(sin(a), 1.0) / _TrianglesScale;//scaled coordinates
c = ((c + float2(c.y, 0.0)*cos(a)) / zoom) + float2(floor((c.x - c.y*cos(a)) / zoom*4.0) / 4.0, 0.0);//Add rotations
float type = (r(floor(c*4.0))*0.2 + r(floor(c*2.0))*0.3 + r(floor(c))*0.5);//Randomize type
type += 0.3 * sin(_Time.y*5.0*type);
float l = min(min((1.0 - (2.0 * abs(frac((c.x - c.y)*4.0) - 0.5))),
(1.0 - (2.0 * abs(frac(c.y * 4.0) - 0.5)))),
(1.0 - (2.0 * abs(frac(c.x * 4.0) - 0.5))));
l = smoothstep(0.06, 0.04, l);
return lerp(type, l, 0.3);
}
float3 largeTrianglesColor(float3 pos)
{
float a = (radians(60.0));
float zoom = 0.5;
float2 c = (pos.xy + float2(0.0, pos.z)) * float2(sin(a), 1.0) / _TrianglesScale;//scaled coordinates
c = ((c + float2(c.y, 0.0)*cos(a)) / zoom) + float2(floor((c.x - c.y*cos(a)) / zoom*4.0) / 4.0, 0.0);//Add rotations
float l = min(min((1.0 - (2.0 * abs(frac((c.x - c.y)*4.0) - 0.5))),
(1.0 - (2.0 * abs(frac(c.y * 4.0) - 0.5)))),
(1.0 - (2.0 * abs(frac(c.x * 4.0) - 0.5))));
l = smoothstep(0.03, 0.02, l);
return lerp(0.01, l, 1.0);
}
//---------------------------------------------------------------
// Material
//
// Defines the material (colors, shading, pattern, texturing) of the model
// at every point based on its position and normal. In this case, it simply
// returns a constant yellow color.
//------------------------------------------------------------------------
float3 doMaterial(in float3 pos, in float3 midPos)
{
float d = length(pos.xz - midPos.xz) + pos.y - midPos.y;
d /= _RangeScale;
float border = fmod(_Time.y * _Speed, 5.0);
float3 c1 = largeTrianglesColor(pos);
float3 c2 = smallTrianglesColor(pos);
// Small rim
float3 c = float3(1.0, 1.0, 1.0) * smoothstep(border - 0.2, border, d);
// Large Triangles to all
c += c1;
// Small triangle slightly after front
c += c2 * smoothstep(border - 0.4, border - 0.6, d);
// Cutoff front
c *= smoothstep(border, border - 0.05, d);
// Cutoff back
c *= smoothstep(border - 3.0, border - 0.5, d);
// fade out
c *= smoothstep(5.0, 4.0, border);
return c *_Color;
}
fixed4 frag(v2f i) : SV_Target
{
return float4(doMaterial(i.world.xyz, _Center.xyz), 1.0);
}
ENDCG
}
}
}
阅读全文
0 0
- Unity 扫描特效 HoloTriangles.shader
- Unity Shader 闪光特效
- unity AR扫描shader
- Unity Shader 三 卡通特效
- Unity Shader 一 激光特效Shader
- 【Unity&特效&Shader】模糊特效资料集合
- Unity Shader之Logo流光特效
- 进击的Unity特效------Shader目录
- Unity shader实现屏幕模糊特效
- Unity Shader--简单的扇形扫描效果
- Shader特效——BRDF 的实现【Unity Shader】
- 【精华分享】【Unity&特效&Shader】关于特效学习的总览
- 【shadertoy】海洋球 -- unity中的水面特效shader
- unity 2d利用shader 做闪光特效
- unity shader
- Unity Shader
- Unity-Shader
- unity shader
- 多线程的理论知识部分
- AndroidStudio ADB Connection error 通常每个套接字地址只允许使用一次
- [翻译]理解C#对象生命周期
- markdown编辑器
- C代码优化方案
- Unity 扫描特效 HoloTriangles.shader
- 1050. 螺旋矩阵(25)
- 自动备份Oracle数据库
- setsockopt()函数功能介绍
- 为什么eq筛选找不到Object?
- 后缀数组板子
- const_cast(脱const)
- 无聊之余来篇JSON解析(手动+GSON)
- Winform面试题