【ShaderToy中图形效果转译到UnityShaderlab案例分享,实现七彩动画光圈_ColorfulCircle】

ShaderToy内的源码与效果图如下:

请添加图片描述

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
	vec2 p = (2.0*fragCoord.xy-iResolution.xy)/iResolution.y;
    float tau = 3.1415926535*2.0;
    float a = atan(p.x,p.y);
    float r = length(p)*0.75;
    vec2 uv = vec2(a/tau,r);
	
	//get the color
	float xCol = (uv.x - (iTime / 3.0)) * 3.0;
	xCol = mod(xCol, 3.0);
	vec3 horColour = vec3(0.25, 0.25, 0.25);
	
	if (xCol < 1.0) {
		
		horColour.r += 1.0 - xCol;
		horColour.g += xCol;
	}
	else if (xCol < 2.0) {
		
		xCol -= 1.0;
		horColour.g += 1.0 - xCol;
		horColour.b += xCol;
	}
	else {
		
		xCol -= 2.0;
		horColour.b += 1.0 - xCol;
		horColour.r += xCol;
	}

	// draw color beam
	uv = (2.0 * uv) - 1.0;
	float beamWidth = (0.7+0.5*cos(uv.x*10.0*tau*0.15*clamp(floor(5.0 + 10.0*cos(iTime)), 0.0, 10.0))) * abs(1.0 / (30.0 * uv.y));
	vec3 horBeam = vec3(beamWidth);
	fragColor = vec4((( horBeam) * horColour), 1.0);
}

下面是在Unity内的效果展示:

请添加图片描述

Shader"ShaderToy/ColorfulCircle"
{
	Properties
	{
	}
	SubShader
	{
		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#include "UnityCG.cginc"

			struct appdata
			{
				float4 vertex : POSITION;
				float2 uv : TEXCOORD0;
			};
			struct v2f
			{
				float2 uv : TEXCOORD0;
				float4 vertex : SV_POSITION;
				float4 screenCoord : TEXCOORD1;
			};

			v2f vert(appdata v)
			{
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex);
				o.uv = v.uv;
				o.screenCoord.xy = ComputeScreenPos(o.vertex);
				return o;
			}
			fixed4 frag(v2f i) : SV_Target
			{
				fixed2 p = (2.0*i.uv.xy-1)/1;
				fixed tau = 3.1415926535*2.0;
				fixed a = atan2(p.y,p.x);
				fixed r = length(p)*0.75;
				fixed2 uv = fixed2(a/tau,r);
				
				fixed xCol = (uv.x - (_Time.y / 3.0)) * 3.0;
				xCol = fmod(xCol, 3.0);
				fixed3 horColour = fixed3(0.25, 0.25, 0.25);
				if (xCol < 1.0)
                {
					horColour.r += 1.0 - xCol;
					horColour.g += xCol;
				}
				else if (xCol < 2.0)
                {
					xCol -= 1.0;
					horColour.g += 1.0 - xCol;
					horColour.b += xCol;
				}
				else
                {
					xCol -= 2.0;
					horColour.b += 1.0 - xCol;
					horColour.r += xCol;
				}
				uv = (2.0 * uv) - 1.0;
				fixed beamWidth = (0.7+0.5*cos(uv.x*10.0*tau*0.15*clamp(floor(5.0 + 10.0*cos(_Time.y)), 0.0, 10.0))) * abs(1.0 / (30.0 * uv.y));
				fixed3 horBeam = fixed3(beamWidth,beamWidth,beamWidth);
				return fixed4((( horBeam) * horColour), 1.0);
			}
			ENDCG
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴走约伯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值