Shader "Custom/Volonoi" { Properties{ _Split("Split",Int) = 5 _P("P",Float) = 0 _RDM("RDM",Float) = 4 _SPD("SPD",Float) = 1 _Color("Color",Color) = (0,0,0,1) _Color2("Color2",Color) = (0,0,0,1) } SubShader{ Tags{"Queue" = "Transparent" "RenderType" = "Transparent"} Blend SrcAlpha OneMinusSrcAlpha Pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex:POSITION; float4 uv:TEXCOORD0; }; struct v2f { float4 pos:SV_POSITION; float4 uv:TEXCOORD0; }; int _Split; float _P; float _RDM; float _SPD; float4 _Color; float4 _Color2; float rand(float2 co){ return frac(sin(dot(co.xy ,float2(12.9898,78.233))) * 43758.5453); } float2 rand2(float2 st){ st = float2(dot(st, float2(127.1, 311.7)), dot(st, float2(269.5, 183.3))); return frac(sin(st) * 43758.5453123); } v2f vert(appdata v){ v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } float dist = 100; float4 frag(v2f i) :SV_Target { float2 auv = i.uv*_Split; float2 uv = frac(auv); float2 id = floor(auv); float min_dist = 100; float2 min_p = float2(0,0); //各マスのランダムな位置に頂点を配置 //周囲8マスと現在のマスに配置されたランダムな頂点を探索し //処理対象のピクセルと最も近い点を探す for(int k=-1;k<=1;k++){ for(int m=-1;m<=1;m++){ float2 km = float2(k,m); float2 rand_p = rand2(id+km); //各マスの中心位置(0.5,0.5)から各成分+0.5までの移動を許している rand_p = float2(0.5,0.5)+0.5*sin(_Time.y*_SPD+_RDM*rand_p); float dist = length(rand_p+km-uv); if(dist<min_dist){ min_dist = dist; min_p = rand_p; } } } float4 col = _Color + min_dist*2; col.rg = min_p; //col -= abs(sin(80*min_dist))*0.07; //縞模様 //col += 1-step(0.02,min_dist); //中央の点 return float4(col.rgb,1); //return float4(dist,dist,0,1); //return clamp(_Color,_Color2,dist); //return lerp(_Color,_Color2,dist); } ENDCG }//Pass }//SubShader FallBack "Diffuse" }
Shader "Custom/Base" { Properties{ _Split("Split",Int) = 5 } SubShader{ Tags{"Queue" = "Transparent" "RenderType" = "Transparent"} Blend SrcAlpha OneMinusSrcAlpha Pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex:POSITION; float4 uv:TEXCOORD0; }; struct v2f { float4 pos:SV_POSITION; float4 uv:TEXCOORD0; }; int _Split; float rand(float2 co){ return frac(sin(dot(co.xy ,float2(12.9898,78.233))) * 43758.5453); } v2f vert(appdata v){ v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } float4 frag(v2f i) :SV_Target { float2 auv = i.uv*_Split; float2 uv = frac(auv); float2 id = floor(auv); float2 rp = float2(rand(id.xy+1),rand(float2(id.x,id.y))); float len = length(rp-uv); return float4(len,0,0,1); } ENDCG }//Pass }//SubShader FallBack "Diffuse" }
Shader "Custom/Base" { Properties{ _Split("Split",Int) = 5 _P("P",Float) = 0 _RDM("RDM",Float) = 4 _SPD("SPD",Float) = 1 _Color("Color",Color) = (0,0,0,1) _Color2("Color2",Color) = (0,0,0,1) } SubShader{ Tags{"Queue" = "Transparent" "RenderType" = "Transparent"} Blend SrcAlpha OneMinusSrcAlpha Pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex:POSITION; float4 uv:TEXCOORD0; }; struct v2f { float4 pos:SV_POSITION; float4 uv:TEXCOORD0; }; int _Split; float _P; float _RDM; float _SPD; float4 _Color; float4 _Color2; float rand(float2 co){ return frac(sin(dot(co.xy ,float2(12.9898,78.233))) * 43758.5453); } float2 rand2(float2 st){ st = float2(dot(st, float2(127.1, 311.7)), dot(st, float2(269.5, 183.3))); return frac(sin(st) * 43758.5453123); } v2f vert(appdata v){ v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } float dist = 100; float4 frag(v2f i) :SV_Target { float2 auv = i.uv*_Split; float2 uv = frac(auv); float2 id = floor(auv); float min_dist = 100; float2 min_p = float2(0,0); //各マスのランダムな位置に頂点を配置 //周囲8マスと現在のマスに配置されたランダムな頂点を探索し //処理対象のピクセルと最も近い点を探す for(int k=-1;k<=1;k++){ for(int m=-1;m<=1;m++){ float2 km = float2(k,m); float2 rand_p = rand2(id+km); //各マスの中心位置(0.5,0.5)から各成分+0.5までの移動を許している rand_p = float2(0.5,0.5)+0.5*sin(_Time.y*_SPD+_RDM*rand_p); float dist = length(rand_p+km-uv); if(dist<min_dist){ min_dist = dist; min_p = rand_p; } } } fixed4 col = min_dist; //グレースケール //col = dot(min_p, float2(0.3, 0.6)); //カラー col = min_dist * 0.1; col.rg += min_p; //col -= abs(sin(10*min_dist+_Time.y*_SPD))*0.7; col -= step(0.2,abs(sin(10*min_dist+_Time.y*_SPD))*0.7); //col += 1-step(0.5,min_dist); col.a = 1; return col; /* float4 col = _Color + min_dist*2; col.rg = min_p; col -= abs(sin(80*min_dist))*0.07; col += 1-step(0.02,min_dist); return float4(col.rgb,1); */ //return float4(dist,dist,0,1); //return clamp(_Color,_Color2,dist); //return lerp(_Color,_Color2,dist); } ENDCG }//Pass }//SubShader FallBack "Diffuse" }
Shader "Custom/Volonoi" { Properties{ _Split("Split",Int) = 5 _P("P",Float) = 0 _RDM("RDM",Float) = 4 _SPD("SPD",Float) = 1 _Color("Color",Color) = (0,0,0,1) _Color2("Color2",Color) = (0,0,0,1) } SubShader{ Tags{"Queue" = "Transparent" "RenderType" = "Transparent"} Blend SrcAlpha OneMinusSrcAlpha Pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex:POSITION; float4 uv:TEXCOORD0; }; struct v2f { float4 pos:SV_POSITION; float4 uv:TEXCOORD0; }; int _Split; float _P; float _RDM; float _SPD; float4 _Color; float4 _Color2; float rand(float2 co){ return frac(sin(dot(co.xy ,float2(12.9898,78.233))) * 43758.5453); } float2 rand2(float2 st){ st = float2(dot(st, float2(127.1, 311.7)), dot(st, float2(269.5, 183.3))); return frac(sin(st) * 43758.5453123); } v2f vert(appdata v){ v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } float dist = 100; float4 frag(v2f i) :SV_Target { float2 auv = i.uv*_Split; float2 uv = frac(auv); float2 id = floor(auv); float m_dist[5] = {9,9,9,9,9};//距離が小さい順に先頭から入れる float2 m_p[5];//同じインデックスに対応する座標を入れる //各マスのランダムな位置に頂点を配置 //周囲8マスと現在のマスに配置されたランダムな頂点を探索し //処理対象のピクセルと最も近い点を探す for(int k=-1;k<=1;k++){ for(int m=-1;m<=1;m++){ float2 km = float2(k,m); float2 rand_p = rand2(id+km); //各マスの中心位置(0.5,0.5)から各成分+0.5までの移動を許している rand_p = float2(0.5,0.5)+0.5*sin(_Time.y*_SPD+_RDM*rand_p); float dist = length(rand_p+km-uv); for(int n=0;n<5;n++){ if(dist<m_dist[n]){ [unroll] for(int o=4;o>n;o--){ m_dist[o] = m_dist[o-1]; m_p[o] = m_p[o-1]; } m_dist[n] = dist; m_p[n] = rand_p; break; } } } } //float md = m_dist[0]*m_dist[1]*m_dist[2]*m_dist[3]*m_dist[4]; //float2 mp = m_p[0]*m_p[1]*m_p[2]*m_p[3]*m_p[4]; float md = m_dist[4]-m_dist[3]+m_dist[2]-m_dist[1]+m_dist[0]; float2 mp = m_p[0]/m_p[1]*m_p[2]/m_p[1]*m_p[0]; float4 col = _Color + md*2; col.rg = mp; //col -= abs(sin(80*md))*0.07; //縞模様 //col += 1-step(0.3,md); //中央の点 return float4(col.rgb,1); //return float4(dist,dist,0,1); //return clamp(_Color,_Color2,dist); //return lerp(_Color,_Color2,dist); } ENDCG }//Pass }//SubShader FallBack "Diffuse" }
Shader "Custom/Base" { Properties{ _Split("Split",Int) = 5 _P("P",Float) = 0 _RDM("RDM",Float) = 4 _SPD("SPD",Float) = 1 _Color("Color",Color) = (0,0,0,1) _Color2("Color2",Color) = (0,0,0,1) } SubShader{ Tags{"Queue" = "Transparent" "RenderType" = "Transparent"} Blend SrcAlpha OneMinusSrcAlpha Pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex:POSITION; float4 uv:TEXCOORD0; }; struct v2f { float4 pos:SV_POSITION; float4 uv:TEXCOORD0; }; int _Split; float _P; float _RDM; float _SPD; float4 _Color; float4 _Color2; float rand(float2 co){ return frac(sin(dot(co.xy ,float2(12.9898,78.233))) * 43758.5453); } float2 rand2(float2 st){ st = float2(dot(st, float2(127.1, 311.7)), dot(st, float2(269.5, 183.3))); return frac(sin(st) * 43758.5453123); } v2f vert(appdata v){ v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } float dist = 100; float4 frag(v2f i) :SV_Target { float2 auv = i.uv*_Split; float2 uv = frac(auv); float2 id = floor(auv); float dist = 100; //各マスのランダムな位置に頂点を配置 //周囲8マスと現在のマスに配置されたランダムな頂点を探索し //処理対象のピクセルと最も近い点を探す for(int k=-1;k<=1;k++){ for(int m=-1;m<=1;m++){ float2 km = float2(k,m); float2 rand_p = rand2(id+km); //各マスの中心位置(0.5,0.5)から各成分+0.5までの移動を許している rand_p = float2(0.5,0.5)+0.5*sin(_Time.y*_SPD+_RDM*rand_p); dist = min(dist,length(rand_p+km-uv)); } } //return float4(dist,dist,0,1); //return clamp(_Color,_Color2,dist); return lerp(_Color,_Color2,dist); } ENDCG }//Pass }//SubShader FallBack "Diffuse" }