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

рдФрд░ рдореИрдВ рддреБрд░рдВрдд рдЖрд░рдХреНрд╖рдг рдХрд░ рджреВрдВрдЧрд╛ - рдореБрдЭреЗ рд╢реЗрдбреНрд╕ рдХреА рдЧрд╣рд░реА рд╕рдордЭ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдкрд╛рдардХ рд╕реЗ рдФрд░ рднреА рдХрдо рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рд▓рд┐рдЦреВрдВрдЧрд╛ рдХрд┐ рдЖрдк shaders рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдпрд╛ рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдФрд░ рд╣рд╛рдБ, рдореИрдВ рдЖрдкрдХреЛ shaders рдХреЗ рдХрд╛рдо рдХреЗ рдмрд╣реБрдд рдЖрдзрд╛рд░реЛрдВ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ - рд╕реНрд╡рд╛рдЧрдд рд╣реИ!
рд╢реЗрдб рдХреНрдпрд╛ рд╣реИрдВ рдФрд░ рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ?
рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдПрдХ shader рдПрдХ рдЫреЛрдЯрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЯреЗрдХреНрд╕ (vertex shaders) рдХреЗ рд▓рд┐рдП рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рдкрд┐рдХреНрд╕реЗрд▓ (рдкрд┐рдХреНрд╕реЗрд▓ рдпрд╛ "рдлреНрд░реЗрдореЗрдВрдЯрд▓ shaders) рдХреЗ рд▓рд┐рдП рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ - рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рддреНрд░рд┐рдХреЛрдг рдкрд░ рдПрдХ рдмрдирд╛рд╡рдЯ рдЦреАрдВрдЪрдирд╛ рдПрдХ shader рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╢реЗрдбрд░ рдореЗрдВ, рдЗрд╕рдХрд╛ рд╢реАрд░реНрд╖ рднрд╛рдЧ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдХреЛрдиреЗ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд┐рдХреНрд╕реЗрд▓ рднрд╛рдЧ рд╕реАрдзреЗ рдмрдирд╛рд╡рдЯ рдХреЗ рдкрд┐рдХреНрд╕рд▓ рдХреЛ рдЦреАрдВрдЪрддрд╛ рд╣реИред рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП shader рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЯрд┐рдкреНрдкрдгреАред рдкреНрд░рддреНрдпреЗрдХ shader рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рджреЗрддрд╛ рд╣реИред рдХрд┐рд╕ рдкрд░, рдпрд╣ рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдЖрдзреБрдирд┐рдХ рдХрд╛рд░реНрдбреЛрдВ рдореЗрдВ, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╢реЗрдб рдереНрд░реЗрдбреНрд╕ рдЬреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдЬрдм рдПрдХ shader рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (0, 0) рдкрд░ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рджреВрд╕рд░реЗ рдЙрд╕реА рдХреНрд╖рдг рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (10, 10) рдкрд░ рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрдм (0, 1) рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╢реЗрдбрд░ рдХреЛ рдкрд┐рдХреНрд╕реЗрд▓ (0, 0) рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ (рдФрд░ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ)ред рдпрд╣ рдХреЗрд╡рд▓ рдореВрд▓ рдореВрд▓реНрдп рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдИ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХрдИ рд╢реЗрдбреНрд╕ рд▓рд┐рдЦрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрдЧреАред
рдПрдХрддрд╛ рдореЗрдВ, рдЖрдк рд╡рд┐рднрд┐рдиреНрди shader рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ CG рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ OpenGL рдФрд░ DirectX рджреЛрдиреЛрдВ рдореЗрдВ рдареАрдХ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╣рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реЗрдбреНрд╕ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЕрдм, рдЕрдЧрд▓реЗ рд╣реА рдкрд▓ - рдЫрд╡рд┐ рдХреЗ рдмрд╛рдж рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЬреЛ рдХрд┐ рд╣рдордиреЗ рдЬреЛ рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рд╣реИ рд╡рд╣ рдареАрдХ рд╣реИ) - рд╣рдореЗрдВ рдЦреБрдж рдХреЛ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдкреВрд░реЗ рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╢реЗрдбрд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рд░реЗрдВрдбрд░ рдХреЛ рдкрд╣рд▓реЗ рдмрдирд╛рд╡рдЯ рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдпрд╣ рдмрдирд╛рд╡рдЯ рд╕реНрдХреНрд░реАрди рдкрд░ рдЦреАрдВрдЪреА рдЬрд╛рдПрдЧреАред рдФрд░ рд╣рд╛рдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХрддрд╛ рдкреИрдХреЗрдЬ рдХреЗ рдкреНрд░реЛ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рддреЛ рдпреБрджреНрдз рдХреЗ рд▓рд┐рдП
рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдкреВрд░реЗ рдХреИрдорд░реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЗрдбрд░ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ shader рдмрдирд╛рдПрдВ (.shader рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓) рдФрд░ рдЗрд╕ рдбрд┐рд╕реНрдХ рдХреЛ рд╡рд╣рд╛рдВ рдХреЙрдкреА рдХрд░реЗрдВ:
Shader "Custom/CRTShader" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} } SubShader { Pass { ZTest Always Cull Off ZWrite Off Fog { Mode off } CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma fragmentoption ARB_precision_hint_fastest #include "UnityCG.cginc" #pragma target 3.0 struct v2f { float4 pos : POSITION; float2 uv : TEXCOORD0; }; uniform sampler2D _MainTex; v2f vert(appdata_img v) { v2f o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = MultiplyUV(UNITY_MATRIX_TEXTURE0, v.texcoord); return o; } half4 frag(v2f i): COLOR { half4 color = tex2D(_MainTex, i.uv); return color; } ENDCG } } FallBack "Diffuse" }
рдореИрдВ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реВрдВрдЧрд╛:
- рдЧреБрдг - рд╢реЗрдбрд░ рдХреЗ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ (рдмрд╛рд╣рд░ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░) рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдмрдирд╛рд╡рдЯ рд╣реИред
- рд╡рд░реНрдЯрд┐рдХрд▓ - рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░, рдлрд╝реНрд░реАрдЬрд╝ - рдкрд┐рдХреНрд╕реЗрд▓ (рдЦрд╝реБрд░рд╛рдХ)
- рд╕рдВрд░рдЪрдирд╛ v2f - рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рд╢реАрд░реНрд╖ рд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓ shaders рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
- рд╡рд░реНрджреА - 1 рд╕реЗ рдПрдХ рд╣реА рдкреИрд░рд╛рдореАрдЯрд░ (рдУрдВ) рдХреЛ shader рднрд╛рд╖рд╛ рд╕реЗ рдПрдХ рд▓рд┐рдВрдХ рдмрдирд╛рддрд╛ рд╣реИ
- рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдмрдирд╛рд╡рдЯ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдореИрдЯреНрд░рд┐рдХреНрд╕ рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИред рдЪрд▓реЛ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЬрд╛рджреВ рдХреЗ рд▓рд┐рдП рд▓реЗрддреЗ рд╣реИрдВ;)
- рдЙрд╕реА рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбрд░ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ ( рдЯреЗрдХреНрд╕ 2 рдбреА рдХрдорд╛рдВрдб) рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкрд░ рдмрдирд╛рд╡рдЯ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рд░рдВрдЧ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рд╢реЗрдбрд░ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЕрдХреНрд╕рд░ рдорд▓реНрдЯреАрдХреЛрдореНрдкреЛрдиреЗрдВрдЯ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 3 рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдпрд╛ 4 рд░рдВрдЧ рдШрдЯрдХред рдЙрдирдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝реНрд▓реЛрдЯ 2 (рдЬреИрд╕реЗ рджреЛ рдлрд╝реНрд▓реЛрдЯреНрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛) рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдВрдЯ 4, рдЬреИрд╕реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдШрдЯрдХреЛрдВ рдХреЛ рдмрд┐рдВрджреБ .x .y .z .w .r рдпрд╛ .r .g .b .a рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдмрд╕ рдереЛрдбрд╝рд╛ рд╕рд╛ рдмрдЪрд╛ рд╣реИред рд╣рдореЗрдВ рдХреИрдорд░реЗ рдХреЗ рд▓рд┐рдП рдПрдХ shader рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, C # рдореЗрдВ рдПрдХ рдФрд░ рдХрдВрдЯреНрд░реЛрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда using UnityEngine; [ExecuteInEditMode] [RequireComponent(typeof(Camera))] public class TVShader : MonoBehaviour { public Shader shader; private Material _material; protected Material material { get { if (_material == null) { _material = new Material(shader); _material.hideFlags = HideFlags.HideAndDontSave; } return _material; } } private void OnRenderImage(RenderTexture source, RenderTexture destination) { if (shader == null) return; Material mat = material; Graphics.Blit(source, destination, mat); } void OnDisable() { if (_material) { DestroyImmediate(_material); } } }
рдпрд╣ рдХреЗрд╡рд▓ рдХреИрдорд░реЗ рдкрд░ рдлреЗрдВрдХрдиреЗ рдФрд░ "shader" рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╣рдорд╛рд░реЗ shader рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
рдХреИрд╕реЗ рд╕рдордЭреЗрдВ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╕рд╛рдп рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? "
return color
" рд╕реЗ рдкрд╣рд▓реЗ shader рдореЗрдВ
color.r = 0;
рдЬреИрд╕рд╛ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ
color.r = 0;
рдФрд░ рдЕрдЧрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рд▓рд╛рд▓ рд░рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рддрд╕реНрд╡реАрд░ рдорд┐рд▓рддреА рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рд╢рд╛рджрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред
рдкреНрд░рднрд╛рд╡ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╣реЛ рд░рд╣реА рд╣реИред
рд╣рдо рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЙрд╕ рдкреНрд░рднрд╛рд╡ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдЬрдм рдЫрд╡рд┐ рдореЗрдВ рд░рдВрдЧ рдЖрд░рдЬреАрдмреА рдкрд┐рдХреНрд╕реЗрд▓ рд╣реЛрддреЗ рд╣реИрдВред рд╡рд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИред 3 рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ R, G рдФрд░ B рдШрдЯрдХ рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
рдХрд╛рд░реНрдп рд╕рдВрдЦреНрдпрд╛ 1 - рдкрд┐рдХреНрд╕реЗрд▓ shader рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдмрд┐рдВрджреБ рдХреЗ рд╕реНрдХреНрд░реАрди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдореЗрдВ рдХреБрдЫ рдЧрд┐рдирдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕ рдЪреАрдЬрд╝ рдХреЛ рдкрд┐рдХреНрд╕реЗрд▓ рдкрд░ рднреЗрдЬрдирд╛ рд╣реЛрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд░реНрдЯреЗрдХреНрд╕ рдФрд░ рдкрд┐рдХреНрд╕реЗрд▓
v2f
рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП,
v2f
рдирд┐рд░реНрдорд╛рдг рдХрд╛
v2f
рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрд┐рд▓рд╣рд╛рд▓ рджреЛ рдлрд╝реАрд▓реНрдб рд╣реИрдВ -
pos
рдФрд░
uv
ред рд╡рд╣рд╛рдВ рдЬреЛрдбрд╝реЗрдВ:
float4 scr_pos : TEXCOORD1;
рдФрд░ рд╡рд░реНрдЯреЗрдХрд░ shader рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рднреА рдЬреЛрдбрд╝реЗрдВ:
o.scr_pos = ComputeScreenPos(o.pos);
рдЕрдм рдкрд┐рдХреНрд╕реЗрд▓ shader рдореЗрдВ рд╣рдо рд╕реНрдХреНрд░реАрди рдХреЛ 0 (1 ... 1) рд╕реЗ рд╕реАрдорд╛ рдореЗрдВ рд╕рдордиреНрд╡рдпрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдкрд┐рдХреНрд╕рд▓ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рднреА рдмрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
float2 ps = i.scr_pos.xy *_ScreenParams.xy / i.scr_pos.w;
рд╣реБрд░реНрд░реЗ!
ps
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рдкрд┐рдХреНрд╕реЗрд▓ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реИрдВред рддрдм рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:
int pp = (int)ps.x % 3;
рд╣рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИ:

рджреЛ рдмрд┐рдВрджреБ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛрддреЗ рд╣реИрдВ - рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рднрд╛рд╡ рдмрд╣реБрдд рдордЬрдмреВрдд рдирд┐рдХрд▓рд╛, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЪрд┐рддреНрд░ рдЧрд╣рд░рд╛ рд╣реЛ рдЧрдпрд╛ред рднрдЧрд╡рд╛рди рдХрд╛ рд╢реБрдХреНрд░ рд╣реИ, рдкрд╣рд▓реЗ рдХреЛ рд╕рд╣реА рдХрд┐рдпрд╛, рджреВрд╕рд░реЗ рдХреЛ рднреА рд╕рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореИрдВ рдЖрд░ / рдЬреА / рдмреА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдЦреНрдд рдЕрд▓рдЧрд╛рд╡ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдмрд╕ рдПрдХ рдЕрд▓рдЧ рдЕрдиреБрдкрд╛рдд рдореЗрдВред рдпрд╣реА рд╣реИ, "рд▓рд╛рд▓" рдХреЙрд▓рдо рдореЗрдВ 100% рдЖрд░, рдФрд░ рд▓рдЧрднрдЧ 50% рдЬреА рдФрд░ рдмреАред рдФрд░ рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░ рдЕрдЧрд░ рд╣рдо рдЗрд╕ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░рд╛ рд░реВрдкрд╛рдВрддрд░рдг рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЧреБрдгрдХ рджреНрд╡рд╛рд░рд╛ рд░рдВрдЧ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЖрд░ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
float4(1, 0, 0, 1)
рджреНрд╡рд╛рд░рд╛
color
рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (4 рд╡рд╛рдВ рдШрдЯрдХ рдЕрд▓реНрдлрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ)ред рд╣рдо рдЧреБрдгрд╛рдВрдХ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рд▓рд╛рд▓ рд╕реНрддрдВрдн рдХреЛ (1, k1, k2, 1), рд╣рд░реЗ рд░рдВрдЧ рдХреЛ рдПрдХ (k2, 1, k1, 1) рдФрд░ рдиреАрд▓реЗ рд░рдВрдЧ рдХреЛ рдПрдХ (k1, k2, 1, 1) рд╕реЗ рдЧреБрдгрд╛ рдХрд░реЗрдВред
рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, shader рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝реЗрдВ:
_VertsColor("Verts fill color", Float) = 0 _VertsColor2("Verts fill color 2", Float) = 0
рдлрд┐рд░ рд▓рд┐рдВрдХ рд▓рд┐рдЦреЗрдВ:
uniform float _VertsColor; uniform float _VertsColor2;
рдЕрдм рдкрд┐рдХреНрд╕реЗрд▓ shader рдХреЛрдб рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд░рдВрдЧ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░реЗрдВ:
if (pp == 1) { muls.r = 1; muls.g = _VertsColor2; } else if (pp == 2) { muls.g = 1; muls.b = _VertsColor2; } else { muls.b = 1; muls.r = _VertsColor2; } color = color * muls;
рдпрд╣ рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдХрд┐ рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдПрдХрддрд╛ рдореЗрдВ рдХреИрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЖрдЗрдП рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ C # рдореЗрдВ рд▓рд┐рдЦреЗрдВ:
[Range(0, 1)] public float verts_force = 0.0f; [Range(0, 1)] public float verts_force_2 = 0.0f;
рдФрд░ OnRenderImage рдореЗрдердб рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╕реЗ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝реЗрдВред рдиреЛрдЯ:
mat.SetFloat("_VertsColor", 1-verts_force); mat.SetFloat("_VertsColor2", 1-verts_force_2);
рдпрд╣рд╛рдБ рдореИрдВ рдЗрд╕реЗ рдЕрдзрд┐рдХ рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП 1 рд╕реЗ рдШрдЯрд╛рддрд╛ рд╣реВрдБред рдкреИрд░рд╛рдореАрдЯрд░ рдЬрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛, рд╕реНрддрдВрдн рдХрд╛ рдЖрдХрд╛рд░ рдЙрддрдирд╛ рд╣реА рдордЬрдмреВрдд рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдЖрдкрдиреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдХреИрдорд░рд╛ рдЪреБрдирддреЗ рд╕рдордп рдпреВрдирд┐рдЯреА рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ, рдЖрдкрдХреЛ рд╕реНрд▓рд╛рдЗрдбрд░реНрд╕ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЕрдм рдкреНрд░рднрд╛рд╡ рджреЗрдЦреЗрдВ:

рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЪрдордХ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд╢реЗрдбрд░ рдореЗрдВ рдЪрдордХ рдФрд░ рдХрдВрдЯреНрд░рд╛рд╕реНрдЯ рд╕рдорд╛рдпреЛрдЬрди рдЬреЛрдбрд╝реЗрдВред
_Contrast("Contrast", Float) = 0 _Br("Brightness", Float) = 0 .... uniform float _Contrast; uniform float _Br; .... color += (_Br / 255); color = color - _Contrast * (color - 1.0) * color *(color - 0.5);
C # рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
[Range(-3, 20)] public float contrast = 0.0f; [Range(-200, 200)] public float brightness = 0.0f; ... mat.SetFloat("_Contrast", contrast); mat.SetFloat("_Br", brightness);
рдкрд░рд┐рдгрд╛рдо:

(рд╡рд┐рдкрд░реАрдд = 2.1, рдЪрдордХ = 27)
рдЕрдм рд╕реНрдХреИрдирд▓рд╛рдЗрди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд╣рд░ рддреАрд╕рд░реА рдкрдВрдХреНрддрд┐ рдХреЛ рдЧрд╣рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
if ((int)ps.y % 3 == 0) muls *= float4(_ScansColor, _ScansColor, _ScansColor, 1);

рдФрд░ рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ рдмреНрд▓реВрдо рдкреНрд░рднрд╛рд╡ рд╣реИред рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ shader рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдБ ред
рд╣реЛ рдЧрдпрд╛! рд▓реЗрдЦ рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рд╣рдореЗрдВ рдПрдХ рддрд╕реНрд╡реАрд░ рдорд┐рд▓рддреА рд╣реИ!

рд╣рд╛рдВ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ - рдпрд╣ рд╢реЗрдбрд░ рдЯреНрд░рд┐рдкрд▓ рдкрд┐рдХреНрд╕реЗрд▓ рдкрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╣реИред
UPD : рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк рдЗрд╕ рдкреВрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрдирд╛рд╡рдЯ рдХреЛ рджреВрд╕рд░реЗ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдХреЗ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдиреА рдмреИрдВрдб рдХреА рддреАрд╡реНрд░рддрд╛ рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдо рдмрдирд╛рд╡рдЯ-рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЧрддрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рддреЗрдЬ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд▓рдХреНрд╖реНрдп рдЗрд╖реНрдЯрддрдо shader рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдерд╛, рдмрд▓реНрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рджрд┐рдЦрд╛рдирд╛ рдерд╛ред
рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рднреА рд▓реЗрдЦ:- рд╡рд┐рдЪрд╛рд░, рджреГрд╖реНрдЯрд┐, рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рд╡рд┐рдХрд▓реНрдк, рдордВрдЪ, рд╡рд┐рддрд░рдг рдореЙрдбрд▓, рдЖрджрд┐ред
- CRT / LCD рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрд╕
- рд╣рдо рдПрдХрддрд╛ (UniLua) рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдЯрдХрдерд╛ рднрд╛рд╖рд╛ рдЙрдкрд╡рд╛рд╕
- рдкреИрд▓реЗрдЯ рджреНрд╡рд╛рд░рд╛ рдлреАрдХрд╛ рдХреЗ рд▓рд┐рдП рдЫрд╛рдпрд╛ (рдПрдХ рд▓рд╛ NES)
- рд╕рдмрдЯреЛрдЯрд▓ (рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк)
- рдЖрдЗрдП рдкреАрдЖрд░ рдЗрдВрдбреА рдЧреЗрдореНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ
- рдПрдХрддрд╛ рдореЗрдВ 2 рдбреА рдПрдирд┐рдореЗрд╢рди ("рдлреНрд▓реИрд╢ рдХреА рддрд░рд╣")
- рдПрдХрддрд╛ (рдХрдЯрдХ) рдореЗрдВ рдХрдЯ рджреГрд╢реНрдпреЛрдВ рдХреА рджреГрд╢реНрдп рдкрдЯрдХрдерд╛