рдСрд▓ рдж рдмреЗрд╕реНрдЯ, рдореЗрд░реЗ рдЕрддрд┐ рдзреИрд░реНрдпрд╡рд╛рди рдорд┐рддреНрд░реЛрдВ!
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ,
рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдЗрд╕ рддрдереНрдп рдкрд░ рд░реБрдХ рдЧрдП рдереЗ рдХрд┐ рд╣рдореЗрдВ рд╡рд╣рд╛рдБ рдХреБрдЫ рд╕реМ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдкреВрд░реА рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рдЖрдпрдд рдорд┐рд▓реА рдереА, рдФрд░ рдЕрдм рдбреЗрдврд╝ рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд░рдЪрдирд╛рддреНрдордХрддрд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХреЛрдб рдФрд░ рджрд┐рд▓реЛрдВ рдореЗрдВ рд╢реВрдиреНрдп рднрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИред
рдЖрдЦрд┐рд░рдХрд╛рд░, рд╕рд┐рд░реНрдл рджреЛ рддреНрд░рд┐рдХреЛрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЦреАрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рд╕реНрдХреНрд╡рд╛рдпрд░? рднрдЧреНрди? рд╕рд┐рдЯреА рд╕реЗрдВрдЯрд░ рдореЗрдВ рдореЗрдЧрд╛рдЯрди рдкрд╛рд╡рд░ рд╡рд┐рд╕реНрдлреЛрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдбрд╝рд╛рди? рдХреНрдпрд╛ рдкрд╛рдЧрд▓рдкрди рдХреА рдХреЛрдИ рд╕реАрдорд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ? рдХрд┐рд░рдгреЛрдВ рдХреА рдареАрдХ рд╕реЗ рджреЗрдЦрднрд╛рд▓ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЦрд┐рд▓рд╛рдирд╛ рд╣реИ рдФрд░ рдХрд┐рд╕ рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдирд╛ рд╣реИ, рдЖрдк рдЕрдЪрд╛рдирдХ рд╕реЗ рд▓реЗрдЦ рдХреЗ рд╕рд┐рд▓рд╕рд┐рд▓реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВрдЧреЗ!

рдкрд░рд┐рдЪрдп
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ
shadertoy.com рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛
рд╣реВрдВ , рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рд╡рд╣рд╛рдВ рд▓реЗ рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднреА рдЗрд╕ рд╕рднреА рдЕрджреНрднреБрдд рдореЗрдВ рдЦреБрдж рдХреЛ рд╡рд┐рд╕рд░реНрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдпрд╣рд╛рдВ рд╣реЛрдЧрд╛ред
рд╣рд╛рдВ, рд╡рд┐рдВрдбреЛрдЬ рд╡реЗрдмрдПрд▓ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕рдХрд╛ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╣рд░ рдХреЛрдИ рдЗрд╕реЗ ANGLE рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╡реНрдпрд╕рдиреА рд╣реИ рдФрд░ рдЬрдЯрд┐рд▓ рд╢реЗрдбреНрд╕ рдХреЛ рд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рд┐рджреНрдз рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рджреЗрд╢реА
рдУрдкрдирдЧреИрд▓ (рдХреНрд░реЛрдо рдореЗрдВ:
--use-gl = рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк) рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рддреАрд╕рд░реЗ рдпрд╛ рдЪреМрдереЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рдж, рд╕рдм рдХреБрдЫ рд╡рд┐рд╕реНрдлреЛрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╢рд╛рдпрдж рд╣реА рдЪрд░реНрдЪрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ред
рдФрд░ рд╣рд╛рдВ, рд╣рдореЗрдВ рдХрд╛рдлреА рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЖрдзреБрдирд┐рдХ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреБрдЫ рдХрдо рд╕реЗ рдХрдо GTX 4xx рдпрд╛ HD 6xxx рдХреА рддрд░рд╣ (рдФрд░ рдЗрдВрдЯреЗрд▓ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпрд╛ рд╣рдВрд╕рдирд╛ рд╣реИ), рдЕрдиреНрдпрдерд╛ рдПрдХ рдлрд┐рд▓реНрдорд╕реНрдЯреНрд░рд┐рдк рд╣реЛрдЧреАред
рдкрд░рд┐рдЪрдп 2
рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмреНрдпреЛрд░рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рд╣реИрдВ, рдХрд╣рд╛рдВ рд╕реЗ рдЖрдП рд╣реИрдВ рдФрд░ рдХреНрдпреЛрдВ - рдпрд╣ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рдЕрд▓рдЧ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИ, рдЬреЛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдпреЛрдЧреНрдп - рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди
gl_FragColor
рд░рдВрдЧ рд╡реИрд░рд┐рдПрдмрд▓
gl_FragColor
рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░
gl_FragColor
рдЗрд╕рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ
gl_FragCoord
(рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ) рдФрд░
iGlobalTime
рд╕рдордп рд╣реИрдВ (рдпрд╣ рдПрдХ shader рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рд╣реИ, GLSL рдорд╛рдирдХ рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕рдордп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ)ред
GLSL рдореЗрдВ, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗрдХреНрдЯрд░ рдФрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рдХрд╛рд░
vecN
,
matN
рдФрд░ рдЧрдгрд┐рддреАрдп рдХреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдФрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред
рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдХреЗ рд▓рд┐рдП
Href (GL ES рдХреНрдпреЛрдВрдХрд┐ рд╢реЗрдбрд░ WebGL рд╣реИ, рдЬреЛ OpenGL ES 2.0 рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ)ред
рд░реАрдпрд▓рдЯрд╛рдЗрдо рд░реАрдЯреНрд░реИрдХреНрдЯрд┐рдВрдЧ
рдореИрдВ рд╡рд╣ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ 10-15 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдПрдХ рдЕрдкреНрд░рд╛рдкреНрдп рд╕рдкрдирд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ - рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдгред рдЖрдзреБрдирд┐рдХ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдЗрддрдиреЗ рд░рд╛рдХреНрд╖рд╕реА рд░реВрдк рд╕реЗ рдЙрддреНрдкрд╛рджрдХ рд╣реИрдВ рдХрд┐ рд╣рд╛рдВред
рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд░рдВрдЧ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рд╕реЗ рдПрдХ рдХрд┐рд░рдг рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд╣ рдХрд┐рд╕ рд╡рд╕реНрддреБ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЖрд░рд╛рдо рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╡рд╕реНрддреБ рдФрд░ рдЬреНрдЮрд╛рди рдмрд┐рдВрджреБ рдХреЗ рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдХрд┐рд╕реА рддрд░рд╣ рд░реЛрд╢рдиреА рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рд░рдВрдЧ рдмрдирд╛рддреЗ рд╣реИрдВред
рдореИрдВ рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдИ рдХрд┐рд░рдг рдХрд┐рд╕реА рдирд┐рд╢реНрдЪрд┐рдд рд╡рд╕реНрддреБ рдХреЛ рдкрд╛рд░ рдХрд░рддреА рд╣реИ, рдФрд░ рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╛рдВрдЫрд┐рдд рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдХрд┐рд░рдг рдХреЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдХреЗ рд╕рдореАрдХрд░рдгреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдмрд╣реБрдд рдЬрд▓реНрджреА рдПрдХ рдХреНрд╖реЗрддреНрд░ рдпрд╛ рд╡рд┐рдорд╛рди рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдмреЛрдЭрд┐рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдордВрдЧрд▓ рдЧреНрд░рд╣ рдкрд░ рдПрдХ рдмрд┐рд▓реНрд▓реА рдХреЗ рдкреИрдХ рдХреА рд▓реИрдВрдбрд┐рдВрдЧ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рджреВрд░реА рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛, рдЕрд░реНрдерд╛рддреН рдЧреЛрд▓рд╛рдХрд╛рд░ рдЕрдиреБрд░реЗрдЦрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдореБрдЭрд╕реЗ рддреБрдо рддрдХ
рджреВрд░реА рдлрд╝рдВрдХреНрд╢рди рдПрдХ R3-> R рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдирд┐рдХрдЯрддрдо рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреА рджреВрд░реА рджреЗрддрд╛ рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╕рд╛рдзрд╛рд░рдг рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдРрд╕реЗ рдХрд╛рд░реНрдп рд▓рд┐рдЦрдирд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдЪреМрд░рд╛рд╣реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
- рдЧреЗрдВрдж:
length(at) - R
- рд╡рд┐рдорд╛рди:
dot(at,N) - D
length(max(abs(at)-size), 0.))
: length(max(abs(at)-size), 0.))
- рд╕рд┐рд▓реЗрдВрдбрд░ (Y):
length(at.xz) - R
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рдЪрдирд╛рддреНрдордХ рдЬреНрдпрд╛рдорд┐рддрд┐ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
- рдЧрдардмрдВрдзрди:
min(f, g)
- рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди:
max(f, g)
* - рдШрдЯрд╛рд╡:
max(f, -g)
*
рдФрд░ рд░реВрдкрд╛рдВрддрд░рдг - рдпрд╣ рдЗрдирдкреБрдЯ рд╕реИрдВрдкрд▓рд┐рдВрдЧ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
- рдХреИрд░реНрд░реА:
at-vec3(pos)
- рд░реЛрдЯреЗрд╢рди рдФрд░ рдЗрд╕реА рддрд░рд╣:
at*mat3(< >)
(рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рд╡рд╛рдкрд╕реА рдХреА рджреВрд░реА рдХреЛ рд╡рд╛рдкрд╕ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)
* - рд╕рдЦреНрдд рдПрдл-рджреВрд░реА рдФрд░ рдПрдХ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд╣реИрдЧреЛрд▓рд╛рдХрд╛рд░ рдирд┐рд╢рд╛рди
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдмреАрдо рдХреЗ рдЪреМрд░рд╛рд╣реЗ рдХреЛ рдХреИрд╕реЗ рдвреВрдВрдвреЗрдВ? рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдЧреЛрд▓рд╛рдХрд╛рд░ рдЕрдиреБрд░реЗрдЦрдг рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рд╣рдо рдмреАрдо рдХреЛ рдмрд┐рдВрджреБ O рд╕реЗ рджрд┐рд╢рд╛ D рдореЗрдВ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
- рд╣рдо рдмрд┐рдВрджреБ O рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рди рдХреЗ рдмрд░рд╛рдмрд░ рдШ рдЖрддреЗ рд╣реИрдВ
- рдмрд┐рдВрджреБ D рдХреЛ рджрд┐рд╢рд╛ D рдореЗрдВ рджреВрд░реА d рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ
- рдпрджрд┐ d рдХреБрдЫ рдЪрдпрдирд┐рдд рдереНрд░реЗрд╢реЛрд▓реНрдб рдорд╛рди рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рд╣рдо рдЪрд░рдг 2 рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ
- рд╡рд░реНрддрдорд╛рди рдмрд┐рдВрджреБ рдУ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рд╡рд╛рдВрдЫрд┐рдд рдЪреМрд░рд╛рд╣рд╛ рд╣реИ, рд╣рдо рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ

GLSL рдкрд░, рдПрдХ рд╕рд░рд▓ рдЯреНрд░реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
float trace(vec3 O, vec3 D) { float L = 0.; for (int i = 0; i < MAX_STEPS; ++i) { float d = world(O + D*L); L += d; if (d < EPSILON) break; } return L; }
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдореВрд▓ рд░реВрдк рдореЗрдВ 1 рдХреЗ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдорд╛рд░реНрдЪрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ (рджреВрд░реА рдХреА рдпрд╛рддреНрд░рд╛ рдХрд╛ рджреГрд╢реНрдп):
// , #define MAX_STEPS 32 #define EPSILON .001 // float world(vec3 a) { return length(a) - 1.; // 1 } // O D. float trace(vec3 O, vec3 D) { float L = 0.; // for (int i = 0; i < MAX_STEPS; ++i) { // MAX_STEPS float d = world(O + D*L); // L += d; // if (d < EPSILON*L) break; // , } return L; // } void main(void) { // [-1., 1.] vec2 uv = gl_FragCoord.xy / iResolution.xy * 2. - 1.; // uv.x *= iResolution.x / iResolution.y; // vec3 O = vec3(0., 0., 3.); // z ; -2. - vec3 D = normalize(vec3(uv, -2.)); // float path = trace(O, D); // , gl_FragColor = vec4(path * .2); }

рд╣рдорд╛рд░рд╛ рдЧреЛрд▓рд╛ рд╕рдВрджрд┐рдЧреНрдз рд░реВрдк рд╕реЗ рд╣рд╡рд╛ рдореЗрдВ рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИ, рддреЛ рдЖрдЗрдП рдЗрд╕реЗ рдПрдХ рд╡рд┐рдорд╛рди рдкрд░ рд░рдЦреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
float world(vec3 a) { return min(length(a) - 1., ay + 1.); }

рдЕрдм рдЪрдХрд╛рдЪреМрдВрдз рдФрд░ рддрд╛рдордЭрд╛рдо рдХреЗ рдмрд┐рдирд╛, рдПрдХ рд╕рд░рд▓ рдлреИрд▓рд╛рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХрд╛рд╢ рдХреЛ рд╣рд┐рд▓рд╛рдПрдВред
рд╕рд░рд▓ рд▓реИрдВрдмрд░реНрдЯ рдореЙрдбрд▓ рдореЗрдВ, рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рддрд╣ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдХреА рдШрдЯрдирд╛ рд╕рднреА рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдмрд┐рдЦрд░реА рд╣реБрдИ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдмрд┐рдВрджреБ рдХрд╛ рдкреНрд░рдХрд╛рд╢ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрд░реЛрдд рдФрд░ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рджрд┐рд╢рд╛ рдХреЗ рдмреАрдЪ рдХреЛрдг рдХреЗ рдХреЛрд╕рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдЖрдиреБрдкрд╛рддрд┐рдХ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░реЛрд╢рдиреА рд╕реНрд░реЛрдд рд╕реЗ рджреВрд░реА рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдШрдЯ рдЬрд╛рддреА рд╣реИред рдЦреИрд░, рдЖрдкрдХреЛ рд╕реНрд░реЛрдд рдФрд░ рд╕рддрд╣ рдХреЗ рд░рдВрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреЛрдб рдореЗрдВ, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
vec3 enlight(vec3 at, vec3 normal, vec3 diffuse, vec3 l_color, vec3 l_pos) { // vec3 l_dir = l_pos - at; // = // = (= ) // (= ) // , return diffuse * l_color * max(0.,dot(normal,normalize(l_dir))) / dot(l_dir, l_dir); }
рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЖрд╕рд╛рди рд╣реИ - рдпрд╣ рд╣рдорд╛рд░реА рджреВрд░реА рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рдХреЗрд╡рд▓ рдврд╛рд▓ рд╣реИ:
vec3 wnormal(vec3 a) { vec2 e = vec2(.001, 0.); float w = world(a); return normalize(vec3( world(a+e.xyy) - w, world(a+e.yxy) - w, world(a+e.yyx) - w)); }
рдкрд░рд┐рдгрд╛рдо:

рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рд╣реИ рдирд╛? рдЧреЛрд▓рд╛ рдЕрднреА рднреА рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдЕрдВрдзреЗрд░рд╛ рд╣реИред
рдЖрдВрдЦреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдФрд░ рд╕реБрдЦрдж рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рдЪреАрдЬреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдПрдХ рдЫрд╛рдпрд╛ рдФрд░ рдПрдХ рдЧрд┐рд▓рд╛рд╕ рдЫрд╛рдпрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрдкрдиреЗ рд░рдВрдЧ рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП
vec3(.1)
рдпрд╛ .2 рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдПрдореНрдмреАрдВрдЯ рд▓рд╛рдЗрдЯрд┐рдВрдЧ рдбрд╛рд▓реЗрдВред
рдХрдк рдЫрд╛рдпрд╛, рдкрд░рд┐рд╡реЗрд╢реАрдп рд░реЛрдбрд╝рд╛ рднреА, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдПрдХ рдЕрдиреБрдорд╛рди рд╣реИ, рдЬрдм рд╕рддрд╣ рдХреЛ рд╕рднреА рдкрдХреНрд╖реЛрдВ рд╕реЗ рдЙрдбрд╝рд╛рди рднрд░рдиреЗ рд╡рд╛рд▓реЗ рдлреЛрдЯреЛрди рджреНрд╡рд╛рд░рд╛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рди рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рд╕реЗред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдЯреНрд░рд╛рдЗрдб рдЪрд╛рд░реНрдЯ рдореЗрдВ, рддрдк рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рдЧреНрд░реА рдХреЗ рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рддрдХрдиреАрдХ рдореЗрдВ, рд╡рд┐рд╣рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреА рдирд┐рдХрдЯрддрд╛ рдкрд░ рджреГрд╢реНрдп-рдЕрдВрддрд░рд┐рдХреНрд╖ рдбреЗрдЯрд╛ рдХрд╛ рд╢реЛрд╖рдг рд╣реИ - рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рд╕рд╛рде рдХрдИ рдХрджрдо рдЙрдард╛рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рднреА рдХрд┐рддрдирд╛ рдХрд░реАрдм рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдмрд▓реНрдХрд┐ рдЕрдирдЪрд╛рд╣реА рд╣реИрдХ рд╣реИ (рдЬреИрд╕реЗ, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рд╕рдм рдХреБрдЫ рдЬреЛ рд╣рдо рдЗрд╕ рдЧреНрд░рд╣ рдкрд░ рдХрд░рддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:
// float occlusion(vec3 at, vec3 normal) { // , float b = 0.; // for (int i = 1; i <= 4; ++i) { // .06 -- float L = .06 * float(i); float d = world(at + normal * L); // b += max(0., L - d); } // 1 return min(b, 1.); }
рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЫрд╛рдпрд╛ рдХреЛ рдФрд░ рднреА рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╣рдо рдмреАрдо рдХреЛ рдПрдХ рдмрд┐рдВрджреБ рд╕реЗ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдореЗрдВ рдЬрд╛рдиреЗ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдХрд┐рд╕реА рдЪреАрдЬ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЖрддрд╛ рд╣реИред
if (trace(at, normalize(l_dir), EPSILON*2.) < length(l_dir)) return vec3(0.)
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк рдЙрд╕ рдмрд┐рдВрджреБ рд╕реЗ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рдкреАрдЫреЗ рдЬрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ (рд╣реЛрдорд╡рд░реНрдХ: рдХреНрдпреЛрдВ?)
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рд╡рд╣рд╛рдВ рдХреЛрд╣рд░рд╛ рдбрд╛рд▓рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкрд░рд┐рд╡реЗрд╢ рдкреНрд░рдХрд╛рд╢ рдХреЗ рд╕рд╛рде рдкреГрд╖реНрдарднреВрдорд┐ рд╡рд┐рд▓реАрди рди рд╣реЛ:
color = mix(color, vec3(0.), smoothstep(0.,20.,path))
рдХреБрд▓:

рднреМрддрд┐рдХ рдореВрд▓реНрдп
рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЧреНрд░реЗ рдФрд░ рдиреАрд░рд╕ рд╣реИред рдЪрд▓реЛ рдЧреЗрдВрдж рдФрд░ рд╡рд┐рдорд╛рди рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рдВрдЧ рдмрдирд╛рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЧреЗрдВрдж рдореЗрдВ рдзрд╛рддреБ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИред
рдЖрдЗрдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ
material_t
рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдВ:
struct material_t { vec3 diffuse; float specular; };
рд╣рдо рдЕрдкрдиреА рджреБрдирд┐рдпрд╛ рдХреЛ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
// material_t wmaterial(vec3 a) { // material_t m = material_t(vec3(.5, .56, 1.), 200.); float closest = s_ball(a); // -- float sample = s_floor(a); // if (sample < closest) { // closest = sample; // -- m.diffuse = vec3(1.-mod(floor(ax)+floor(az), 2.)); m.specular = 0.; } return m; }
рдЕрдм рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдкреНрд░рдХрд╛рд╢ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рд░рдВрдЧ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИред
рд╣рд╛рдЗрд▓рд╛рдЗрдЯреНрд╕ рдХреЛ рдлрд╛рдЗрдирд▓ рдЯрдЪ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдЪрдХрд╛рдЪреМрдВрдз рднреА рдПрдХ рдмреИрд╕рд╛рдЦреА-рдмреИрд╕рд╛рдЦреА рд╣реИ, рдзрд╛рддреБрдУрдВ рд╕реЗ рдкреНрд░рдХрд╛рд╢ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ (рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХрдард┐рди рд╣реИ - рдпрд╣ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреАрдЖрд░рдбреАрдПрдл, рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕рдореАрдХрд░рдгреЛрдВ, рдореЗрдЯреНрд░реЛрдкреЛрд▓рд┐рд╕ рдФрд░ рдЕрдиреНрдп рднрд╛рд░реА рд╢реИрдХреНрд╖рдгрд┐рдХ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмреАрдорд┐рдВрдЧ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред ), рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдЖрд╢рдп рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рдвреЗрд░ рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдмреНрд▓рд┐рди-рдлреЛрдВрдЧ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдФрд░ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рдмреАрдЪ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЕрд░реНрдз-рд╡реЗрдХреНрдЯрд░ рдХреЗ рдмреАрдЪ рдХреЗ рдХреЛрдг рдХреЗ рдХреЛрд╕рд╛рдЗрди рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдЪрдХрд╛рдЪреМрдВрдз рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдлреИрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд░рдВрдЧ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред
рд▓рдВрдмрд╛, рдЫреЛрдЯрд╛, рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:
if (m.specular > 0.) { // , , -- vec3 h = normalize(normalize(l_dir) + normalize(eye-at)); // color += l_color * pow(max(0.,dot(normal,h)), m.specular) * (m.specular + 8.) / 25.; }
рдХреБрд▓:

рдордЯрд░ рдХреА рджреАрд╡рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ
рд╣рдорд╛рд░реА рдЧреЗрдВрдж рд╕рдВрджрд┐рдЧреНрдз рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдЖрдЗрдП рдЗрд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░реЗрдВред
рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдПрдХ рдкрд░рд╛рд╡рд░реНрддрди рдХреНрд╖реЗрддреНрд░ рдЬреЛрдбрд╝реЗрдВ, рдШрдЯрдирд╛ рдкреНрд░рдХрд╛рд╢ рдХрд╛ рдЕрдВрд╢ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдЬреЛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛ред
рдЖрдЗрдП рдкреНрд░рддрд┐рдмрд┐рдВрдм рдкреНрд░рддрд┐рдмрд┐рдВрдм рдореЗрдВ рдЯреНрд░реЗрд╕ рд▓рдкреЗрдЯреЗрдВ:
// vec3 result_color = vec3(0.); // float k_reflectivity = 1.; for (int i = 0; i < MAX_REFLECTIONS; ++i) { // float path = trace(O, D, 0.); // , if (path < 0.) break; // , vec3 pos = O + D * path; vec3 nor = wnormal(pos); // material_t mat = wmaterial(pos); // vec3 color = .15 * (1. - occlusion(pos, nor)) * mat.diffuse; // color += enlight(pos, nor, O, mat, vec3(1., 1.5, 2.), vec3(2.*cos(t), 2., 2.*sin(t))); color += enlight(pos, nor, O, mat, vec3(2., 1.5, 1.), vec3(2.*sin(t*.6), 3., 2.*cos(t*.6))); // - color = mix(color, vec3(0.), smoothstep(0.,20.,path)); // result_color += k_reflectivity * color; // k_reflectivity *= mat.reflectivity; // , if (k_reflectivity < .1) break; // D = normalize(reflect(D, nor)); O = pos + D * EPSILON*2.; }
рд╣рдо рджреГрд╢реНрдп рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдФрд░ рдпрд╣рд╛рдБ рдЙрд▓реНрд▓реВ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП:

рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдмреБрд░рд╛ рд╣реИред
рдмреБрд░рд╛, рдмреБрд░рд╛, рдмреБрд░рд╛ред
рдпрд╣ рд╕рдм рджреВрд░реА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЦреАрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рддреЗрдЬреА рд╕реЗ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЪрд▓реЛ рд╕рдм рдХреБрдЫ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджреЗрдВ рдФрд░ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдЬреНрдпрд╛рдорд┐рддрд┐ рдЦреАрдВрдЪрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред
рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рд╡рд┐рдХрд╛рд░ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡рд┐рд╖рдпрд╛рдВрддрд░ред
рдЕрд░рд╛рдЬрдХрддрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрд┐рдХрдиреА рдЧреЛрд▓реЗ рдФрд░ рд╡рд┐рдорд╛рди рд╕рднреА рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд┐рдВрдереЗрдЯрд┐рдХ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдЕрдирд┐рдпрдорд┐рдд, рдЕрдкреВрд░реНрдг рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдЧрдВрджрдЧреА рд╕реЗ рдмрдиреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдкрдиреА рддрд╕реНрд╡реАрд░ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рдХрд░реАрдм рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдПрдХ рдЪреБрдЯрдХреА рдЪрд╛рдЯ рдорд┐рд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрдЪреНрдЫрд╛ рд╢реЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдРрд╕рд╛ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╕рдорд╛рди рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рд╢реЛрд░, рд╢реЛрд░ 2 рдЖрджрд┐ рдХреЗ рд╕рдВрджрд░реНрдн рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╡реЗ рдХрд┐рд╕реА рднреА рдирд┐рд░реНрдорд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ (рд╣реЛрдорд╡рд░реНрдХ: рдХреНрдпреЛрдВ?), рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рднреА рджреЗрдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╢реЛрд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдкрд╛рд░рдВрдкрд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣ рд╣реИ:
float hash(float x) { return fract(sin(x)*48737.3213); }
рдЬрд╣рд╛рдВ 48737.3213 рд╕рд┐рд░реНрдл рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдХреАрдкреИрдб рдкрд░ рдПрдХ рдмрд┐рд▓реНрд▓реА рдХреЗ рд╕рд╛рде рдЖрдБрдЦ рдмрдВрдж рдХрд░рдХреЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рд╣реИред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рд▓реЛрдЧ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╣рд░ рдЬрдЧрд╣ рдЕрдкрдиреЗ рд╕рд╛рде рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред
Vec2 рд╕реЗ рд╢реЛрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
float hash(vec2 x) { return hash(dot(x,vec2(71.,313.))); }
рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рд╣реА рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдпреЗ рдлрд╝рдВрдХреНрд╢рди рдЗрдирдкреБрдЯ рдирдВрдмрд░ рдХреЗ рд╣реИрд╢ рдХреА рддрд░рд╣ рд╣реИрдВ, рдФрд░ рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдереЛрдбрд╝реЗ рд╕реЗ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде, рдЙрдирдХрд╛ рдореВрд▓реНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рдЕрдзрд┐рдХ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдмрджрд▓рддрд╛ рд╣реИред рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рд╣реИрд╢ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдореБрдЦреНрдп рд╣реИрдВ рдкрд░реНрд▓рд┐рди рд╢реЛрд░, рдореВрд▓реНрдп рд╢реЛрд░, рд╕рд┐рдВрдкрд▓ рд╢реЛрд░ред
рдЗрд╕ рд╕реАрдЬрд╝рди рдореЗрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рдпрд╣ рдкреЗрд░реНрд▓рд┐рди рдХреЗ рд╢реЛрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреИрд╢рдиреЗрдмрд▓ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╢реЛрд░ рдХреЗ рдХрдИ рд╕рдкреНрддрдХ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдирддреЗ рд╣реИрдВред рдорд▓реНрдЯреА-рдСрдХреНрдЯреЗрд╡ рд╢реЛрд░, рдпрд╛ рднрдЧреНрди рд╢реЛрд░, рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рддрдХрдиреАрдХ рд╣реИ рдЬреЛ рди рдХреЗрд╡рд▓ рдкреЗрд░рд▓рд┐рди рдХреЗ рд╢реЛрд░ рдкрд░, рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░ рднреА рдЖрдзрд╛рд░рд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИред рдкреЗрд░рд▓рд┐рди рдХрд╛ рд╢реЛрд░ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдПрди-рдбрд╛рдпрдореЗрдВрд╢рдирд▓ рдЧреНрд░рд┐рдб рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдиреЛрдбреНрд╕ (= рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡реИрдХреНрдЯрд░) рдкрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рд╣рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЧреНрд░рд┐рдб рдХреА рдХрд┐рд╕ рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╣реИрдВ, рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рд╕рднреА рдиреЛрдбреНрд╕ рдФрд░ рдПрди-рд▓реАрдирд░реАрд▓реА рдЗрди рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рдмреАрдЪред рд░реИрдЦрд┐рдХ рдкреНрд░рдХреНрд╖реЗрдк рдХреЛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдПрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╢реЛрд░ рдХреЗ рджреВрд╕рд░реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЛ рд╕реБрдЪрд╛рд░реВ рдмрдирд╛рдирд╛, рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдкреЗрд░реНрд▓рд┐рди рдХрд╛ рд╢реЛрд░ рд╣реИред рдпрд╣ рднрд╛рд░реА рдФрд░ рд╢рд╛рдВрдд рд╣реИред рджреЛ рдорд┐рдирдЯ рдХреЗ рдЗрд╕ рд╢реИрдХреНрд╖рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рдж, рдЖрдк рдЕрдм рд╣рд░ рдХрд┐рд╕реА рдХреЛ рд╣рдБрд╕рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА рдирд╛рдХ рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ:

рд╣рдо рдЙрдирдХреЗ рдЕрддреНрдпрдзрд┐рдХ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг рдпрд╣рд╛рдВ рд╕рд┐рдореНрдкреНрд▓реЗрдХреНрд╕ рдФрд░ рдкреЗрд░реНрд▓рд┐рди рд╢реЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдмреНрд░рд╣реНрдорд╛рдВрдб рдХреЛ рдЧреБрд▓рд╛рдо рдмрдирд╛рдиреЗ рдХреЗ рд╣рдорд╛рд░реЗ рдорд╛рдореВрд▓реА рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореВрд▓реНрдп рд╢реЛрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ - рд╣рдо рдЧреНрд░рд┐рдб рдиреЛрдбреНрд╕ рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
// value noise float noise(vec2 x) { // F - , f - vec2 F = floor(x), f = fract(x); // vec2 e = vec2(1.,0.); // f *= f * (3. - 2. * f); // return mix( mix(hash(F+e.yy), hash(F+e.xy), fx), mix(hash(F+e.yx), hash(F+e.xx), fx), fy); }
рдЕрдм рдХреБрдЦреНрдпрд╛рдд рднрдЧреНрди рд╢реЛрд░ рдХрдИ рд╕рдкреНрддрдХ рдХреЗ рд╕рд░рд▓ рдпреЛрдЧ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
// float fnoise(vec2 x) { // x += vec2(10.); // return .5 * noise(x) + .25 * noise(x*1.97) + .125 * noise(x*4.04) + .0625 * noise(x*8.17) ; }
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╣рдореЗрдВ рд╢реЛрд░ рдХрд╛ рдРрд╕рд╛ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рд╛рдкреНрдд рд╣реИ:

(
рдЧреБрдкреНрдд рдмреЛрдирд╕ рдЯреНрд░реИрдХ -2 )
рд╕рдм рдХреБрдЫ рдирд╖реНрдЯ рдХрд░ рджреЗрдирд╛
рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХреЗ рдЗрд╕ рд╕реНрд░реЛрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЖрдк рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╢рд╣рд░ рдХреЛ рдбреНрд░рд╛ рдХрд░реЗрдВред
рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░: рд╣рдо рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЛ рдХреНрд╡рд╛рд░реНрдЯрд░-рд╕реЗрдХреНрдЯрд░реЛрдВ рдореЗрдВ рд╣рд░рд╛ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреА рд╕рдордиреНрд╡рдп рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЕрд░рд╛рдЬрдХрддрд╛ рд╕реЗ рднрд╡рди рдорд╛рдкрджрдВрдбреЛрдВ - рдЖрдпрд╛рдореЛрдВ, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рдХрд╛рд▓ рджреЗрдВрдЧреЗред
рдЙрд╕реА рддрд░рд╣, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдКрдВрдЪрд╛рдЗрдпреЛрдВ рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдо рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдо рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ "рд╡рд┐рдВрдбреЛ" рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рдЪрд╛рд▓реВ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдХреИрдорд░рд╛ рд╕реНрдерд┐рддрд┐, рддрд╛рд░реЛрдВ рд╡рд╛рд▓рд╛ рдЖрдХрд╛рд╢ - рдпрд╣ рд╕рдм рднреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдЕрд▓реНрдк рдкрд╛рда рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдердХ рдЧрдпрд╛ рд╣реВрдВред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдкрдврд╝рдХрд░ рдердХ рдЧрдП рд╣реИрдВред рддреЛ рдЪрд▓рд┐рдП рдЬрд░рд╛ рджреЗрдЦрддреЗ рд╣реИрдВ ????? рд▓рд╛рдн рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд┐рд╕реНрддрд░ рдкрд░ рдЬрд╛рдУ!
рдзреНрдпрд╛рди рджреЗрдВ, рдЕрдкрдиреЗ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдкрд░ рд╕реНрд▓рд╛рдЗрдб рд╢реЛ:

рдирд┐рд╖реНрдХрд░реНрд╖
рдпрд╣ рдЗрд╕ рдЕрд░реНрдерд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдмрдирд╛ рд╣реБрдЖ рд╣реИ - рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдЪрд░ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд╛рдо рдХреЛ рдЫреЛрдЯрд╛ рдХрд░ рджреЗрдВ, рд░рд┐рдХреНрдд рд╕реНрдерд╛рди, рд▓рд╛рдЗрди рдлрд╝реАрдб рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдорд╛рд░рд╛ рдврд╛рдВрдЪрд╛ рджреВрд╕рд░реЗ рднрд╛рдЧ рд╕реЗ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ (рд╢реЗрдпрд░реНрдбрдЯреЛ рдХреЗ рдмрдЬрд╛рдп рд╣рдорд╛рд░реЗ рдЪрд░ рдбрд╛рд▓реЗрдВ) рдФрд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЦреИрд░, рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрднреА рднреА рдЦрд░рд╛рдм рд╕реНрд╡рд╛рдж рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдПрдХ рдбрд┐рдЬрд╛рдЗрдирд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╣рд░ рд╕рдордп рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╣рд░рд╛ рджреЗрдЧрд╛ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд╣реЛрдорд╡рд░реНрдХ рд╣реИ - рдЗрд╕ рд╢реЗрдбрд░ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд┐рддрдиреЗ рдмрд╛рдЗрдЯреНрд╕ рдпреЛрдЧрд┐рдиреА рд╣реИрдВред рдореЗрд░рд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрдиреБрдорд╛рди 2..2.5Kb рд╣реИред
рдФрд░ рдЖрдЦрд┐рд░реА рдПрдХ: рдПрдХ рдЕрдЬреАрдм рд╕рдВрдпреЛрдЧ рд╕реЗ, рдореИрдВ рдЖрдЬ рдЕрдЪрд╛рдирдХ (рд╕реЛрдо, 10/21/2013) рдПрдХ рд╣реА рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдирдПрд╕рдпреВ (рдиреЛрд╡реЛрд╕рд┐рдмрд┐рд░реНрд╕реНрдХ рд╕реНрдЯреЗрдЯ рдпреВрдирд┐рд╡рд░реНрд╕рд┐рдЯреА) рдореЗрдВ рд╢рд╛рдо рдХреЛ 19:30 рдмрдЬреЗ рд╕рднрд╛рдЧрд╛рд░ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред 223
рдирдИ рдЦреЗрд▓ рд╕реБрд╡рд┐рдзрд╛рдПрдВ ред рдЖрдк рдирд╣реАрдВ рдЖ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдм рдХреБрдЫ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдпреЛрдЧреНрдпред рдареАрдХ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд - рдЖрдУ, рд╣рдо рдмрдЪрд╛рдПрдВрдЧреЗ!
рдкрд┐рдЫрд▓реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ: рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдВрдЧреАрдд рдХрд╛ рд╕рдВрд╢реНрд▓реЗрд╖рдгред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ: рдУрдкрдирд╕реАрдПрд▓ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдмрд╣реБрднреБрдЬ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХрд╛ рдирд┐рд╖реНрдкрдХреНрд╖ рдкрде рдЕрдиреБрд░реЗрдЦрдг, рд╕рдВрднрд╡рддрдГред