рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдерд░реНрдорд▓ рд╢реЗрдбрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ
рдпреВрдирд┐рдЯреА рдордВрдЪреЛрдВ рдореЗрдВ bgolus рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдПрдХ рдкрд░рд┐рдкрдХреНрд╡ shader рдореЗрдВ рдЖрдпрд╛ - рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБред
рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рдХреЛрдгреЛрдВ рдкрд░ рдореЙрдбрд▓ рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрд╣реБрдд рдмрджрд▓ рджрд┐рдпрд╛, рдЯреЛрдкреА рдХреЛ рдХреЛрдиреЗ рдФрд░ рдорд╛рдирджрдВрдбреЛрдВ рдкрд░ рдмрд╛рдВрдз рджрд┐рдпрд╛ред рдпрд╣реА рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЕрдм рдкрд░рд┐рдкрдХреНрд╡ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рд╢реЗрдбрд░ рдХреЛ рд╢реНрд░рджреНрдзрд╛рдВрдЬрд▓рд┐ рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд╣рд╛рдВ рд╕реЗ рдпрд╣ рд╕рдм рд╢реБрд░реВ рд╣реБрдЖред
рд╣рдо рдХреНрд░рдо рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ, рдкрд╣рд▓реЗ рд╢реАрд░реНрд╖ рд╕рдорд╛рд░реЛрд╣:
1. рд╡рд╕реНрддреБ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп:
float3 v.normal;
2. рд╢реАрд░реНрд╖ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐, рдореЙрдбрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ
float3 vertexN = normalize(v.vertex);
3. рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдЙрддреНрдкрд╛рдж:
float3 viewCross = cross(vertexN, v.normal);
4. рдПрдХ рдФрд░ рднреА рдкрд░рд┐рдгрд╛рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП crossproduct.xy рдФрд░ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреЛ рд╣рд▓ рдХрд░реЗрдВ
o.cap = viewCross.xy * 0.5 + 0.5;
рд╡рд┐рдЦрдВрдбрди рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ
5. рдПрдХ рдореБрдЦреМрдЯрд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЧреБрдгрд╛ рдХрд░реЗрдВ
fixed4 m = tex2D(_Mask, i.uv); i.cap *= (1 - mg);
6. рдкрд░рд┐рдгрд╛рдо рдкрд░ рд░рдВрдЧ рдмрдирд╛рд╡рдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░реЗрдВред (рдореИрдВ рдирд╛рд░рдВрдЧреА-рдмреИрдВрдЧрдиреА рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рдмрдбрд╝реЗ рдврд╛рд▓ рдпрд╛ рдХреБрдЫ рдФрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)
fixed4 color = tex2D(_Matcap, i.cap);
рдпрд╣реА рд╣реИ, рдерд░реНрдорд▓ рд╢реЗрдбрд░ рддреИрдпрд╛рд░ рд╣реИ; рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЕрдкрдирд╛ рд▓реЗрдмрд▓ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реЗрдЯ рдХрд░ рд╕рдХреЗ, рдЗрд╕рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд▓реЗрдмрд▓ рдореЗрдВ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИ:
Tags{ "ThermalVision" = "ThermalColors"}
рдпрд╣рд╛рдБ рдкреВрд░рд╛ shader рд╣реИ: Pastebin рд▓рд┐рдВрдХрд╢реЗрдбрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди
рддрд╛рдХрд┐ рдерд░реНрдорд▓ рд╢реЗрдбрд░ рджреВрд╕рд░реЗ рдХреА рдЬрдЧрд╣ рд▓реЗ рд╕рдХреЗ, рдЖрдкрдХреЛ рдмрд╕ рдЙрд╕реА рд▓реЗрдмрд▓ рдХреЛ рд╢реЗрдбрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
Tags{ "ThermalVision" = "ThermalColors"}
рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЧреБрдг рдмрджрд▓реА shader рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд╣реИрдВ:
_Mask("G = no thermal", 2D) = "black" {} _Matcap("Matcap", 2D) = "white" {} _Strength("Mask Strength", Range(0,2)) = 0.4
рд╢реЗрдбрд░ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рджреВрд╕рд░рд╛ рдХреИрдорд░рд╛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
camera.SetReplacementShader(Shader, "NamedShader");
ред
рдЗрд╕рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдХреИрдорд░рд╛ рдмрдирд╛рдПрдВ, рдФрд░ рдЗрд╕реЗ рдореБрдЦреНрдп рдХреИрдорд░реЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдПрдХ рдмрдЪреНрдЪрд╛ рдмрдирд╛рдПрдВ, рдФрд░ рдлрд┐рд░ рд╕реНрдерд┐рддрд┐ рдФрд░ рд░реЛрдЯреЗрд╢рди рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╡реЗ рдЙрд╕реА рддрд░рд╣ рд╕реНрдерд┐рдд рд╣реЛрдВред
рдЗрд╕реЗ рд╕реЙрд▓рд┐рдб рдХрд▓рд░ рдФрд░ рдПрдХ рдмреНрд▓реИрдХ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред
"рдХреИрдорд░рд╛ рдкреНрд░реАрд╡реНрдпреВ" рдореЗрдВ рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреИрдорд░реЗ рдХреА рддрд░рд╣ рд╣реА рд╕рдм рдХреБрдЫ рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреЗрд╡рд▓ рд╕реНрдХрд╛рдИрдмреЙрдХреНрд╕ рдХреЗ рдмрд┐рдирд╛, рдПрдХ рдХрд╛рд▓реА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд╕рд╛рдеред
рд╢реЗрдбреНрд╕ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ,
Shader
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЪрд░ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЙрд╕ рдкрд░ рдерд░реНрдорд▓ рдкреНрд░рднрд╛рд╡ shader рдЦреАрдВрдЪреЗрдВред
рдлрд┐рд░ рдХреИрдорд░реЗ рдХреЛ рдПрдХ рдирдП рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреЙрд▓ рдФрд░ рд▓реЗрдмрд▓ рдореЗрдВ рджрд┐рдП рдЧрдП рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреЙрд▓
SetReplacementShader
рдореЗрдВ
public Shader ThermalShader; Camera cam; void Start() { cam = GetComponent<Camera>(); cam.SetReplacementShader(ThermalShader, "ThermalVision"); }
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдмрджрд▓реЗ рд╣реБрдП рд╢реЗрдб рдХреЗ рд╕рд╛рде рдореЗрд╖реЛрдВ рдкрд░ рдерд░реНрдорд▓ рдкреНрд░рднрд╛рд╡ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЫрд╡рд┐ рдкреНрд░рднрд╛рд╡
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдерд░реНрдорд▓ рд╢реЗрдбрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдХреИрдорд░реЗ рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдУрдкреЗрдХ рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЗрдореЗрдЬ рдЗрдлреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдкреНрдерд░рдореЙрд░реНрдирд▓ рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдЗрдореЗрдЬ рдЗрдлрд╝реЗрдХреНрдЯ рд╢реЗрдбрд░: рдкрд╛рд╕реНрдЯрдмреАрди рдХрд╛ рд▓рд┐рдВрдХрдЗрд╕ рд╕рд╛рдзрд╛рд░рдг рдмреНрд▓рд┐рдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдерд░реНрдорд▓ рдХреИрдорд░рд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЫрд╛рдпрд╛ рдХреЛ рдЫрд╡рд┐ рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪреЗрдВ
рдореИрдВрдиреЗ рдерд░реНрдорд▓ рд╢реИрдбрд░ рдореЗрдВ рдЙрд╕реА рдЫрд╡рд┐ рдХреЛ рд░рдЦрд╛, рд▓реЗрдХрд┐рди рдЖрдк рджреВрд╕рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!
рдерд░реНрдорд▓ рд╡рд┐рдЬрди рд╕реНрд╡рд┐рдЪ рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдЕрдм рдмрд╕ рдЗрд╕реЗ рдЦреЗрд▓ рдХреЗ рджреМрд░рд╛рди рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВред
рдмреБрд▓рд┐рдпрди рдЪрд░ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдХреИрдорд░рд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдФрд░ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреА рдорд╛рддреНрд░рд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдЯреА рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рд╡рд╛рдкрд╕ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд┐рд░ рд╕реЗ рдЯреА рджрдмрд╛рдПрдВред
рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдерд░реНрдорд▓ рдЪреИрдореНрдмрд░ рдореЗрдВ рдереЛрдбрд╝рд╛ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВред рдореИрдВрдиреЗ рдХреНрд░реЛрдо рдПрдмреЗрд░реЗрд╢рди рдФрд░ рдбреЗрдкреНрде рдСрдл рдлреАрд▓реНрдб рдХреЛ рдЬреЛрдбрд╝рд╛ред
рдпрд╣рд╛рдВ рдерд░реНрдорд▓ рд╡рд┐рдЬрд╝рди рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ: рдкрд╛рд╕реНрдЯрдмреАрди рд▓рд┐рдВрдХ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ(рдкреАрдкреАрдПрд╕ 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдкреЛрд╕реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕реНрдЯреИрдХ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ)рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА
рдпрджрд┐ рдЖрдк рджреАрд╡рд╛рд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрдордХрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреИрдорд░реЗ рдХреЗ рд▓рд┐рдП, "рдареЛрд╕ рд░рдВрдЧ" рдХреЛ "рд╕рд╛рдлрд╝ рди рдХрд░реЗрдВ" рд╕реЗрдЯ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдХрд╛рдИрдмреЙрдХреНрд╕ рднреА рдХрд╛рд▓рд╛ рд╣реЛ рдЬрд╛рдП, рддреЛ рд╕реНрд╡рд┐рдЪ рдХреЛрдб рдореЗрдВ, рд╕реНрдХрд╛рдИрдмреЙрдХреНрд╕ рдордЯреАрд░рд┐рдпрд▓ рдХреЛ рдХреИрд╢ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ
Private Material SkyboxMaterial; skyboxMaterial = RenderSettings.skybox; RenderSettings.skybox = null;
рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд▓реМрдЯрд╛рдПрдВ рдЬрдм рдерд░реНрдорд▓ рдкреНрд░рднрд╛рд╡ рдмрдВрдж рд╣реЛ рдЬрд╛рдП:
RenderSettings.skybox = skyboxMaterial;
рдЕрдм рдпрд╣ рдЧреЗрдордкреНрд▓реЗ рдпрд╛рдВрддреНрд░рд┐рдХреА рдХреА рддрд░рд╣ рдХрдо рд╣реИ рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рджреГрд╢реНрдп рдкреНрд░рднрд╛рд╡ рдХреА рддрд░рд╣ рд╣реИред
рдпрджрд┐ рдЖрдк рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ
1. рдерд░реНрдорд▓ рдкреНрд░рднрд╛рд╡ shader рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
2. рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рддреВрди shader рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ shader рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
"ThermalVision" = "ThermalColors"
рдФрд░ рдЪрд░
_Matcap
,
_Mask
,
_Strength
ред
3. рдореБрдЦреНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрдЯреА, рджреВрд╕рд░рд╛ рдХреИрдорд░рд╛ рдмрдирд╛рдПрдВ, рдЗрд╕реЗ рд╕реЙрд▓рд┐рдб рдХрд▓рд░, рдмреНрд▓реИрдХ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ
4.
рдЫрд╡рд┐ рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде рдерд░реНрдорд▓ рд╢реЗрдбрд░ рд▓реЗрдВ, рдПрдХ рд╕рд╛рдордЧреНрд░реА рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЦреАрдВрдЪрдХрд░
рдерд░реНрдорд▓ рдХреИрдорд░реЗ рдХреЛ рджреВрд╕рд░реЗ рдХреИрдорд░реЗ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
5.
ThermalController
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ, рдерд░реНрдорд▓ рдкреНрд░рднрд╛рд╡ shader рдЦреАрдВрдЪреЗрдВ, рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ (рд╡реИрдХрд▓реНрдкрд┐рдХ) рдХреА рдорд╛рддреНрд░рд╛ рдЬреЛрдбрд╝реЗрдВ
6. рджреГрд╖реНрдЯрд┐ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
T
рджрдмрд╛рдПрдВред (рдХреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдПрдХ shader рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред
рд╕рд╛рдзрди
рдерд░реНрдорд▓ рд╢реЗрдбрд░ рдХреЛрдб: рдкрд╛рд╕реНрдЯрд┐рдмрд┐рди рд▓рд┐рдВрдХрдЯрд╛рдпрд░реЛрдВ рдХреА рдЬрдЧрд╣ рдЫрд╛рдпрд╛рдХрд╛рд░ рдХреЛрдб: рдкрд╛рд╕реНрдЯрдмреАрди рдХрд╛ рд▓рд┐рдВрдХрдЗрдореЗрдЬ рдЗрдлреЗрдХреНрдЯ рд╢реИрдбрд░ рдХреЛрдб: рдкрд╛рд╕реНрдЯрдмреАрди рдХрд╛ рд▓рд┐рдВрдХрд╕реА # рдмреНрд▓рд┐рдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ: рдкрд╛рд╕реНрдЯрд┐рдмрд┐рди рд▓рд┐рдВрдХрд╕реА # рдерд░реНрдорд▓ рд╡рд┐рдЬрди рд╕реНрд╡рд┐рдЪ рд╕реНрдХреНрд░рд┐рдкреНрдЯ: рдкрд╛рд╕реНрдЯрдмреАрди рд╕реЗ рд▓рд┐рдВрдХрддрд╕реНрд╡реАрд░реЗрдВ рдЦреАрдВрдЪреА рдЧрдИрдВ:
рдмрджрд▓реА shaders рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА:рдпрд╣ рдПрдХ рдкреБрд░рд╛рдирд╛ рд╡реАрдбрд┐рдпреЛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛:
рд╡реАрдбрд┐рдпреЛ рдСрди рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рд╢реЗрдбреНрд╕ рдЗрди рд╕реНрдЯрдл рдмрд╛рдпрд┐рдВрдЧ рдЧреБрдб рдЗрди рдпреВрдирд┐рдЯреА