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

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

shader ジュリア集合 2D

 

Shader "Custom/Ray7" {
	Properties{
		_MainTex("MainTex",2D) = "white"{}
		_Loop("Loop",Int) = 5
		_Size("Size",Range(0,1)) = 0
		_Free("Free",Float) = 1
		_Free2("Free2",Float) = 1
	}
	SubShader{
		Tags{"RenderType"="Opaque" "Queue" = "Geometry"}
		//透明部分のあるテクスチャを使う場合
		//Tags{"Queue" = "Transparent" "RenderType" = "Transparent"}
		//Blend SrcAlpha OneMinusSrcAlpha

		Pass{
			Cull Back
			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;
			};

			float _Size;
			float _Free;
			float _Free2;

			v2f vert(appdata v){
				v2f o;
				o.pos = UnityObjectToClipPos(v.vertex);
        //o.pos = float4(v.vertex.xy*2.0,1,1);
				o.uv = v.uv;
				return o;
			}

			// HSV カラー生成関数
			float3 hsv(float h, float s, float v){
			    float4 t = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
			    float3 p = abs(frac(float3(h,h,h) + t.xyz) * 6.0 - float3(t.w,t.w,t.w));
			    return v * lerp(float3(t.x,t.x,t.x), clamp(p - float3(t.x,t.x,t.x), 0.0, 1.0), s);
			}


			float4 frag(v2f i) :SV_Target {
				float2 p = ((i.uv * _ScreenParams.xy) - 0.5 * _ScreenParams.xy) / _ScreenParams.y;

				int j = 0;
		   	float2 x = float2(-0.345, 0.654);
		    float2 y = float2(_Time.y * 0.005, 0.0);
		    float2 z = abs(p);
		    for(int i = 0; i < 360; i++){
		        j++;
		        if(length(z) > 2.0) break;
		        z = float2(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y) + x + y;
		    }
				if(j <= _Free2) clip(-1);
		    float h = abs(fmod(_Time.y * 15 - float(j), 360.0) / 360.0);;
				//float h = abs(fmod(_Time.w * _Free - float(j), 360.0) / 360.0);;
		    float3 rgb = hsv(h, 1.0, 1.0);
				return float4(rgb, 1.0);
			}
			ENDCG
		}//Pass
	}//SubShader
	FallBack "Diffuse"
}