ما به موج کوچک تری نیاز داریم تا زیاد به چشم نیاید
می خواهیم قله و دره ها را مطابق این موج نوسان دهیم
می خواهیم قله و دره ها را مطابق این موج نوسان دهیم
خب الان شاید بگید چه فرقی کرد؟🙄
اینجا براتون بیشتر توضیح دادم:
https://www.desmos.com/calculator/nvtx7ckjji
اینجا براتون بیشتر توضیح دادم:
https://www.desmos.com/calculator/nvtx7ckjji
Desmos Graphing Calculator
Matrix
void mainImage(out vec4 o, vec2 p)
{
p.y /= iResolution.y;
p.y += tan(iTime + sin(.2 * p.x));
o = vec4(0., p.y, 0., 1.);
}
{
p.y /= iResolution.y;
p.y += tan(iTime + sin(.2 * p.x));
o = vec4(0., p.y, 0., 1.);
}
حالا یه تانژانتم اضافه می کنیم تا قله ها و دره های نا منظم تری داشته باشیم
و در نهایت برای اینکه خطوط از کمرنگ به پررنگ به صورت smooth بروند از تابع smoothstep استفاده می کنیم
(بنابر توصیه ی کتاب The Book of shader توی کدم از شرط استفاده نکردم به جاش smoothstep استفاده کردم پس همیشه سعی کنید از توابع بیلتین خود زبان شیدر نویسی استفاده کنید)
(بنابر توصیه ی کتاب The Book of shader توی کدم از شرط استفاده نکردم به جاش smoothstep استفاده کردم پس همیشه سعی کنید از توابع بیلتین خود زبان شیدر نویسی استفاده کنید)
void mainImage(out vec4 o, vec2 p)
{
p.y /= iResolution.y;
p.y += tan(iTime + tan(p.x) + sin(.2 * p.x));
o = vec4(0., smoothstep(p.y,p.y*5.0,0.5), 0., 1.);
}
{
p.y /= iResolution.y;
p.y += tan(iTime + tan(p.x) + sin(.2 * p.x));
o = vec4(0., smoothstep(p.y,p.y*5.0,0.5), 0., 1.);
}
Shader"ShaderMan/MyShader"{
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{
{
i.vertex.y /= _ScreenParams.y;
i.vertex.y += tan(_Time.y + tan(i.vertex.x) + sin(.2 * i.vertex.x));
return fixed4(0., .3 + (i.vertex.y < 0. ? 0. : 1. - i.vertex.y * 3.), 0., 1.);
}
}ENDCG
}
}
}
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{
{
i.vertex.y /= _ScreenParams.y;
i.vertex.y += tan(_Time.y + tan(i.vertex.x) + sin(.2 * i.vertex.x));
return fixed4(0., .3 + (i.vertex.y < 0. ? 0. : 1. - i.vertex.y * 3.), 0., 1.);
}
}ENDCG
}
}
}