NoData風シェーダ pic.twitter.com/XvLZMNCOXS
— 光属性のアルモジナ(VRChat勢) (@arumogina) June 18, 2019
Shader "Custom/NoData3" { Properties{ _XColor("XColor",Color) = (1,1,1,1) _XCLimit("XCLimit",Range(0,9)) = 1 _YColor("YColor",Color) = (0.8,0.8,0.8,1) _YCLimit("XCLimit",Range(0,9)) = 5 _ZColor("ZColor",Color) = (0.5,0.5,0.5,1) _TColor("TColor",Color) = (0.1,0.,0.,1) _MainTex("MainTex",2D) = "white"{} _DefaultSpeed("DefaultSpeed",Range(0,20)) = 5 _PosSpeed("PosSpeed",Range(1,50)) = 10 _NdPos("_NdPos",Range(0,1)) = 0.5 _Wide("_Wide",Range(1,10)) = 4 } 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; float2 vpos:TEXCOORD1; }; sampler2D _MainTex; float4 _XColor; float _XCLimit; float4 _YColor; float _YCLimit; float4 _ZColor; float4 _TColor; float _PosSpeed; float _DefaultSpeed; float _NdPos; float _Wide; v2f vert(appdata v){ v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.vpos = (o.pos.xy / o.pos.w) * 0.5 + 0.5; o.uv = v.uv; return o; } float rand(float2 co){ return frac(sin(dot(co.xy ,float2(12.9898,78.233))) * 43758.5453); } float4 GetDefaultColor(v2f i){ float r = (i.pos.y + _Time.y*_DefaultSpeed) % 10; if(r<=_XCLimit) return _XColor; if(r<=_YCLimit) return _YColor; return _ZColor; } float4 XLineNoise(float from,float to,v2f i,float4 use){ if(i.vpos.y>=from && i.vpos.y<=to){ float s1 = floor(i.uv.y*100)%10/100; float ori_t = _Time.y; int t1 = ori_t%10;//整数部の1桁目を取得 int t2 = floor(ori_t/10)%10;//整数部の2桁目を取得 float s2 = rand(float2(t1,t2))*100%10/100; //float s2 = rand(float2(_Time.x,_Time.y))*100%10/100; //_NdPosを上手く設定すると、X軸上で表示される場所とされない場所を作ることが出来る。 //_NdPos+s1+s1: _NdPos~_Ndpos+0.2の値にしている if(i.uv.x < _NdPos+s1+s2) use = _TColor; } return use; } float4 GetNoisedColor(v2f i,float4 use){ float t = floor(_Time.y*_PosSpeed);//スピード float temp = t; int d[3]; for(int k=0;k<3;k++){ d[k] = temp%10; temp = floor(temp/10);//切り捨て除算 } float r1 = rand(float2(d[0]+d[2],d[1]+d[2])); float r2 = r1+rand(d[0]+d[1]+d[2])/_Wide;//明るくする部分の幅 use = XLineNoise(r1,r2,i,use); float r3 = rand(float2(d[0]+d[1],d[0]+d[2])); float r4 = r3+rand(d[0]+d[1]+0.2)/_Wide; use = XLineNoise(r3,r4,i,use); return use; } float4 frag(v2f i) :SV_Target { float4 c = tex2D(_MainTex,i.uv); float4 use = GetDefaultColor(i); return c*GetNoisedColor(i,use); } ENDCG }//Pass }//SubShader FallBack "Diffuse" }