рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдореЗрд░рд╛ рдирд╛рдо рдЧреНрд░рд┐рд╢рд╛ рд╣реИ рдФрд░ рдореИрдВ CGDevs рдХрд╛ рд╕рдВрд╕реНрдерд╛рдкрдХ рд╣реВрдВред рдЪрд▓реЛ рдЧрдгрд┐рдд рдпрд╛ рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред рд╢рд╛рдпрдж рдЦреЗрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдореЗрдВ рдЧрдгрд┐рдд рдХрд╛ рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡реАрдПрдлрдПрдХреНрд╕ рд╣реИред рддреЛ рдЖрдЗрдП рдПрдХ рдРрд╕реЗ рдкреНрд░рднрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ - рдмрд╛рд░рд┐рд╢, рдпрд╛ рдЗрд╕рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рддрд╣ рдкрд░ рдЧрдгрд┐рдд - рддрд░рдВрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рддрд╣ рдкрд░ рд▓рд╣рд░ рдХреЗ рд▓рд┐рдП рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдПрдХ рд╢реЗрдбрд░ рд▓рд┐рдЦреЗрдВ, рдФрд░ рдЗрд╕рдХреЗ рдЧрдгрд┐рдд рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред рдпрджрд┐ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ - рдмрд┐рд▓реНрд▓реА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рдЬреАрдердм рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд▓рдЧреНрдиред

рдЬреАрд╡рди рдореЗрдВ рдХрднреА-рдХрднреА рдРрд╕рд╛ рдХреНрд╖рдг рдЖрддрд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЯреИрдореНрдкреБрд░реАрди рдХреЛ рдкрдХрдбрд╝рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдмрд╛рд░рд┐рд╢ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡рд░реНрд╖рд╛ рдореЙрдбрд▓рд┐рдВрдЧ рдХрд╛ рд╡рд┐рд╖рдп рдмрд╣реБрдд рдЧрд╣рд░рд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕реЛрдВ рдкрд░ рдХрдИ рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВ, рдмреВрдВрджреЛрдВ рдХреЗ рдЧрд┐рд░рдиреЗ рд╕реЗ рдФрд░ рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рдкреНрд░рднрд╛рд╡ рдорд╛рддреНрд░рд╛ рдореЗрдВ рдмреВрдВрджреЛрдВ рдХреЗ рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдПред рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдкрд╣рд▓реВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ - рд╢реЗрдбрд░, рдЬреЛ рд╣рдореЗрдВ рдПрдХ рдЧрд┐рд░рд╛рдП рдЧрдП рдбреНрд░реЙрдк рд╕реЗ тАЛтАЛрддрд░рдВрдЧ рдХреЗ рд╕рдорд╛рди рдПрдХ рдкреНрд░рднрд╛рд╡ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдпрд╣ рдПрдХ рдирдЦрд░реЗ рдЙрдард╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ!
рдорда рдХреА рд▓рд╣рд░рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рд╕рд░реНрдЪ рдХрд░рдиреЗ рдкрд░ рдЖрдкрдХреЛ рд░рд┐рдкреНрдкрд▓ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдордЬреЗрджрд╛рд░ рдЧрдгрд┐рддреАрдп рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдорд┐рд▓рддреЗ рд╣реИрдВред рдЕрдХреНрд╕рд░ рд╡реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдФрдЪрд┐рддреНрдп рдХреЗ "рдЬрд╛рджреВ" рд╕рдВрдЦреНрдпрд╛рдУрдВ рдФрд░ рдЖрд╡рдзрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕ рдЖрд╢рдп рдХрд╛ рдЧрдгрд┐рдд рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред
рд╣рдореЗрдВ рдПрдХ рдЖрдпрд╛рдореА рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣рд╡рд╛рдИ рдЬрд╣рд╛рдЬ рдХреА рд▓рд╣рд░ рд╕рдореАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдереЛрдбрд╝рд╛ рдмрд╛рдж рдореЗрдВ рдлреНрд▓реИрдЯ рдФрд░ рдПрдХ-рдЖрдпрд╛рдореА рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреНрдпреЛрдВ рдХрд░реЗрдВрдЧреЗред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ
рдкреНрд▓реЗрди рд╡реЗрд╡ рд╕рдореАрдХрд░рдг рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдПрд░реЗрд╕реЙрд▓реНрдЯ = рдП * рдХреЙрд╕ (2 * рдкреАрдЖрдИ * (рдПрдХреНрд╕ / рд╡реЗрд╡рд▓реЗрдВрде - рдЯреА * рдлреНрд░реАрдХреНрд╡реЗрдВрд╕реА));рдЬрд╣рд╛рдВ:
рдПрд░реЗрд╕реЙрд▓реНрдЯ - рдмрд┐рдВрджреБ x рдкрд░ рдЖрдпрд╛рдо, рд╕рдордп рдЯреА рдкрд░
A рдЕрдзрд┐рдХрддрдо рдЖрдпрд╛рдо рд╣реИ
рддрд░рдВрдЧ рджреИрд░реНрдзреНрдп - wavelength
рдЖрд╡реГрддреНрддрд┐ - рддрд░рдВрдЧ рдЖрд╡реГрддреНрддрд┐
PI -
PI рд╕рдВрдЦреНрдпрд╛ = 3.14159 (рдлрд╝реНрд▓реЛрдЯ)
рд╢реЗрдбрд░рд╢рд╛рджрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рддреЗ рд╣реИрдВред рд╕рдордиреНрд╡рдп "-Z" рдХреЗ рд▓рд┐рдП "рд╢реАрд░реНрд╖" рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред рдпрд╣ рдпреВрдирд┐рдЯреА рдореЗрдВ 2 рдбреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд╢реЗрдб рдХреЛ рд╡рд╛рдИ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣реИ рдПрдХ рд╡реГрддреНрдд рдХрд╛ рд╕рдореАрдХрд░рдгред рд╣рдорд╛рд░реЗ shader рдХреА рд▓рд╣рд░ рдХреЗрдВрджреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдордорд┐рдд рд╣реЛрдЧреАред 2d рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реГрддреНрдд рдХрд╛ рд╕рдореАрдХрд░рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
r ^ 2 = x ^ 2 + y ^ 2рд╣рдореЗрдВ рдПрдХ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдореАрдХрд░рдг рд░реВрдк рд▓реЗрддрд╛ рд╣реИ:
r = sqrt (x ^ 2 + y ^ 2)рдФрд░ рдпрд╣ рд╣рдореЗрдВ рдЬрд╛рд▓ рдореЗрдВ рдмрд┐рдВрджреБ (0, 0) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдорд░реВрдкрддрд╛ рджреЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рд╡рд┐рдорд╛рди рдХреА рд▓рд╣рд░ рдХреЗ рдПрдХ рдЖрдпрд╛рдореА рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдм рдПрдХ shader рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдореИрдВ рдПрдХ shader рд▓рд┐рдЦрдиреЗ рдХреЗ рд╣рд░ рдЪрд░рдг рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдзрд╛рд░ рдХреЛ Unity рд╕реЗ Standard Surface Shader рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ Create-> Shader-> StandardSurfacehahader рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддрд░рдВрдЧ рд╕рдореАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЧреБрдг
рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ:
_Frequency ,
_WaveLength рдФрд░
_WaveHeight ред рд╕рдВрдкрддреНрддрд┐
_Timer (рдпрд╣ gpu рдХреЗ рд╕рд╛рде рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд┐рдХрд╛рд╕ рдФрд░ рдмрд╛рдж рдХреЗ рдПрдиреАрдореЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рд╣рдо рд╡реЗрд╡ рд╕рдореАрдХрд░рдг рдореЗрдВ рд╕рд░реНрдХрд▓ рд╕рдореАрдХрд░рдг рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдКрдВрдЪрд╛рдИ (рдЕрдм рдпрд╣ рдЬреЗрдб рд╕рдордиреНрд╡рдп рд╣реИ) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреЗрдЯрд╣рд╛рдЗрдЯ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ рд▓рд╣рд░ рд╕рдореАрдХрд░рдг рдФрд░ рд╕рд░реНрдХрд▓ рд╕рдореАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╢реЗрдбрд░ рд▓рд┐рдЦрдиреЗ рд╕реЗ, рд╣рдореЗрдВ рдпрд╣ рдкреНрд░рднрд╛рд╡ рдорд┐рд▓рддрд╛ рд╣реИред
рд╢реЗрдбрд░ рдХреЛрдбShader "CGDevs/Rain/RainRipple" { Properties { _WaveHeight("Wave Height", float) = 1 _WaveLength("Wave Length", float) = 1 _Frequency("Frequency", float) = 1 _Timer("Timer", Range(0,1)) = 0 _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0 _Metallic ("Metallic", Range(0,1)) = 0.0 } SubShader { Tags { "RenderType"= "Opaque" } LOD 200 CGPROGRAM #pragma surface surf Standard fullforwardshadows vertex:vert #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; }; half _Glossiness, _Metallic, _Frequency, _Timer, _WaveLength, _WaveHeight; fixed4 _Color; half getHeight(half x, half y) { const float PI = 3.14159; half rad = sqrt(x * x + y * y); half wavefunc = _WaveHeight * cos(2 * PI * (_Frequency * _Timer - rad / _WaveLength)); return wavefunc; } void vert (inout appdata_full v) { v.vertex.z -= getHeight(v.vertex.x, v.vertex.y); } void surf (Input IN, inout SurfaceOutputStandard o) { fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; o.Albedo = c.rgb; o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = _Color.a; } ENDCG } FallBack "Diffuse" }
рд▓рд╣рд░реЗрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдиреАрдореЗрд╢рди рдПрдХ рд╡рд┐рдорд╛рди рд╕реЗ рд╢реБрд░реВ рдФрд░ рд╕рдорд╛рдкреНрдд рд╣реЛред рд╕рд╛рдЗрди рдлрдВрдХреНрд╢рди рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдкрд╛рдк рджреНрд╡рд╛рд░рд╛ рдЖрдпрд╛рдо рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛ (_Timer * PI), рд╣рдореЗрдВ рддрд░рдВрдЧреЛрдВ рдХреА рдПрдХ рдЪрд┐рдХрдиреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдФрд░ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЪреВрдВрдХрд┐ _Timer 0 рд╕реЗ 1 рддрдХ рдорд╛рди рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рд╢реВрдиреНрдп рдкрд░ рдФрд░ PI рдореЗрдВ рд╕рд╛рдЗрди рд╢реВрдиреНрдп рд╣реИ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред
рдЬрдмрдХрд┐ рдЧрд┐рд░рддреА рд╣реБрдИ рдмреВрдВрдж рдХреА рддрд░рд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рддрд░рдВрдЧ рдКрд░реНрдЬрд╛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЦреЛ рдЬрд╛рддреА рд╣реИред _Radius рдЧреБрдг рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рдкреНрд░рднрд╛рд╡ рдХреА рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред рдФрд░ рд╣рдо рдХреНрд▓реИрдВрдк рдЖрдпрд╛рдо (_Radius - рд░реЗрдб, 0, 1) рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдЪреНрдЪрд╛рдИ рдХреА рддрд░рд╣ рдПрдХ рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдЦреИрд░, рдЕрдВрддрд┐рдо рдЪрд░рдгред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдмрд┐рдВрджреБ рдкрд░ рдЖрдпрд╛рдо 0.5 рдХреЗ рдмрд░рд╛рдмрд░ рд╕рдордп рдкрд░ рдЕрдкрдиреА рдЕрдзрд┐рдХрддрдо рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рддрдм рдореБрдЭреЗ рдЧрд┐рдирддреА рдХрд░рдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЖрд▓рд╕ рдорд╣рд╕реВрд╕ рд╣реБрдЖ, рдФрд░ рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл (1 - _Timer) рд╕рд╛рдЗрди рдХреЛ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╡рдХреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред

рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЧрдгрд┐рдд рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдпрд╣рд╛рдВ рдЖрдк рддрд░реНрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд╛рдВрдЫрд┐рдд рд╡рдХреНрд░ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрд┐рд╕ рд╕рдордп рдкрд░ рдПрдХ рдЪреЛрдЯреА рдФрд░ рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдкреНрд░рдХреНрд╖реЗрдк рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред
рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ shader рдФрд░ рдкреНрд░рднрд╛рд╡ рд╣реИред
рд╢реЗрдбрд░ рдХреЛрдб Shader "CGDevs/Rain/RainRipple" { Properties { _WaveHeight("Wave Height", float) = 1 _WaveLength("Wave Length", float) = 1 _Frequency("Frequency", float) = 1 _Radius("Radius", float) = 1 _Timer("Timer", Range(0,1)) = 0 _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0 _Metallic ("Metallic", Range(0,1)) = 0.0 } SubShader { Tags { "RenderType"= "Opaque" } LOD 200 CGPROGRAM #pragma surface surf Standard fullforwardshadows vertex:vert #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; }; half _Glossiness, _Metallic, _Frequency, _Timer, _WaveLength, _WaveHeight, _Radius; fixed4 _Color; half getHeight(half x, half y) { const float PI = 3.14159; half rad = sqrt(x * x + y * y); half wavefunc = _WaveHeight * sin(_Timer * PI) * (1 - _Timer) * clamp(_Radius - rad, 0, 1) * cos(2 * PI * (_Frequency * _Timer - rad / _WaveLength)); return wavefunc; } void vert (inout appdata_full v) { v.vertex.z -= getHeight(v.vertex.x, v.vertex.y); } void surf (Input IN, inout SurfaceOutputStandard o) { fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; o.Albedo = c.rgb; o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = _Color.a; } ENDCG } FallBack "Diffuse" }
рдореЗрд╖ рдореЗрд╖ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдереЛрдбрд╝рд╛ рд▓реМрдЯрдХрд░ред рд▓рд╣рд░реЛрдВ рдХреЛ рд╡рд░реНрдЯреЗрдХрд░ рд╢реЗрдбрд░ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрд╛рд▓реА рдХрд╛ рдЬрд╛рд▓ рдПрдХ рдмрдбрд╝реА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЧрддрд┐ рдХреА рдкреНрд░рдХреГрддрд┐ рдЬреНрдЮрд╛рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд╛рд░реНрдп рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЕрдВрддрд┐рдо рджреГрд╢реНрдп рдЧреНрд░рд┐рдб рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЕрдВрддрд░ рдЙрдЪреНрдЪ рдмрд╣реБрднреБрдЬрддрд╛ рдХреЗ рд╕рд╛рде рдорд╣рддреНрд╡рд╣реАрди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рдХрдо рдмрд╣реБрднреБрдЬ, рдмреЗрд╣рддрд░ред рдиреАрдЪреЗ рдЪрд┐рддреНрд░ рдЧреНрд░рд┐рдб рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓реНрд╕ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред
рд╕рд╣реА:
рдЧрд▓рдд:
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рджреЛ рдмрд╛рд░ рдХрдИ рдмрд╣реБрднреБрдЬреЛрдВ рдХреЗ рд╕рд╛рде, рджреВрд╕рд░рд╛ рдЬрд╛рд▓ рдЧрд▓рдд рджреГрд╢реНрдп рджреЗрддрд╛ рд╣реИ (рджреЛрдиреЛрдВ рдЬрд╛рд▓ рддреНрд░рд┐рднреБрдЬ.рдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рдмрд╕ рд╡рд┐рднрд┐рдиреНрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред
рдЕрдВрддрд┐рдо рджреГрд╢реНрдпрд╢реЗрдбрд░ рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдХреЗрдВрджреНрд░ рдореЗрдВ рд╕рдЦреНрддреА рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХрдИ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рддрд░рдВрдЧреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╣рд┐рд╕реНрд╕рд╛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рд╡рд┐рд╖рдп рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред
рдпрд╣рд╛рдБ shader рд╣реА рд╣реИ:
рдкреЛрд▓ рдХреЗ рд╕рд╛рде рд▓рд╣рд░ рд╢реАрд░реНрд╖ Shader "CGDevs/Rain/Ripple Vertex with Pole" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _Normal ("Bump Map", 2D) = "white" {} _Roughness ("Metallic", 2D) = "white" {} _Occlusion ("Occlusion", 2D) = "white" {} _PoleTexture("PoleTexture", 2D) = "white" {} _Color ("Color", Color) = (1,1,1,1) _Glossiness ("Smoothness", Range(0,1)) = 0 _WaveMaxHeight("Wave Max Height", float) = 1 _WaveMaxLength("Wave Length", float) = 1 _Frequency("Frequency", float) = 1 _Timer("Timer", Range(0,1)) = 0 } SubShader { Tags { "IgnoreProjector" = "True" "RenderType" = "Opaque"} LOD 200 CGPROGRAM #pragma surface surf Standard fullforwardshadows vertex:vert #pragma target 3.0 sampler2D _PoleTexture, _MainTex, _Normal, _Roughness, _Occlusion; half _Glossiness, _WaveMaxHeight, _Frequency, _Timer, _WaveMaxLength, _RefractionK; fixed4 _Color; struct Input { float2 uv_MainTex; }; half getHeight(half x, half y, half offetX, half offetY, half radius, half phase) { const float PI = 3.14159; half timer = _Timer + phase; half rad = sqrt((x - offetX) * (x - offetX) + (y - offetY) * (y - offetY)); half A = _WaveMaxHeight * sin(_Timer * PI) * (1 - _Timer) * (1 - timer) * radius; half wavefunc = cos(2 * PI * (_Frequency * timer - rad / _WaveMaxLength)); return A * wavefunc; } void vert (inout appdata_full v) { float4 poleParams = tex2Dlod (_PoleTexture, float4(v.texcoord.xy, 0, 0)); v.vertex.z += getHeight(v.vertex.x, v.vertex.y, (poleParams.r - 0.5) * 2, (poleParams.g - 0.5) * 2, poleParams.b , poleParams.a); } void surf (Input IN, inout SurfaceOutputStandard o) { o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb * _Color.rgb; o.Normal = UnpackNormal(tex2D(_Normal, IN.uv_MainTex)); o.Metallic = tex2D(_Roughness, IN.uv_MainTex).rgb; o.Occlusion = tex2D(_Occlusion, IN.uv_MainTex).rgb; o.Smoothness = _Glossiness; o.Alpha = _Color.a; } ENDCG } FallBack "Diffuse" }
рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред рд╕рдЪ рд╣реИ, рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЧрд┐рддреБрдм (рдПрдЪрдбреАрдЖрд░ рд╕реНрдХрд╛рдИрдмреЙрдХреНрд╕ рдФрд░ рдХрд╛рд░) рдХреА рд╡рдЬрди рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдерд╛ред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓реЗрдЦ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдФрд░ рдпрд╣ рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рддреНрд░рд┐рдХреЛрдгрдорд┐рддрд┐, рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдЬреНрдпрд╛рдорд┐рддрд┐ (рдШрдЯрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдм рдХреБрдЫ) рдФрд░ рдЕрдиреНрдп рдЧрдгрд┐рддреАрдп рд╡рд┐рд╖рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред