рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ рдХрд╕реНрдЯрдо рдлрд╝рд┐рд▓реНрдЯрд░

рдХрд╕реНрдЯрдо рд╕реАрдПрд╕рдПрд╕ рдлрд┐рд▓реНрдЯрд░ ( рд╕реА ustom рд╕реА рдЖрд░реЛрд╣реА рдПрд╕ tyle рдПрд╕ рдКрдБрдЪреА рдПрдбрд╝реА рдХреЗ рдЬреВрддреЗ рдЖрдИ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ)



рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐


рдХрд╕реНрдЯрдо рд╕реАрдПрд╕рдПрд╕ рдлрд┐рд▓реНрдЯрд░ (рдЗрд╕рдХреЗ рдмрд╛рдж CCSSF) (рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ CSS shaders рдХреЗ рдирд╛рдо рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛) рдПрдХ рдирдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдлреАрдЪрд░ рд╣реИ рдЬреЛ HTML рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдХреЗ рддрддреНрд╡реЛрдВ рдкрд░ рд╣рд╛рде рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╡рд┐рдЬреБрдЕрд▓ рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдХрд╕реНрдЯрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдкреНрд░рднрд╛рд╡ 1.0 рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред рд╡реЗ рдЗрд╕ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдХреЛ рдкреВрд░рдХ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╕реАрдПрд╕рдПрд╕ рдлрд┐рд▓реНрдЯрд░ (рдзрдмреНрдмрд╛, рд╕реАрдкрд┐рдпрд╛, рдХрдВрдЯреНрд░рд╛рд╕реНрдЯ, рдЧреНрд░реЗрд╕реНрдХреЗрд▓) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЗрдирд▓рд╛рдЗрди рд╕реАрдПрд╕рдПрд╕ рдлрд┐рд▓реНрдЯрд░

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

рдЫрд╡рд┐

(рдЖрдк рдЪрд┐рддреНрд░реЛрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реАрдПрд╕рдПрд╕ рдлрд┐рд▓реНрдЯрд░ рдХреНрд░реЛрдо рдХреЗ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)

рдХрд╕реНрдЯрдо рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд┐рд▓реНрдЯрд░

рджреВрд╕рд░реА рдУрд░, рдХрд╕реНрдЯрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдЖрдкрдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рднрд╛рд╡ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рди рдХреЗрд╡рд▓ рдкреНрд░рднрд╛рд╡ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╢реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдкреНрд░рднрд╛рд╡ рдХрд╛ рд╕рд╛рд░ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдпрд╣ рдирдХреНрд╢рд╛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдирд╛рд╡рдЯ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рдерд╛:

рдЫрд╡рд┐
рдЫрд╡рд┐


(рдЖрдк рддрд╕реНрд╡реАрд░реЛрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рд╕реАрдПрд╕рдПрд╕ рдлрд┐рд▓реНрдЯрд░ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рджреЗрдЦреЗрдВ)

рдирд┐рд░реНрдорд┐рдд рдлрд┐рд▓реНрдЯрд░ рдореЗрдВ рдХрд╕реНрдЯрдо рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рджреБрд░реНрдЧрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рд╡реЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд▓реНрдкрдирд╛ рдХреА рдЧрдИ рдереАред
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдмрд┐рд▓реНрдЯ-рдЗрди рдлрд╝рд┐рд▓реНрдЯрд░ рдкрд┐рдХреНрд╕рд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ DOM рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдзреБрдВрдзрд▓рд╛ ( рдХрд╕реНрдЯрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдЕрдиреБрднрд╛рдЧ рдХреА рд╕реАрдорд╛ рдореЗрдВ рджреЗрдЦреЗрдВ)ред

рд╢реЗрдб рдХреНрдпрд╛ рд╣реИрдВ?


рдХрд╕реНрдЯрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдкреНрд░рднрд╛рд╡ рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╢реЗрдбреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╢реЗрдб 3 рдбреА рдЖрдХрд╛рд░ рдФрд░ рдЧреНрд░рд╛рдлрд┐рдХ рддрддреНрд╡реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рд╢реЗрдб рдкреЙрд▓реАрдЧреЛрдирд▓ рдЧреНрд░рд┐рдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ)ред
рд╢реЗрдбрд░реНрд╕ рд╕реАрдзреЗ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдХреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рд╕реАрдкреАрдпреВ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрдХреНрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрддрд┐рд░реЗрдХ рд╣реЛрддрд╛ рд╣реИред
CCSSFs GLSL рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реЗрдбрд░реНрд╕ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк рдЧреНрд░рд╛рдлрд╝рд┐рдХреНрд╕ рд╢реЗрдбреНрд╕ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ рдЬреЛ shader рднрд╛рд╖рд╛рдУрдВ ( OpenGL , OpenGL ES , WebGL , DirectX ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реИ - рдХрд╕реНрдЯрдо CSS рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢реЗрдб рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рд╢реЗрдбрд░ рдкреНрд░рдХрд╛рд░

CCSSF рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢реЗрдб рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ: рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбреНрд╕ (рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░) рдФрд░ рдЯреБрдХрдбрд╝рд╛ рд╢реЗрдбреНрд╕ (рдлреНрд░реИрдЧрдореЗрдВрдЯ рд╢реЗрдбрд░) (рдЗрдиреНрд╣реЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рд╢реЗрдбреНрд╕ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбреНрд╕ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдерд┐рдд рд╣реИред рд╡реЗ рдЖрдкрдХреЛ 3 рдбреА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдЧреНрд░рд┐рдб рдХреЗ рдХреЛрдиреЗ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ, рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╡рд┐рдХреГрдд рдХрд░рдиреЗ рдФрд░ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рддрд╣ рдХреИрд╕реЗ рджрд┐рдЦрддреА рд╣реИред рд╡реЗ рдЖрдкрдХреЛ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдпрд╛ рдореМрдЬреВрджрд╛ рдкрд┐рдХреНрд╕реЗрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡реИрдз GPU рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рд╢реЗрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд╕реНрдЯрдо рд╕реАрдПрд╕рдПрд╕ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП, рдЗрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд▓рд╛рдкрддрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд╛рд╕-рдереНрд░реВ рд╢реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдХрд╕реНрдЯрдо CSS рдлрд╝рд┐рд▓реНрдЯрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ?


рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрд╡рдпрдВ рдЕрдм рдЧреНрд░рд╛рдлрд┐рдХ рддреНрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
HTML рдкреГрд╖реНрда рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ DOM рддрддреНрд╡реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдмрдирд╛рд╡рдЯ рд╡рд╛рд▓реЗ рдЖрдпрддреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдХрд╕реНрдЯрдо рд╕реАрдПрд╕рдПрд╕ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде, рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдЪрд┐рдкрдХреЗ рд░рд╣рддреЗ рд╣реИрдВ рд╕реВрдЪрдирд╛ рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рд╕реНрдХреНрд░реАрди рдкрд░ рдЖрд░реЗрдЦрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрди рдЖрдпрддреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рд╕реНрд╡рд░реВрдк рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рд╕реАрдПрд╕рдПрд╕ 3 рдбреА рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЗрд╕рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдбреЛрдо рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдХреЛрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд╛рдордЧреНрд░реА рдЧреНрд░рд┐рдб

CCSSF рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ DOM рддрддреНрд╡ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдореЛрдЬрд╝реЗрдХ рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд░рд┐рдХреЛрдгреАрдп рдЧреНрд░рд┐рдб рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛:
<img sr = " cs317217.userapi.com/v317217705/37a5/ghtCCVl9SeM.jpg " alt = "image" />
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рджрдХ - рдореБрдЭреЗ svg рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд╛рд▓рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓рд┐рдпрд╛

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЧреНрд░рд┐рдб рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рддреНрд░рд┐рдХреЛрдг рд╣реЛрддреЗ рд╣реИрдВ (рдЖрдпрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХ)ред
рдЗрд╕ рдЧреНрд░рд┐рдб рдХреЛ DOM рдПрд▓рд┐рдореЗрдВрдЯ (рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рддреИрдпрд╛рд░ рд╣реЛрддрд╛ рд╣реИ) рдХреЗ рдХрдВрдЯреЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдХреНрд╕рдЪрд░ рдорд┐рд▓реЗрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЙрд╕ рдкрд░ рдЖрдкрдХреЗ рдХрд╕реНрдЯрдо рд╢реЗрдбреНрд╕ рд▓рд╛рдЧреВ рд╣реЛрдВрдЧреЗред

рдЧреНрд░рд┐рдб рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА

рддреНрд░рд┐рдХреЛрдг рдХрд╛ рдПрдХ рдЬрд╛рд▓ рджреЛ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╕реАрдПрд╕рдПрд╕ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд):
  1. рд╕рдВрд▓рдЧреНрди рддреНрд░рд┐рдХреЛрдг
  2. рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рддреНрд░рд┐рдХреЛрдг


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

рдЫрд╛рдпрд╛рджрд╛рд░ рдЗрдирдкреБрдЯ

рд╡рд░реНрдЯреЗрдХреНрд╕ рдФрд░ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
  1. рдкреНрд░рдкрддреНрд░ (рд╡рд░реНрджреА)
  2. рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ (рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ)
  3. рдЕрдВрддрд░ (рднрд┐рдиреНрдирддрд╛)


рдЖрдХрд╛рд░ рдЧреНрд░рд┐рдб рдХреЗ рд╕рднреА рдХреЛрдиреЗ рдФрд░ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдорд╛рди рд╡рд╛рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд░рдВрдЧ)ред
рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдХреЛрдиреЗ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЬрд╛рд▓ рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЛ рдЕрдкрдирд╛ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реАрд░реНрд╖ рд╕реНрдерд┐рддрд┐)ред
рдЕрдВрддрд░ рд╡реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд▓рдВрдмрд╡рдд рд╕реЗ рдЯреБрдХрдбрд╝реЛрдВ рддрдХ рд╣реЛрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдЕрдВрджрд░ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдорд╛рди GPU (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛) рдХреЛ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдлрд╝рд┐рд▓реНрдЯрд░ рдкреНрд░рднрд╛рд╡ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдирдкреБрдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: рдмрдирд╛рд╡рдЯ ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реЗ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ (рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдЪреБрдкрдЪрд╛рдк shaders рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛)ред
рдмреНрд░рд╛рдЙрдЬрд░ рдХреБрдЫ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд╕реНрдЯрдо рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред
attribute vec4 a_position; attribute vec2 a_texCoord; attribute vec2 a_meshCoord; attribute vec3 a_triangleCoord; 

рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЖрдкрдХреЛ рдЧреНрд░рд┐рдб рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЛрдиреЗ рдФрд░ рддреНрд░рд┐рдХреЛрдгреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдФрд░ рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред
 uniform mat4 u_projectionMatrix; uniform vec2 u_textureSize; uniform vec4 u_meshBox; uniform vec2 u_tileSize; uniform vec2 u_meshSize; 

рдПрдВрдмреЗрдбреЗрдб рдлреЙрд░реНрдо рдкреВрд░реЗ рдЧреНрд░рд┐рдб рдХреЗ рд▓рд┐рдП DOM рддрддреНрд╡ рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
 varying vec2 v_texCoord; 

рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рднрд┐рдиреНрдирддрд╛ рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рдпрджрд┐ рдкреНрд░рднрд╛рд╡ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдЯреАрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдкреНрд░рднрд╛рд╡ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ ( рдЧреБрдг , рдЖрдХрд╛рд░ , рдЕрдВрддрд░ ) рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред

рд╕рд╛рд╡рдзрд╛рдиреА : рдлрд┐рд▓рд╣рд╛рд▓, рдЗрд╕ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд╕реЗ рд╕рднреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, u_textureSize рдФрд░ u_meshSize рдлрд╝реЙрд░реНрдо рдЧрд╛рдпрдм рд╣реИрдВ ред рдЖрдк рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, v_texCoord рдЕрдВрддрд░ рдЕрднреА рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдмрдирд╛рд╡рдЯ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ a_texCoord рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ vertex shader рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЕрдВрддрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЖрдк WebKit "рдорд╛рд╕реНрдЯрд░" рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд╕реНрдЯрдо CSS рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдкреНрд░рдЧрддрд┐ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд╕реАрдПрд╕рдПрд╕ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд░реВрдкреЛрдВ рдХрд╛ рднреА рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

 .shaded { -webkit-filter: custom(url(distort.vs) mix(url(tint.fs) normal source-atop), distortAmount 0.5, lightVector 1.0 1.0 0.0); } 


 //  (  ) ... uniform float distortAmount; uniform vec3 lightVector; ... 


рдпрд╣ рд╕рдм рдЖрдкрдХреЛ рдмрд╛рд╣рд░ рд╕реЗ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реАрдПрд╕рдПрд╕ рд╕рдВрдХреНрд░рдордг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрдВрдЯрд░рдкреЛрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рд╛рд╡рдзрд╛рдиреА : рд░реВрдкреЛрдВ рдФрд░ рдЕрдВрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╕реНрд▓реЙрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рд╣реИ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬреАрдкреАрдпреВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ (рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕реАрдПрд╕рдПрд╕ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ)ред

рдпрд╣рд╛рдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ WebGL рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХрд┐рддрдиреЗ shader рдкреИрд░рд╛рдореАрдЯрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ (рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЧрдП рдирдВрдмрд░ CCSSF рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП; рдХреБрдЫ рд╕реНрд▓реЙрдЯ рдмрд┐рд▓реНрдЯ-рдЗрди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ)ред

рдореЗрд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдХрд╕реНрдЯрдо рд╕реАрдПрд╕рдПрд╕ рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ?


CCSSF рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреНрдп рд╕реАрдПрд╕рдПрд╕ рд╢реИрд▓рд┐рдпреЛрдВ рдХреА рддрд░рд╣ рд╣реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 <style> .shader { -webkit-filter: custom(url(shaders/crumple.vs) mix(url(shaders/crumple.fs) normal source-atop), 50 50, amount 0, strength 0.2, lightIntensity 1.05); } </style> 

рдпрд╛ рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдЯреБрдХрдбрд╝рд╛ shader рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
 <style> .shader { -webkit-filter: custom(none mix(url(shaders/tint.fs) normal source-atop), amount 0); } </style> 

рдЗрд╕реА рддрд░рд╣, рдЯреБрдХрдбрд╝рд╛ shader рдХреЗ рдмрдЬрд╛рдп рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ (рдЕрднреА рдХреЗ рд▓рд┐рдП)ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рдорд╛рдзрд╛рди рдПрдХ рдЦрд╛рд▓реА рдЯреБрдХрдбрд╝рд╛ shader рд╕реНрдерд╛рдирд╛рдкрдиреНрди рд╣реИред
рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ GLSL рд╢реЗрдбреНрд╕ рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рд▓рд┐рдВрдХ рджреЗрддреЗ рд╣реИрдВ рдФрд░ CSS рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдирдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрд╛рдпрдиреЗрд░реА рдореЗрдВ рд╢реЗрдбреНрд╕ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ HTML рд╕рд╛рдордЧреНрд░реА рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ред

рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢реЗрдб рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ HTML рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ - рдЖрдк рдмрд╕ рдЙрдирдХреЗ рд╕рд╛рде рдирд┐рдпрдорд┐рдд рд╕реАрдПрд╕рдПрд╕ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
 <div class="shader"> 

рдЖрдк рдХрд╕реНрдЯрдо рд╕реАрдПрд╕рдПрд╕ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рд╕реАрдПрд╕рдПрд╕ рдмрджрд▓рд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдк рдХрд┐рд╕реА рдкреГрд╖реНрда рддрддреНрд╡ рдкрд░ рд╣реЛрд╡рд░ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
 -webkit-transition: -webkit-filter ease-in-out 1s; 

CCSSF рдорд╛рдирдХреЛрдВ рдХреЛ рдЗрдирд▓рд╛рдЗрди рд╕реАрдПрд╕рдПрд╕ рдЧреБрдгреЛрдВ рдХреЗ рд╕рдорд╛рди рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ CCSSF?


рд╕рд╛рд╡рдзрд╛рдиреА : рдпрд╣ рддрдХрдиреАрдХ рдмрд╣реБрдд рдирдИ рд╣реИ рдФрд░ рдЗрд╕реЗ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рд╡рд░рдг рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдмрдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдкреЛрд╕реНрдЯ рд╕рд┐рддрдВрдмрд░ 2012 рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдпрджрд┐ рддрдм рд╕реЗ рдХреБрдЫ рд╡рд░реНрдгрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рдЯреАрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ Google рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдХрд╕реНрдЯрдо рд╕реАрдПрд╕рдПрд╕ рдлрд┐рд▓реНрдЯрд░ рдХреНрд░реЛрдо рдХреИрдирд░реА рдХреЗ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ (рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдиреЗ рдХреЗ рд╕рдордп рд╕рдЯреАрдХ рд╕рдВрд╕реНрдХрд░рдг 24.0.1278.0 рд╣реИ)ред
рдпрд╣рд╛рдБ рдХреНрд░реЛрдо рдХреИрдирд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:
рдЫрд╡рд┐
tools.google.com/dlpage/chromesxs

CCSSF рдХреЛ рд╡рд┐рдВрдбреЛрдЬ рдФрд░ OSX рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдореИрдВ рд╡рд┐рдВрдбреЛрдЬ 7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)ред

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдкрдХрд╛ рдУрдПрд╕ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдПрдХ рдкреБрд░рд╛рдиреЗ рдпрд╛ рдХрдордЬреЛрд░ GPU рдпрд╛ рдЕрдиреБрдкрдпреБрдХреНрдд рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдореЗрдВ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ (рд╕рд┐рд╕реНрдЯрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдпрд╣рд╛рдВ рд╕рдВрдХреЗрддрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВ - WebGL рд╕рдВрдЧрддрддрд╛ рдЬрд╛рдВрдЪ )
рдХрд╕реНрдЯрдо рд╕реАрдПрд╕рдПрд╕ рдлрд┐рд▓реНрдЯрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреНрд░реЛрдо рдХреЛ рдЗрд╕ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдХрдВрд╕реЛрд▓ рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
 chrome --enable-css-shaders 

рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдХреНрд░реЛрдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕реАрдПрд╕рдПрд╕ рд╢реЗрдбреНрд╕ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдХреНрд░реЛрдо рдХреИрдирд░реА рдХрд╛ рд╢реЙрд░реНрдЯрдХрдЯ рдмрдирд╛рдирд╛ рдФрд░ рд▓рдХреНрд╖реНрдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ --enable-css-shaders рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИред
рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЙрдкрд░реЛрдХреНрдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдПрдХ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рд╣реИред

рдХреНрд░реЛрдо рдХреИрдирд░реА рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдзреНрд╡рдЬ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рдЯреИрдм рдореЗрдВ "рдЭрдВрдбреЗ" ("рд╕реАрдПрд╕рдПрд╕ рджрд╛рдПрдВ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ" рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ):
 chrome://flags/ 


рдХреИрд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ CCSSF рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ?


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦреЗрдВред

рдпрджрд┐ рдЖрдк рдЧреЛрд▓рд╛рдХрд╛рд░ рдЧреНрд░рд╣ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдмрдзрд╛рдИ, рд╡реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ;)ред

рдЫрд╡рд┐

рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдЖрдпрддрд╛рдХрд╛рд░ рдЪрд┐рддреНрд░ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ?
рдЫрд╡рд┐

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдкрд╛рдП рдЧрдП рдереЗ рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдЯреВрдЯ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдордИ 2012 рд╕реЗ рд╢реБрд░реБрдЖрддреА рдХреНрд░реЛрдорд┐рдпрдо рдХрд╕реНрдЯрдо рдмрд┐рд▓реНрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рднрд╛рд╡ рдирд╡реАрдирддрдо рдХреНрд░реЛрдо рдХреИрдирд░реА рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рд╕рд╛рд╡рдзрд╛рдиреА : рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдм рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ CCSSF рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдкрд░ рд╡реЗ рдкрд╣рд▓реЗ рд╣реА рдЯреВрдЯ рдЬрд╛рддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдкреГрд╖реНрда рдкрд░ рдПрдХ рд╣реА рдкреГрд╖реНрда рдкрд░ рдкреБрдирдГ рд▓реЛрдб рдпрд╛ рдЪрдХреНрд░реАрдп рд╕рдВрдХреНрд░рдордг рдХреЗ рджреМрд░рд╛рди рднреАред

рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ:
  1. рдкреБрдирдГ рд▓реЛрдб рдХрд░реЗрдВ рдкреГрд╖реНрда
  2. рдЯреИрдм рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рдкреГрд╖реНрда рдХреЛ рдПрдХ рдирдП рдЯреИрдм рдореЗрдВ рдЦреЛрд▓реЗрдВ
  3. рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ

рдПрдХ рдЯреИрдм рдореЗрдВ рдЯреВрдЯрдиреЗ рд╡рд╛рд▓реЗ рд╢реЗрдбреНрд╕ рдЕрдиреНрдп рд╕рднреА рдЯреИрдм рдореЗрдВ рд╢реЗрдбрд░реНрд╕ рдХреЛ рдорд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдкреЗрдЬ рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рднреА рд╢реЗрдбреНрд╕ рдЯреВрдЯреЗ рд░рд╣реЗрдВрдЧреЗ)ред

рдкрд╣рд▓реЗ рдкреГрд╖реНрда рд▓реЛрдб рдХреЗ рджреМрд░рд╛рди, рд╢реЗрдб рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП DOM рддрддреНрд╡реЛрдВ рдкрд░ рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЯреИрдм рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ, рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреАред


рдХрд╕реНрдЯрдо рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реАрдорд╛рдПрдБ


рд╕рд╛рдордЧреНрд░реА рдкрд╣реБрдВрдЪ

CCSSF рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢реЗрдбреНрд╕ DOM рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрдирд╛рд╡рдЯ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕реАрдзреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдирд╣реАрдВ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ ред
рдпреЗ рдкреНрд░рддрд┐рдмрдВрдз рд╕рдордп рдХреЗ рд╣рдорд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реБрдП , рдЬрдм рд╕рд╛рдЗрдЯ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдПрдХ рджреБрд╖реНрдЯ рддреГрддреАрдп рдкрдХреНрд╖ shader рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдЗрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА (рдкрд┐рдХреНрд╕реЗрд▓ рд░рдВрдЧ рд╕реНрд░реЛрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рдЕрд▓рдЧ shader рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рд╣реА рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдЖрдк DOM рддрддреНрд╡ рдХреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдирд┐рдореНрди рдЦрдВрдбреЛрдВ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдСрдкреНрд╢рди рдореЗрдВ css_ColorMatrix , css_MixColor рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдореВрд▓ рд░рдВрдЧреЛрдВ рд╕реЗ рдЕрдкрдиреЗ рдкрд░рд┐рдХрд▓рд┐рдд рд░рдВрдЧреЛрдВ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реИред
рдЫрд╡рд┐

рдХреИрд╡рд┐рдПрдЯ : рдпреБрдХреНрддрд┐ рдХрд╣рддреА рд╣реИ рдХрд┐ рдЖрдк рдареЛрд╕ рд░рдВрдЧ рдорд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП gl_FragColor рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрднреА рддрдХ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
WebGL рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ "рд╕реНрд╡рдЪреНрдЫ" рд╕рд╛рдордЧреНрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдЙрд╕реА рд╕рд░реНрд╡рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдпрд╛ рд╕реАрдзреЗ 3-рдкрдХреНрд╖ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рдбреЛрдореЗрди рдПрдХреНрд╕реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рд╣реИ)ред

Shader рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ CSS shaders рдХрд┐рд╕реА рднреА рд╕рд╛рдордЧреНрд░реА рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЧреНрд░рд┐рдб рдЖрдХрд╛рд░

рдПрдХ рдФрд░ рд╕реАрдорд╛, рдХрдо рд╕реЗ рдХрдо рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдореЛрдЬрд╝реЗрдХ рдЧреНрд░рд┐рдб рдХреЗ рд▓рд┐рдП рддреНрд░рд┐рдХреЛрдг рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рд╣реИред
рдЖрдкрдХреЗ рдкрд╛рд╕ 20,000 рд╕реЗ рдЕрдзрд┐рдХ рддреНрд░рд┐рднреБрдЬреЛрдВ рдХрд╛ рдЧреНрд░рд┐рдб рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, 16- рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреНрд░рдорд┐рдд рддреНрд░рд┐рдХреЛрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рдХреЛрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ 65.536 рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рд╕реАрдПрд╕рдПрд╕ рдкреНрд░рднрд╛рд╡ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ?


рдЖрдк рд╕рднреА рдХреА рдЬрд░реВрд░рдд рд╣реИ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдПрдХ рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рд╣реИред CCSSF рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢реЗрдб рд╕рд╛рджреЗ рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реИрдВред

рд╡рд░реНрдХрдлрд╝реНрд▓реЛ HTML + рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ: рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреГрд╖реНрда рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛ рдпрд╛ рдирд╣реАрдВред
Adobe рд╕реЗ рдПрдХ рдЯреВрд▓ рд╣реИ, рдЬрд┐рд╕реЗ CSS FilterLab рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдкреНрд░рднрд╛рд╡ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред

рд╕рд╛рд╡рдзрд╛рдиреА : рдПрдХ shader рдХреЛ рдмрд╛рдЗрдирд░реА рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдзреАрдорд╛ рдСрдкрд░реЗрд╢рди рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рд╢реЗрдб рд╣реИрдВ, рддреЛ рд╡реЗ рдкреГрд╖реНрда рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдзреАрдорд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Chrome рдореЗрдВ WebGL рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ shader binaries рдХреА рдХреИрд╢рд┐рдВрдЧ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рдереА, рдпрд╣ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдХрд╕реНрдЯрдо рд╕реАрдПрд╕рдПрд╕ рдлрд┐рд▓реНрдЯрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢реЗрдб рдХрд┐рд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ?


рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╢реАрд░реНрд╖
 precision mediump float; attribute vec4 a_position; uniform mat4 u_projectionMatrix; void main() { gl_Position = u_projectionMatrix * a_position; } 

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреБрдХрдбрд╝рд╛ shader рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 precision mediump float; void main() { float r = 1.0; float g = 1.0; float b = 1.0; float a = 1.0; css_ColorMatrix = mat4( r, 0.0, 0.0, 0.0, 0.0, g, 0.0, 0.0, 0.0, 0.0, b, 0.0, 0.0, 0.0, 0.0, a ); } 

рд╕рдЯреАрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдбреЗрд╕реНрдХрдЯреЙрдк OpenGL рдкрд░ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИ , рд▓реЗрдХрд┐рди OpenGL ES рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдиреНрд╣реЗрдВ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ HTML рд╕рд╛рдордЧреНрд░реА рдкрд░ рд╢реЗрдбреНрд╕ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ:
 <style> .shader { -webkit-filter: custom(url(simple.vs) mix(url(simple.fs) normal source-atop), 1 1) } </style> <body> <div class="shader"> Hello world! </div> <body> 

рдпрд╣ рдПрдХ рдиреНрдпреВрдирддрдо рд╕реАрдПрд╕рдПрд╕ рд╢реИрд▓реА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджреЛ рд╕рд░рд▓ рддреНрд░рд┐рднреБрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореЛрдЬрд╝реЗрдХ рдЧреНрд░рд┐рдб рдореЗрдВ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдЯреБрдХрдбрд╝рд╛ рдФрд░ рд╡рд░реНрдЯреЗрдХреНрд╕ рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (1 рдХреЙрд▓рдо x 1 рдкрдВрдХреНрддрд┐)ред

рдХрд╕реНрдЯрдо рдкреНрд░рднрд╛рд╡ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ?


рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЧреЛрд▓рд╛рдХрд╛рд░ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдпрд╣рд╛рдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд╛рдиред
рд╣рдо рдбреЛрдо рд╕рд╛рдордЧреНрд░реА (рдкрд╣рд▓реА рддрд╕реНрд╡реАрд░) рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд┐рдХрдиреА рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЗрд╕реЗ рдПрдХ рдЧреЛрд▓реЗ рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЫрд╛рдпрд╛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдПрдХ 3 рдбреА рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рдХрд╛рд╢ (рджреВрд╕рд░реА рддрд╕реНрд╡реАрд░) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЫрд╡рд┐
рдЫрд╡рд┐

рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВред

рдореЗрд╖ рд╡рд┐рдХреГрддрд┐

рд╕рднреА рдЬрд╛рд▓реА рд╡рд┐рдХреГрддрд┐рдпрд╛рдБ рд╢реАрд░реНрд╖ рд╢реАрд░реНрд╖ рдореЗрдВ рд╣реЛрддреА рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдХ рдЖрдпрддрд╛рдХрд╛рд░ рд╡рд┐рдорд╛рди рдХреЛ рдПрдХ рдЧреЛрд▓реЗ рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдмрд╛рдж рдореЗрдВ рдПрдХ рдЫрд╛рдпрд╛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЖрдпрддрд╛рдХрд╛рд░ рдЧреНрд░рд┐рдб рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рд╡рд░реНрдЯреЗрдХреНрд╕ рдкрджреЛрдВ рдХреЗ рд╕рд╛рде 2 рдбреА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдкрдбрд╝рд╛ рд╣реИред рд╣рдореЗрдВ 3D рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЗрди 2D рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдХреБрдЫ рдореИрдкрд┐рдВрдЧ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд a_position рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореВрд▓ рд╡рд┐рдорд╛рди рдХреЗ рдХреЛрдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
 attribute vec4 a_position; 

рд╣рдо рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдореЗрдВ рдпрд╛рдж рд░рдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рдмрд╛рдж рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ (рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ):
 vec4 position = a_position; 

рдХрдВрдкреНрдпреВрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдПрдХ href = " en.wikipedia.org/wiki/UV_mapping "> рдпреВрд╡реА рдореИрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЯреЗрдХреНрд╕рдЪрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрдм рдПрдХ рдЖрдпрддрд╛рдХрд╛рд░ рдЪрд┐рддреНрд░ 2 рдбреА рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреНрд░рд┐рдб рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡реИрд╕рд╛ рд╣реА рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЧреНрд░рд┐рдб рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рджреЛ-рдШрдЯрдХ рд╡реЗрдХреНрдЯрд░ a_texCoord рд╣реИ, рдЬреЛ рд╢реАрд░реНрд╖ рдХреЗ рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рде рд╣реИред
 attribute vec2 a_texCoord; 

рдмрдирд╛рд╡рдЯ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдпреВ рдФрд░ рд╡реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реЗ рдЪрд┐рддреНрд░ рдХреА рд▓рдВрдмрд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдХреЗ рд╕рд╛рде рдЧреНрд░рд┐рдб рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдХреНрд╖ рдФрд░ рдорд╛рдирдЪрд┐рддреНрд░ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП 0 ... 1 рдХреА рд╕реАрдорд╛ рдореЗрдВ рд╣реИрдВред

рд╣рдорд╛рд░реЗ рдпреВ рдФрд░ рд╡реА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдЕрдиреБрд░реВрдк X, Y, Z рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЧреЛрд▓рд╛рдХрд╛рд░ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА (рдЗрд╕реЗ рдзреНрд░реБрд╡реАрдп рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдПрдХ рдЖрдпрддрд╛рдХрд╛рд░ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдмреАрдЪ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
 x = r * sin( ╬╕ ) * cos( ╧Ж ) y = r * sin( ╬╕ ) * sin( ╧Ж ) z = r * cos( ╬╕ ) 

рдЧреЛрд▓рд╛рдХрд╛рд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рдгрд╛рд▓реА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ:


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реАрдПрд╕рдПрд╕ рдлреЙрд░реНрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рджреЗрдВ:
 uniform float sphereRadius; 

рдФрд░ рд╣рдо рдпреВ рдФрд░ рд╡реА рдХрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд░реЗрдВрдЧреЗ рдЕрдЬреАрдореБрде рдФрд░ рдЖрдВрдЪрд▓ рдХреЗ рд▓рд┐рдП:
 vec3 computeSpherePosition( vec2 uv, float r ) { vec3 p; float fi = uv.x * PI * 2.0; float th = uv.y * PI; px = r * sin( th ) * cos( fi ); py = r * sin( th ) * sin( fi ); pz = r * cos( th ); } 


 vec3 sphere = computeSpherePosition( a_texCoord, sphereRadius ); 

рдЕрдм рд╣рдо рдореВрд▓ рдлреНрд▓реИрдЯ рд╕реНрдерд┐рддрд┐ рдФрд░ рдирдИ рдЧреЛрд▓рд╛рдХрд╛рд░ рд╕реНрдерд┐рддрд┐ рдХреЗ рдмреАрдЪ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ GLSL рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди (рджреЛ рдорд╛рдиреЛрдВ рдХреЗ рдмреАрдЪ рд░реИрдЦрд┐рдХ рдкреНрд░рдХреНрд╖реЗрдк) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрдирд╛ рдХреА рд╣реИред
 uniform float amount; 

рд╣рдо рд╕рдВрдХреНрд░рдордг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдлрд╝реЙрд░реНрдо рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ (CSS рд╕реЗ рдкреНрд░рдкрддреНрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реАрдПрд╕рдПрд╕ рд╕рдВрдХреНрд░рдордг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
 position.xyz = mix( position.xyz, sphere, amount ); 

рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЧреНрд░рд┐рдб рдХреЗ рд╡рд░реНрдЯрд┐рдХрд▓ рдХреЛ рдмрд┐рд▓реНрдЯ-рдЗрди GLSL рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдореИрдЯреНрд░рд┐рдХреНрд╕ рдлреЙрд░реНрдо gl_Position рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣рдорд╛рд░реА рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ:
 gl_Position = u_projectionMatrix * position; 


рд╕рддрд╣ рдЫрд╛рдпрд╛рдВрдХрди

рдорддрдЧрдгрдирд╛ рдЫрд╛рдпрд╛рдВрдХрди рд╢реАрд░реНрд╖ рдФрд░ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╢реЗрдбрд░: рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░реНрд╕

рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдореЗрдВ, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рдЕрдВрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗ, рдЬрд╣рд╛рдВ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЛрдо рдмрдирд╛рд╡рдЯ рдХреЗ рд░рдВрдЧ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред

рдЫрд╛рдпрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд▓реИрдореНрдмрд░реНрдЯрд┐рдпрди рд╕реНрдХреИрдЯрд░рд┐рдВрдЧ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдкрд░рд╛рд╡рд░реНрддрди рдкреНрд░рдХрд╛рд╢ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕рддрд╣ рд╡реЗрдХреНрдЯрд░ рдФрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкреНрд░рдХрд╛рд╢ рджрд┐рд╢рд╛ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдПрдХ рдЕрджрд┐рд╢ рдЙрддреНрдкрд╛рдж рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╕рддрд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ред
рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рддреАрди-рдШрдЯрдХ рд▓рд╛рдЗрдЯрдкреЙрдЗрдВрдЯ рд╡реЗрдХреНрдЯрд░ рдлреЙрд░реНрдо рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗ:
 uniform vec3 lightPosition; 

рд╣рдо GLSL рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХрд░реЗрдВрдЧреЗ:
 vec3 lightPositionNormalized = normalize( lightPosition ); 

рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдПрдХ рд╕рдкрд╛рдЯ рдФрд░ рдЧреЛрд▓рд╛рдХрд╛рд░ рд╕рддрд╣ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕рддрд╣ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рд╕реАрдкреАрдпреВ рдХреА рддрд░рдл рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдХрдиреЗрдХреНрдЯреЗрдб рдЧреНрд░рд┐рдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рддреНрд░рд┐рдХреЛрдг рдХреЗ рд╕рднреА рдХреЛрдиреЗ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ (рд╢реЗрдбрд░ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╢реАрд░реНрд╖ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ)ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рд╣рдо рд╕рд░рд▓ рдЬреНрдпрд╛рдорд┐рддреАрдп рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдорд╛рдирджрдВрдбреЛрдВ рдХреА рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд┐рдорд╛рди рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рд▓рд┐рдП, рд╣рдо рдереЛрдбрд╝реЗ рдзреЛрдЦреЗрдмрд╛рдЬрд╝ рд╣реИрдВ: рд╡рд┐рдорд╛рди рдХреЗ рд╕рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдХреЛ рдореЙрдирд┐рдЯрд░ рд╕реЗ рд╕реАрдзрд╛, XY рд╡рд┐рдорд╛рди рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣рдореЗрдВ рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд DOM рддрддреНрд╡ рджреЗрдЧрд╛, рдЬрд┐рд╕реЗ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЫрд╛рдпрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрд╣ рдмрд╛рдХреА рдкреЗрдЬ рддрддреНрд╡реЛрдВ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрдкреНрд░рд╛рдХреГрддрд┐рдХ рд╣реЛрдЧрд╛ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╕реБрдкрд░рдЗрдореНрдкреЛрдЬрд╝реНрдб рд╢реЗрдбреНрд╕ рдирд╣реАрдВ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рддрд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
 vec3 planeNormal = lightPositionNormalized; 

рдЗрд╕рд╕реЗ рдЕрд╡рд┐рдХрд╕рд┐рдд рддрддреНрд╡ рдХреЛ рд╣рдореЗрд╢рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗрдЧрд╛ред

рдЧреЛрд▓реЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд░рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдПрдХ рд╕рддрд╣ рдкрд░ рдПрдХ рдЧреЛрд▓реЗ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдХреНрд╖реЗрддреНрд░ рдХреА рд╕рддрд╣ рд╕реЗ рдЗрд╕рдХреА рд╕рддрд╣ рдкрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╡реИрдХреНрдЯрд░ рд╣реИ:
 vec3 sphereNormal = normalize( position.xyz ); 

рд╣рдорд╛рд░реЗ рд╕рдВрдХреНрд░рдордг рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рд╕рдВрдХреНрд░рдордг рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рддреЗ рд╣реИрдВ:
 vec3 normal = normalize( mix( planeNormal, sphereNormal, amount ) ); 

рдЕрдВрдд рдореЗрдВ, рд╣рдо GLSL рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдбреЙрдЯ рдлрдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реИрдореНрдмрд░реНрдЯ рдлрд╛рд░реНрдореВрд▓реЗ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╡рд░реЗрдЬ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХрддрдо рд╕реВрддреНрд░ рдХреЗ рд╕рд╛рде рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рдиреЛрдВ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 float light = max( dot( normal, lightPositionNormalized ), 0.0 ); 

рд╡реЗрдХреНрдЯрд░ рд╢реЗрдбрд░ рдХреА рдЕрдВрддрд┐рдо рдХреНрд░рд┐рдпрд╛ рд╕реЗ, рд╣рдо рдЕрдВрддрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдХрд╛рд╢ рдХреА рддреАрд╡реНрд░рддрд╛ рдХреЛ рдЯреБрдХрдбрд╝рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ:
 varying float v_light; 

 v_light = light; 


рд╢реЗрдбрд░: рдлреНрд░реИрдЧрдореЗрдВрдЯ рд╢реИрдбрд░

рдЯреБрдХрдбрд╝рд╛ shader рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд╕рдм рдХреБрдЫ рднрд╛рд░реА рд╢реАрд░реНрд╖ shader рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдереАред
рдЕрдВрддрд░ рд╕реЗ рд╣рд▓реНрдХреА рддреАрд╡реНрд░рддрд╛ рд▓реЗрдВ:
 varying float v_light; 


рдФрд░ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рдВрдЧ рдЧреБрдгрд╛рдВрдХ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ (рд╣рдо рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдирд╣реАрдВ рдмрджрд▓реЗрдВрдЧреЗ):
 float r, g, b; r = g = b = v_light; 

рдФрд░ css_ColorMatrix рд╕рдВрдХреНрд░рдордг рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
 css_ColorMatrix = mat4( r, 0.0, 0.0, 0.0, 0.0, g, 0.0, 0.0, 0.0, 0.0, b, 0.0, 0.0, 0.0, 0.0, 1.0 ); 

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рдПрдХ рд░рдВрдЧ рдорд┐рд▓рддрд╛ рд╣реИ:
 gl_FragColor = vec4( r, g, b, 1.0 ) * sourceColor; 


рдЕрдВрддрд┐рдо рд╢рд┐рдЦрд░ shader

рдбрд╛рдЙрдирд▓реЛрдб
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
рд╕рдЯреАрдХ рдорд╛рдзреНрдпрдо рдлреНрд▓реЛрдЯ;

// рдЗрдирд▓рд╛рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ

рд╡рд┐рд╢реЗрд╖рддрд╛ vec4 a_position;
рд╡рд┐рд╢реЗрд╖рддрд╛ vec2 a_texCoord;

// рдЗрдирд▓рд╛рдЗрди рдлреЙрд░реНрдо

рд╡рд░реНрджреА mat4 u_projectionMatrix;

// рд╕реАрдПрд╕рдПрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдкреНрд░рдкрддреНрд░

рд╕рдорд╛рди рдлреНрд▓реЛрдЯ рд░рд╛рд╢рд┐;
рд╡рд░реНрджреА рдлреНрд▓реЛрдЯ рдЧреЛрд▓рд╛рдХрд╛рд░;
рд╡рд░реНрджреА vec3 lightPosition;

// рдЕрдВрддрд░

рдмрджрд▓рддреА рдлреНрд▓реЛрдЯ v_light;

// рд▓рдЧрд╛рддрд╛рд░

const float PI = 3.1415;

// рдПрдХ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рдПрдБ

vec3 computeSpherePosition (vec2 uv, float r) {

vec3 рдкреА;

рдлреНрд▓реЛрдЯ рдлрд╛рдИ = uv.x * PI * 2.0;
float th = uv.y * PI;

px = r * sin (th) * cos (fi);
py = r * sin (th) * sin (fi);
pz = r * cos (th);

рд╡рд╛рдкрд╕реА рдкреА;

}

// рдореБрдЦреНрдп

рд╢реВрдиреНрдп рдореБрдЦреНрдп () {

vec4 рд╕реНрдерд┐рддрд┐ = a_position;

// рдпреВрд╡реА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдорд╛рди рдХреЛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдореИрдк рдХрд░реЗрдВ

vec3 sphere = computeSpherePosition (a_texCoord, sphereRadius);

// рдкреНрд▓реЗрди рд╕реЗ рдЧреЛрд▓реЗ рдореЗрдВ рд╕рдВрдХреНрд░рдордг

position.xyz = рдорд┐рд╢реНрд░рдг (position.xyz, sphere, amount);

// рд╢реАрд░реНрд╖ рд╕реНрдерд┐рддрд┐ рд╕реЗрдЯ рдХрд░реЗрдВ

gl_Position = u_projectionMatrix * рд╕реНрдерд┐рддрд┐;

// рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ

vec3 lightPositionNormalized = normalize (lightPosition);

vec3 planeNormal = lightPositionNormalized;
vec3 sphereNormal = normalize (position.xyz);

vec3 normal = normalize (рдорд┐рдХреНрд╕ (рдкреНрд▓реЗрди рдЕрд╕рд╛рдорд╛рдиреНрдп, рдЧреЛрд▓рд╛рдХрд╛рд░, рд░рд╛рд╢рд┐));

рдлреНрд▓реЛрдЯ рд▓рд╛рдЗрдЯ = рдореИрдХреНрд╕ (рдбреЙрдЯ (рд╕рд╛рдорд╛рдиреНрдп, рд▓рд╛рдЗрдЯрдкреЛрдЬрд┐рд╢рди рдЕрд╕рд╛рдорд╛рдиреНрдп), 0.0);

// рд╡рд┐рдкрд░реАрдд

v_light = рдкреНрд░рдХрд╛рд╢;

}


рдЕрдВрддрд┐рдо рдЯреБрдХрдбрд╝рд╛ shader

рдбрд╛рдЙрдирд▓реЛрдб
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
рд╕рдЯреАрдХ рдорд╛рдзреНрдпрдо рдлреНрд▓реЛрдЯ;

рдмрджрд▓рддреА рдлреНрд▓реЛрдЯ v_light;

рд╢реВрдиреНрдп рдореБрдЦреНрдп () {

рдлреНрд▓реЛрдЯ рдЖрд░, рдЬреА, рдмреА;
r = g = b = v_light;

css_ColorMatrix = mat4 (рдЖрд░, 0.0, 0.0, 0.0,)
0.0, рдЬреА, 0.0, 0.0,
0.0, 0.0, рдмреА, 0.0,
0.0, 0.0, 0.0, 1.0);

}


рд╕реАрдПрд╕рдПрд╕ рд╢реИрд▓реА

рдбрд╛рдЙрдирд▓реЛрдб
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
.рд╢рд╛рджрд░ {
-webkit- рдлрд╝рд┐рд▓реНрдЯрд░: рдХрд╕реНрдЯрдо (url (рдЧреЛрд▓реЗ рдореЗрдВ)) рдорд┐рдХреНрд╕ (url (sphere.fs) рд╕рд╛рдорд╛рдиреНрдп рд╕реНрд░реЛрдд-рдКрдкрд░),
16 32, рд░рд╛рд╢рд┐ 1, рдЧреЛрд▓рд╛рдХрд╛рд░ 0.35, рдкреНрд░рдХрд╛рд╢ рд╕реНрдерд╛рди 0.0 0.0 1.0);
-webkit- рд╕рдВрдХреНрд░рдордг: -webkit- рдлрд╝рд┐рд▓реНрдЯрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрд╛рд╣рд░ 1s;
}

.рд╢реЗрдпрд░: рд╣реЛрд╡рд░ {
-webkit- рдлрд╝рд┐рд▓реНрдЯрд░: рдХрд╕реНрдЯрдо (url (рдЧреЛрд▓реЗ рдореЗрдВ)) рдорд┐рдХреНрд╕ (url (sphere.fs) рд╕рд╛рдорд╛рдиреНрдп рд╕реНрд░реЛрдд-рдКрдкрд░),
16 32, рд░рд╛рд╢рд┐ 0, рдЧреЛрд▓рд╛рдХрд╛рд░ 0.35, рдкреНрд░рдХрд╛рд╢ рд╕реНрдерд╛рди 0.0 0.0 1.0);
}


рдХрд╕реНрдЯрдо рдкреНрд░рднрд╛рд╡ рдХреЗ рдХреБрдЫ рдФрд░ рдЙрджрд╛рд╣рд░рдг


рдбрд┐рдмрдЧрд┐рдВрдЧ рд╢реЗрдбреНрд╕

CCSSF рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢реЗрдбреНрд╕ рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдПрдХ рдХрдард┐рди рд╡реНрдпрд╡рд╕рд╛рдп рд╣реИред рдХрдо рд╕реЗ рдХрдо рдЕрднреА рдХреНрд░реЛрдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рдирд╣реАрдВ рд╣реИ (рд╡реЗрдмрдЬреАрдПрд▓ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╣рд╛рдВ рдЖрдк shader рд╕рдВрдХрд▓рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрднрд╡рддрдГ рдПрдХ рддреНрд░реБрдЯрд┐ рдпрд╛ рдЯрд╛рдЗрдкреЛ рдкрд╛рддреЗ рд╣реИрдВ)ред

рдореИрдХ рдкрд░, рдЖрдк рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЖрдкрдиреЗ рдХреНрд░реЛрдо рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдпрд╣ рдХрдВрд╕реЛрд▓ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ рджреЛрд╕реНрддреЛрдВ @aerotwist рдФрд░ @brendankenny рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП Sublime рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдХреЗ рд▓рд┐рдП GL shader рд╕рддреНрдпрд╛рдкрди рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди рд╣реИред
Shader рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЬреИрд╕реЗ WebGL рдореЗрдВ, GPU рдкрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ: S рд╕рд╛рдЗрдбред
рдлрд┐рд░ рднреА, рдХреБрдЫ рдРрд╕реЗ рдЯреНрд░рд┐рдХреНрд╕ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рд╢реЗрдбрд░реНрд╕ рдХреЗ рдХрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкреНрд░рднрд╛рд╡ рдХреА рдХреНрд░рд┐рдпрд╛ рдЦрдВрдбрд┐рдд рдЫрд╛рдпрд╛рджрд╛рд░ рд╕реЗ рдмрдВрдзреА рд╣реИ, рддреЛ DOM рддрддреНрд╡ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЫреЛрдЯреЗ рддрддреНрд╡реЛрдВ рдкрд░ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдлреБрд▓-рд╕реНрдХреНрд░реАрди рддрддреНрд╡реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рднрд╛рд╡реЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдпрд╣ рдЕрдиреБрддреНрдкрд╛рджрдХ рд╣реЛрдЧрд╛ рдФрд░ рдкреГрд╖реНрда рдмрдирд╛рддреЗ рд╕рдордп рдПрдХ рдЕрдбрд╝рдЪрди рд╣реЛ рд╕рдХрддреА рд╣реИред
рдпрджрд┐ рдЖрдк рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдЕрд╕рд░ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбреНрд╕ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдореЛрдЬрд╝реЗрдХ рдХреЗ рд╕рд╛рде рдЧреНрд░рд┐рдб рдкрд░ рдЖрдЬрд╝рдорд╛рдПрдВред

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХ рд╣реА рдкреГрд╖реНрда рдкрд░ рдмрдбрд╝реЗ рдореЛрдЬрд╝рд╛рдЗрдХ рд╡рд╛рд▓реЗ рдХрдИ рддрддреНрд╡реЛрдВ рдкрд░ рдкреНрд░рднрд╛рд╡ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╣реБрдд рдЬрд▓реНрджреА рддреНрд░рд┐рдХреЛрдг рдХреЗ рдХреБрд▓ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ



рд╕рд╛рдордЧреНрд░реА



рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
PS рдХреЗрд▓реНрдЯ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░ рдЕрдиреВрджрд┐рдд рдЙрдиреНрд╣реЛрдВрдиреЗ рдКрдкрд░ рдХреА рдХреЛрдИ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА =)

Source: https://habr.com/ru/post/In155447/


All Articles