イラスト、モデリング、Unity、VR関連

unityとかblenderとかvr関連の作業メモ

shader ノイズ

 

Shader "Custom/sonic1" {
	Properties{
		_MainTex("MainTex",2D) = "white"{}
		_Frec("Frec",Range(0,1000)) = 100
		_SPD("SPD",Float)  = 0
		_Seed("Seed",Float) = 0
	}
	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 lpos:POSITION1;
				float4 uv:TEXCOORD0;
			};

			float _Frec;
			float _SPD;
			float _Seed;

			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;
			}

			sampler2D _MainTex;
			float4 frag(v2f i) :SV_Target {
				float ux = i.uv.x*_Frec;
				float fux = frac(ux);
				float id = trunc(ux);
				float t = trunc(_Time.y*_SPD);
				id += t;
				float yaid = trunc(id*1000)/1000;
				float ybid = trunc((id+1)*100000)/100000;
				float ya = rand(float2(yaid/1000,_Seed));
				float yb = rand(float2(ybid/1000,_Seed));
				if(i.uv.y <= lerp(ya,yb,fux)){
					return float4(0,0,0,1);
				}
				return float4(1,1,1,1);
			}
			ENDCG
		}//Pass
	}//SubShader
	FallBack "Diffuse"
}