完整代码
Shader"ShaderToy/Cave"
{
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 = (-1 + 2.0*i.uv)/1;
fixed a = atan2(p.x,p.y);
fixed r = pow( pow(p.x*p.x,4.0) + pow(p.y*p.y,4.0), 1.0/8.0 );
fixed2 uv = fixed2( 1.0/r + 0.2*_Time.y, a );
fixed f = cos(12.0*uv.x)*cos(6.0*uv.y);
fixed3 col = 0.5 + 0.5 * sin( 3.1416*f + fixed3(0.0,0.5,1.0) );
col = col*r;
return fixed4( col, 1.0 );
}
ENDCG
}
}
}
fixed2 p = (-1 + 2.0*i.uv)/1;

fixed a = atan2(p.x,p.y);

fixed r = pow( pow(p.x*p.x,4.0) + pow(p.y*p.y,4.0), 1.0/8.0 );

fixed f = cos(12.0*uv.x)*cos(6.0*uv.y);

cos(12.0*uv.x)

cos(6.0*uv.y)

fixed3 col = 0.5 + 0.5*sin( 3.1416*f + fixed3(0.0,0.5,1.0) );

最终效果:
