
рдЕрдкрдиреЗ 3 рдбреА рдЧреЗрдо рдореЗрдВ рдмрдирд╛рд╡рдЯ, рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛, рдЫрд╛рдпрд╛, рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ, рдЪрдордХрддреА рд╣реБрдИ рд╡рд╕реНрддреБ, рдкрд░рд┐рд╡реЗрд╢ рд░реЛрдбрд╝рд╛ рдФрд░ рдЕрдиреНрдп рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдпрд╣ рд▓реЗрдЦ рдЫрд╛рдпрд╛рдВрдХрди рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдЦреЗрд▓ рдХреЗ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕реНрддрд░ рдХреЛ рдирдИ рдКрдВрдЪрд╛рдЗрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рддрдХрдиреАрдХ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХрд┐рд╕реА рднреА рдЯреВрд▓ рд╕реНрдЯреИрдХ рдкрд░ рд▓рд╛рдЧреВ / рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЧреЛрдбреЛрдЯ, рдпреВрдирд┐рдЯреА рдпрд╛ рдХреБрдЫ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╢реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рдПрдХ "рдЧреЛрдВрдж" рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рд╢рд╛рдирджрд╛рд░ рдЧреЗрдо рдЗрдВрдЬрди рдкрд╛рдВрдбрд╛ 3 рдбреА рдФрд░ рдУрдкрдирдЬреАрдПрд▓ рд╢реЗрдбрд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ (рдЬреАрдПрд▓рдПрд╕рдПрд▓) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдпрджрд┐ рдЖрдк рд╕рдорд╛рди рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рдорд┐рд▓реЗрдЧрд╛ - рдЖрдк рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╛рдВрдбрд╛ 3 рдбреА рдФрд░ рдУрдкрдирдЬреАрдПрд▓ рдореЗрдВ рдЫрд╛рдпрд╛рдВрдХрди рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
рдЯреНрд░реЗрдирд┐рдВрдЧ
рдиреАрдЪреЗ рд╡рд╣ рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВрдиреЗ рдирдореВрдирд╛ рдХреЛрдб рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛ред
рдмреБрдзрд╡рд╛рд░
рдирдореВрдирд╛ рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
- рд▓рд┐рдирдХреНрд╕ рдордВрдЬрд╝рд░реЛ 4.9.135-1-MANJARO
- OpenGL рд░реЗрдВрдбрд░рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ: GeForce GTX 970 / PCIe / SSE2
- OpenGL рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдЯреНрд░рд┐рдВрдЧ: 4.6.0 NVIDIA 410.73
- g ++ (GCC) 8.2.1 20180831
- рдкрд╛рдВрдбрд╛ 3 рдбреА 1.10.1-1
рд╕рд╛рдордЧреНрд░реА
mill-scene.egg
рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рддреНрдпреЗрдХ
рдмреНрд▓реЗрдВрдбрд░ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рджреЛ рдмрдирд╛рд╡рдЯ рд╣реЛрддреА рд╣реИрдВред
рдкрд╣рд▓реА рдмрдирд╛рд╡рдЯ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢рд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдПрдХ рдлреИрд▓рд╛ рд╣реБрдЖ рдирдХреНрд╢рд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рд╡рд╕реНрддреБ рдЕрдкрдиреЗ рд╡рд░реНрдЯрд┐рдХрд▓ рдХреЗ рдорд╛рдирджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рддреЛ рдПрдХ "рд╕рд╛рджреЗ рдиреАрд▓реЗ" рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╕рднреА рдореЙрдбрд▓реЛрдВ рдореЗрдВ рд╕рдорд╛рди рдкрджреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдХрд╛рд░реНрдб рд╣реИрдВ, рд╢реЗрдбреНрд╕ рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рджреГрд╢реНрдп рдЧреНрд░рд╛рдл рдХреЗ рд░реВрдЯ рдиреЛрдб рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рджреГрд╢реНрдп рдЧреНрд░рд╛рдл рдкрд╛рдВрдбрд╛ 3 рдбреА рдЗрдВрдЬрди
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдПрдХ
рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ ред
рдпрд╣рд╛рдБ рдПрдХ рд░рдВрдЧ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рд░рдВрдЧ
[red = 128, green = 128, blue = 255]
ред
рдпрд╣ рд░рдВрдЧ рдЗрдХрд╛рдИ рдЕрдХреНрд╖ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ z рдЕрдХреНрд╖ рдХреА рд╕рдХрд╛рд░рд╛рддреНрдордХ рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ
[0, 0, 1]
ред
[0, 0, 1] = [ round((0 * 0.5 + 0.5) * 255) , round((0 * 0.5 + 0.5) * 255) , round((1 * 0.5 + 0.5) * 255) ] = [128, 128, 255] = [ round(128 / 255 * 2 - 1) , round(128 / 255 * 2 - 1) , round(255 / 255 * 2 - 1) ] = [0, 0, 1]
рдпрд╣рд╛рдБ рд╣рдо рдпреВрдирд┐рдЯ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рджреЗрдЦрддреЗ рд╣реИрдВ
[0, 0, 1]
рдЬрд┐рд╕реЗ рдПрдХ рд╕рд╛рджреЗ рдиреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
[128, 128, 255]
, рдФрд░ рд╕реЙрд▓рд┐рдб рдмреНрд▓реВ рдПрдХ рдпреВрдирд┐рдЯ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рдУрд╡рд░рд▓реЗ рддрдХрдиреАрдХреЛрдВ рдкрд░ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред
Panda3D
рдЗрд╕ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,
рдкрд╛рдВрдбрд╛ 3 рдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ
рд╢реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ "рдЧреЛрдВрдж" рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рддрдХрдиреАрдХреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЖрдк рдХрд┐рд╕реА рднреА рдЪрдпрдирд┐рдд рд╕реНрдЯреИрдХ рдпрд╛ рдЧреЗрдо рдЗрдВрдЬрди рдореЗрдВ рдпрд╣рд╛рдВ рдЕрдзреНрдпрдпрди рдХреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╛рдВрдбрд╛ 3 рдбреА рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдЦ рдореЗрдВ рдореИрдВрдиреЗ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдпрд╛ рддреЛ рдЕрдкрдиреЗ рд╕реНрдЯреИрдХ рдореЗрдВ рдЙрдирдХреЗ рд╕рдордХрдХреНрд╖ рдХреЛ рдвреВрдВрдв рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдпрджрд┐ рд╡реЗ рд╕реНрдЯреИрдХ рдкрд░ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЦреБрдж рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдВред
рдпрд╣ рдЧреМрд░ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐
gl-coordinate-system default
,
textures-power-2 down
рдФрд░
textures-auto-power-2 1
config.prc
рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рд╡реЗ рдорд╛рдирдХ
рдкрд╛рдВрдбрд╛ 3 рдбреА рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдирд┐рд╣рд┐рдд рдирд╣реАрдВ рд╣реИрдВред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкрд╛рдВрдбрд╛ 3 рдбреА рдПрдХ рдКрдкрд░ рдХреА рдУрд░ рдЬреЗрдб рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдПрдХ рджрд╛рд╣рд┐рдиреЗ рд╣рд╛рде рдХреЗ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдУрдкрдирдЬреАрдПрд▓ рдПрдХ рджрд╛рд╣рд┐рдиреЗ рд╣рд╛рде рдХреЗ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдКрдкрд░ рдХреА рдУрд░ рдзреБрд░реА рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИред
gl-coordinate-system default
рдЖрдкрдХреЛ shaders рдХреЗ рдЕрдВрджрд░ рджреЛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
textures-auto-power-2 1
рд╣рдореЗрдВ рдЙрди рдмрдирд╛рд╡рдЯ рдЖрдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рджреЛ рдХреА рд╢рдХреНрддрд┐ рдирд╣реАрдВ рд╣реИрдВ, рдЕрдЧрд░ рд╕рд┐рд╕реНрдЯрдо рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдПрд╕рдПрд╕рдПрдУ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╕рдордп рдпрд╛ рд╕реНрдХреНрд░реАрди / рдЦрд┐рдбрд╝рдХреА рдХреЗ рднреАрддрд░ рдЕрдиреНрдп рддрдХрдиреАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдХреНрд░реАрди / рдЦрд┐рдбрд╝рдХреА рдХрд╛ рдЖрдХрд╛рд░ рдЖрдорддреМрд░ рдкрд░ рджреЛ рдХреА рд╢рдХреНрддрд┐ рдирд╣реАрдВ рд╣реИред
textures-power-2 down
textures рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рджреЛ рдХреА рд╢рдХреНрддрд┐ рддрдХ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреЗрд╡рд▓ рджреЛ рдХреА рд╢рдХреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд░рд╛рдмрд░ рдЖрдХрд╛рд░ рд╡рд╛рд▓реЗ рдмрдирд╛рд╡рдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдмрдирд╛рдПрдБ
рдпрджрд┐ рдЖрдк рдирдореВрдирд╛ рдХреЛрдб рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдкрд╛рдВрдбрд╛ 3 рдбреА рд▓рд┐рдирдХреНрд╕, рдореИрдХ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред
рд▓рд┐рдирдХреНрд╕
рдЕрдкрдиреЗ рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП
рдкрд╛рдВрдбрд╛ 3 рдбреА рдПрд╕рдбреАрдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред
рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдХрд┐ рдкрд╛рдВрдбрд╛ 3 рдбреА рд╣реЗрдбрд░ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╣рд╛рдВ рд╣реИрдВред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд╡реЗ
/usr/lib/panda3d/
/usr/include/panda3d/
рдФрд░
/usr/lib/panda3d/
ред
рдлрд┐рд░ рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреА рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВред
git clone https://github.com/lettier/3d-game-shaders-for-beginners.git
cd 3d-game-shaders-for-beginners
рдЕрдм рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред
g++ \
-c main.cxx \
-o 3d-game-shaders-for-beginners.o \
-std=gnu++11 \
-O2 \
-I/usr/include/python2.7/ \
-I/usr/include/panda3d/
рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЙрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдХрд░ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВред
g++ \
3d-game-shaders-for-beginners.o \
-o 3d-game-shaders-for-beginners \
-L/usr/lib/panda3d \
-lp3framework \
-lpanda \
-lpandafx \
-lpandaexpress \
-lp3dtoolconfig \
-lp3dtool \
-lp3pystub \
-lp3direct \
-lpthread
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ
рд▓рд┐рдП рдкрд╛рдВрдбрд╛ 3 рдбреА рдореИрдиреБрдЕрд▓ рджреЗрдЦреЗрдВред
рдореИрдХ
рдореИрдХ рдХреЗ рд▓рд┐рдП
рдкрд╛рдВрдбрд╛ 3 рдбреА рдПрд╕рдбреАрдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред
рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдХрд┐ рдкрд╛рдВрдбрд╛ 3 рдбреА рдХреЗ рд╣реЗрдбрд░ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╣рд╛рдВ рд╣реИрдВред
рдлрд┐рд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВред
git clone https://github.com/lettier/3d-game-shaders-for-beginners.git
cd 3d-game-shaders-for-beginners
рдЕрдм рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред рдЖрдкрдХреЛ рдпрд╣ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдЗрдерди 2.7 рдФрд░ рдкрд╛рдВрдбрд╛ 3 рдбреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ рдХрд╣рд╛рдВ рд╣реИрдВред
clang++ \
-c main.cxx \
-o 3d-game-shaders-for-beginners.o \
-std=gnu++11 \
-g \
-O2 \
-I/usr/include/python2.7/ \
-I/Developer/Panda3D/include/
рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЙрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдХрд░ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВред
рдЖрдкрдХреЛ рдпрд╣ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдВрдбрд╛ 3 рдбреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реИрдВред
clang++ \
3d-game-shaders-for-beginners.o \
-o 3d-game-shaders-for-beginners \
-L/Developer/Panda3D/lib \
-lp3framework \
-lpanda \
-lpandafx \
-lpandaexpress \
-lp3dtoolconfig \
-lp3dtool \
-lp3pystub \
-lp3direct \
-lpthread
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ
рд▓рд┐рдП рдкрд╛рдВрдбрд╛ 3 рдбреА рдореИрдиреБрдЕрд▓ рджреЗрдЦреЗрдВред
рд╡рд┐рдВрдбреЛрдЬ
рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП
рдкрд╛рдВрдбрд╛ 3 рдбреА рдПрд╕рдбреАрдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред
рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдХрд┐ рдкрд╛рдВрдбрд╛ 3 рдбреА рд╣реЗрдбрд░ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╣рд╛рдВ рд╣реИрдВред
рдЗрд╕ рднрдВрдбрд╛рд░ рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВред
git clone https://github.com/lettier/3d-game-shaders-for-beginners.git
cd 3d-game-shaders-for-beginners
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ
рд▓рд┐рдП рдкрд╛рдВрдбрд╛ 3 рдбреА рдореИрдиреБрдЕрд▓ рджреЗрдЦреЗрдВред
рдбреЗрдореЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ
рдирдореВрдирд╛ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдбреЗрдореЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡реЗ рд▓рд┐рдирдХреНрд╕ рдпрд╛ рдореИрдХ рдкрд░ рдХреИрд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВред
./3d-game-shaders-for-beginners
рдФрд░ рдЗрд╕рд▓рд┐рдП рд╡реЗ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ:
3d-game-shaders-for-beginners.exe
рдХреАрдмреЛрд░реНрдб рдирд┐рдпрдВрддреНрд░рдг
рдбреЗрдореЛ рдореЗрдВ рдПрдХ рдХреАрдмреЛрд░реНрдб рдирд┐рдпрдВрддреНрд░рдг рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХреИрдорд░реЗ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рднрд╛рд╡реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдкреНрд░рд╕реНрддрд╛рд╡
w
- рджреГрд╢реНрдп рдореЗрдВ рдЧрд╣рд░реА рдЪрд╛рд▓редa
- рджреГрд╢реНрдп рдХреЛ рджрдХреНрд╖рд┐рдгрд╛рд╡рд░реНрдд рдШреБрдорд╛рдПрдВредs
- рджреГрд╢реНрдп рд╕реЗ рджреВрд░ рдЬрд╛рдирд╛редd
- рджреГрд╢реНрдп рд╡рд╛рдорд╛рд╡рд░реНрдд рдШреБрдорд╛рдПрдБред
рд╕реНрд╡рд╛рдЗрдк рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рднрд╛рд╡
y
- рдПрд╕рдПрд╕рдПрдУ рд╕рдХреНрд╖рдо рдХрд░реЗрдВредShift
+ y
- SSAO рдЕрдХреНрд╖рдо рдХрд░реЗрдВредu
- рд╕рд░реНрдХрд┐рдЯ рдХрд╛ рд╕рдорд╛рд╡реЗрд╢редShift
+ u
- рдХрдВрдЯреНрд░реЛрд▓реНрд╕ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░реЗрдВредi
- рдЦрд┐рд▓рдиреЗ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВредShift
+ i
- рдмреНрд▓реВрдо рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВредo
- рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рд╕рдХреНрд╖рдо рдХрд░реЗрдВредShift
+ o
- рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдЕрдХреНрд╖рдо рдХрд░реЗрдВредp
- рдХреЛрд╣рд░реЗ рдХрд╛ рд╕рдорд╛рд╡реЗрд╢редShift
+ p
- рдХреЛрд╣рд░реЗ рдХреЛ рдмрдВрдж рдХрд░реЗрдВредh
- рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрд╣рд░рд╛рдИ рдХрд╛ рд╕рдорд╛рд╡реЗрд╢редShift
+ h
- рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрд╣рд░рд╛рдИ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВредj
- рдкреЛрд╕реНтАНрдЯрд░рд╛рдЗрдЬреЗрд╢рди рд╕рдХреНрд╖рдо рдХрд░реЗрдВредShift
+ j
- рдкреЛрд╕реНрдЯрд░рд╛рдЗрдЬрд╝реЗрд╢рди рдЕрдХреНрд╖рдо рдХрд░реЗрдВk
- рдкрд┐рдХреНрд╕реЗрд▓реЗрд╢рди рд╕рдХреНрд╖рдо рдХрд░реЗрдВредShift
+ k
- рдкрд┐рдХреНрд╕реЗрд▓рдХрд░рдг рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВредl
- рддреЗрдЬредShift
+ l
- рдкреИрдирд╛рдкрди рдЕрдХреНрд╖рдо рдХрд░реЗрдВредn
рдлрд┐рд▓реНрдо рдЕрдирд╛рдЬ рдХрд╛ рд╕рдорд╛рд╡реЗрд╢редShift
+ n
- рдлрд┐рд▓реНрдо рдЕрдирд╛рдЬ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВред
рд╕рдВрджрд░реНрдн рдкреНрд░рдгрд╛рд▓реА
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рд╢реЗрдбреНрд╕ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрджрд░реНрдн рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдпрд╛ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ред рд╡реЗ рд╕рднреА рдиреАрдЪреЗ рдЖрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрджрд░реНрдн рдХреА рдЙрддреНрдкрддреНрддрд┐ рдХреЗ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ
(0, 0, 0)
ред рдЬреИрд╕реЗ рд╣реА рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдпрд╛ рдЕрдиреНрдп рд╡реЗрдХреНрдЯрд░ рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░, рдпрджрд┐ рдПрдХ shader рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕рд╣реА рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдЙрд▓рдЭрди рдореЗрдВ рд╕рдордиреНрд╡рд┐рдд рд╕рд┐рд╕реНрдЯрдо рд╣реИред
рдЖрджрд░реНрд╢
рдореЙрдбрд▓ рдпрд╛ рд╡рд╕реНрддреБ рдХрд╛ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдореЙрдбрд▓ рдХреА рдЙрддреНрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддреАрди-рдЖрдпрд╛рдореА рдореЙрдбрд▓рд┐рдВрдЧ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ, рдмреНрд▓реЗрдВрдбрд░ рдореЗрдВ, рдЗрд╕реЗ рдЖрдорддреМрд░ рдкрд░ рдореЙрдбрд▓ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдВрд╕рд╛рд░
рд╡рд┐рд╢реНрд╡ рд╕реНрдерд╛рди рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рджреГрд╢реНрдп / рд╕реНрддрд░ / рдмреНрд░рд╣реНрдорд╛рдВрдб рдХреА рдЙрддреНрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИред
рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди
рджреГрд╢реНрдп рдХрд╛ рд╕рдордиреНрд╡рдп рд╕реНрдерд╛рди рд╕рдХреНрд░рд┐рдп рдХреИрдорд░реЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИред
рд╡рд┐рдЪреНрдЫреЗрджрди
рдХреИрдорд░рд╛ рдлреНрд░реЗрдо рдХреЗ рдХреЗрдВрджреНрд░ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдХреНрд▓рд┐рдкрд┐рдВрдЧ рд╕реНрдкреЗрд╕ред рдЗрд╕рдореЗрдВ рд╕рднреА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕рдЬрд╛рддреАрдп рд╣реИрдВ рдФрд░ рдЕрдВрддрд░рд╛рд▓
(-1, 1)
ред X рдФрд░ y рдХреИрдорд░рд╛ рдлрд┐рд▓реНрдо рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рд╣реИрдВ, рдФрд░ z рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЧрд╣рд░рд╛рдИ рд╣реИред
рджреГрд╢реНрдпрддрд╛ рдХреЗ рдкрд┐рд░рд╛рдорд┐рдб рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рднреАрддрд░ рдпрд╛ рдХреИрдорд░реЗ рдХреА рджреГрд╢реНрдпрддрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рддрд╛рд░ рдХрд╛рдЯ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдЫреЛрдбрд╝ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрдорд░реЗ рдХреЗ рджреВрд░ рдХреЗ рд╡рд┐рдорд╛рди рдХреЗ рдкреАрдЫреЗ рд╕реЗ рдХрд╛рдЯреЗ рдЧрдП рдХреНрдпреВрдм рдФрд░ рдХрд┐рдирд╛рд░реЗ рдкрд░ рд╕реНрдерд┐рдд рдХреНрдпреВрдм рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИред
рдкреНрд░рджрд░реНрд╢рди
рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕ рд╕реНрдХреНрд░реАрди рдХреЗ рдирд┐рдЪрд▓реЗ рдмрд╛рдПрдВ рдХреЛрдиреЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ (рдЖрдорддреМрд░ рдкрд░) рд╣реЛрддрд╛ рд╣реИред X рд╕реНрдХреНрд░реАрди рдХреА рдЪреМрдбрд╝рд╛рдИ рд╕реЗ рд╢реВрдиреНрдп рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред Y рд╢реВрдиреНрдп рд╕реЗ рд╕реНрдХреНрд░реАрди рдХреА рдКрдБрдЪрд╛рдИ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИред
GLSL
рддрдп рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдмрд▓ рдЬреАрдкреАрдпреВ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЪреВрдВрдХрд┐ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕реНрд╡рдпрдВ рдЗрд╕реЗ рд╢реЗрдбрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ shader рдПрдХ (рдЖрдорддреМрд░ рдкрд░ рдЫреЛрдЯрд╛) рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╕реА рд▓реИрдВрдЧреНрд╡реЗрдЬ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдмрд▓ GPU рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдЯреЗрдкреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╢реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╢реЗрдбреНрд╕ рдореЗрдВ рд╢реАрд░реНрд╖ рд╢реЗрдб, рдЯреЗрд╕реЗрд▓реЗрд╢рди рд╢реЗрдб, рдЬреНрдпрд╛рдорд┐рддреАрдп, рдЯреБрдХрдбрд╝рд╛ рдФрд░ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд╢реЗрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╢реАрд░реНрд╖ рдФрд░ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
рдЪрд░рдгред
#version 140 void main() {}
рдпрд╣рд╛рдБ рдиреНрдпреВрдирддрдо GLSL рд╢реЗрдбрд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ GLSL рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
#version 140 uniform mat4 p3d_ModelViewProjectionMatrix; in vec4 p3d_Vertex; void main() { gl_Position = p3d_ModelViewProjectionMatrix * p3d_Vertex; }
рдпрд╣рд╛рдВ рдЫрдВрдЯрдиреА рдХреА рдЧрдИ рд╢реАрд░реНрд╖ рд╢реЗрд▓реНрдбрд░ GLSL рд╣реИ, рдЬреЛ рдЗрдирдкреБрдЯ рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЛ рдХреНрд▓рд┐рдкрд┐рдВрдЧ рд╕реНрдкреЗрд╕ рдореЗрдВ рдмрджрд▓ рджреЗрддреА рд╣реИ рдФрд░ рдЗрд╕ рдирдИ рд╕реНрдерд┐рддрд┐ рдХреЛ рдПрдХ рд╕рдорд╛рди рд╡рд░реНрдЯреЗрдХреНрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИред
main
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣
void
, рдФрд░
gl_Position
рдЪрд░ рдЗрдирд▓рд╛рдЗрди рдЖрдЙрдЯрдкреБрдЯ рд╣реИред
рдЙрд▓реНрд▓реЗрдЦ рдХреЗ рд▓рд╛рдпрдХ рджреЛ рдХреАрд╡рд░реНрдб рд╣реИрдВ:
uniform
рдФрд░ рдПрдХ
in
ред
uniform
рдХреАрд╡рд░реНрдб рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╕рднреА рд╡рд░реНрдЯрд┐рдХрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИред Panda3D рд╕реНрд╡рдпрдВ
p3d_ModelViewProjectionMatrix
рд╕реЗрдЯ
p3d_ModelViewProjectionMatrix
рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд╣реА рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИред
рдХреАрд╡рд░реНрдб рдореЗрдВ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ shader рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рд╢реАрд░реНрд╖ shader рдХреЛ рдкреНрд░рддреНрдпреЗрдХ vertex рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╢реАрд░реНрд╖ shader рд╕рдВрд▓рдЧреНрди рд╣реЛрддрд╛ рд╣реИред
#version 140 out vec4 fragColor; void main() { fragColor = vec4(0, 1, 0, 1); }
рдпрд╣рд╛рдВ рдЫрдВрдЯрдиреА рдХреА рдЧрдИ GLSL рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдиреЗ рдХреА рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЬреЛ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд░рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╣рд░реЗ рд░рдВрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдХреНрд░реАрди рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдЯреБрдХрдбрд╝реЗ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЙрдЯ рдХреАрд╡рд░реНрдб рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред
out
рдХреАрд╡рд░реНрдб рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ shader рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдирд╛рдо
fragColor
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рджреЛ рд╢реЗрдбреНрд╕ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИред
рдмрдирд╛рд╡рдЯ рдкреНрд░рддрд┐рдкрд╛рджрди
рд╕реАрдзреЗ рд╕реНрдХреНрд░реАрди рдкрд░ рд░реЗрдВрдбрд░ / рдбреНрд░рд╛рдЗрдВрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдирдореВрдирд╛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
рдирд╛рдо "рдмрдирд╛рд╡рдЯ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛" (рдмрдирд╛рд╡рдЯ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛)ред рдПрдХ рдмрдирд╛рд╡рдЯ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдлреНрд░реЗрдо рдмрдлрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рд╡рдЯ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рдПрдХ рд╕рд┐рдВрдЧрд▓ рдлреНрд░реЗрдо рдмрдлрд░ рдореЗрдВ рдХрдИ рдЯреЗрдХреНрд╕рдЪрд░ рдХреЛ рдмрд╛рдВрдз рд╕рдХрддреЗ рд╣реИрдВред
рдлреНрд░реЗрдо рдмрдлрд░ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдмрдирд╛рд╡рдЯ рд╡реИрдХреНрдЯрд░ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ shader рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯ рдЖрдПред рдЖрдорддреМрд░ рдкрд░ рдпреЗ рд╡реИрдХреНрдЯрд░ рд░рдВрдЧреАрди рд╡реИрдХреНрдЯрд░
(r, g, b, a)
, рд▓реЗрдХрд┐рди рд╡реЗ рдпрд╛ рддреЛ рд╕реНрдерд┐рддрд┐ рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╡реИрдХреНрдЯрд░
(x, y, z, w)
ред рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдзреНрдп рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЯреБрдХрдбрд╝рд╛ shader рдПрдХ рдЕрд▓рдЧ рд╡реЗрдХреНрдЯрд░ рдЙрддреНрдкрд╛рджрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕реНрдерд┐рддрд┐ рдФрд░ рд╢реАрд░реНрд╖ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рд╕ рдореЗрдВ рдХрдЯреМрддреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Panda3D рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХрд╛ рдереЛрдХ
рдлреНрд░реЗрдо рдмрдлрд░ рдЯреЗрдХреНрд╕рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝рд╛ shader рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЙрдЪреНрдЪ рдлреНрд░реЗрдо рджрд░ (рдПрдлрдкреАрдПрд╕) рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рд╕ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдирдореВрдирд╛ рдХреЛрдб рд╕реЗ рдлреНрд░реЗрдо рдмрдлрд░ рдХреЗ рд▓рд┐рдП рджреЛ рдмрдирд╛рд╡рдЯ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВред
рдкрд╣рд▓реА рд╕рдВрд░рдЪрдирд╛ рд╡рд░реНрдЯреЗрдХреНрд╕ рдФрд░ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХреА рдПрдХ рдХрд┐рд╕реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рдлреНрд░реЗрдо рдмрдлрд░ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдПрдХ рддрд░рдмреВрдЬ рджреГрд╢реНрдп рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рдЪрдХреНрдХреА рдХреЗ рд╕рд╛рде рдЪрд░рдг рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрдиреЗ рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реА рдЕрдВрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдЧреБрдЬрд░рддреА рд╣реИред
рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
- рднрд╡рд┐рд╖реНрдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЬреНрдпрд╛рдорд┐рддрд┐ рдбреЗрдЯрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдерд┐рддрд┐ рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐) рдмрдЪрд╛рддрд╛ рд╣реИред
- рднрд╡рд┐рд╖реНрдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдбреЗрдЯрд╛ (рдЬреИрд╕реЗ рдлреИрд▓рд╛рдирд╛ рд░рдВрдЧ) рдмрдЪрд╛рддрд╛ рд╣реИред
- рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрдирд╛рд╡рдЯ (рдлреИрд▓рд╛рдирд╛, рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ, рдЫрд╛рдпрд╛ рдирдХреНрд╢реЗ, рдЖрджрд┐) рдХреЗ рдпреВрд╡реА-рдмрдВрдзрди рдмрдирд╛рддрд╛ рд╣реИред
- рдкрд░рд┐рд╡реЗрд╢, рдлреИрд▓рд╛рдирд╛, рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдФрд░ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред
- рд░реЗрдВрдбрд░ рдХреЛрд╣рд░рд╛ред
рджреВрд╕рд░реА рд╕рдВрд░рдЪрдирд╛ рдПрдХ рдСрд░реНрдереЛрдЧреЛрдирд▓ рдХреИрдорд░рд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реНрдХреНрд░реАрди рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдПрдХ рдЖрдпрдд рд╣реИред
рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рдХреЗрд╡рд▓ рдЪрд╛рд░ рдЪреЛрдЯрд┐рдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рд╕рдВрдЧрдд рдЕрдВрд╢реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреА рд╣реИред
рджреВрд╕рд░реА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ, рдирдореВрдирд╛ рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддрд╛ рд╣реИ:
- рдПрдХ рдФрд░ рдлреНрд░реЗрдо рдмрдлрд░ рдмрдирд╛рд╡рдЯ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
- рдПрдХ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдлреНрд░реЗрдо рдмрдлрд░ рдмрдирд╛рд╡рдЯ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред
рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рдлреНрд░реЗрдо рдмрдлрд░ рдмрдирд╛рд╡рдЯ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реА рдлреНрд░реЗрдо рдХреЛ рдЕрдиреНрдп рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдФрд░ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдмрдирд╛рд╡рдЯ
рдЯреЗрдХреНрд╕рдЪрд░рд┐рдВрдЧ рдПрдХ рд░рдВрдЧ рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИ рдЬреЛ рдпреВрд╡реА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдпреВ рдФрд░ рд╡реА рдХреЗ рдореВрд▓реНрдп рд╢реВрдиреНрдп рд╕реЗ рдПрдХ рддрдХ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдпреВрд╡реА рд╕рдордиреНрд╡рдп рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╢реАрд░реНрд╖ рдЫрд╛рдпрд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЦрдВрдбрд┐рдд рд╢реЗрдб рдХреЛ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдпреВрд╡реА рд╕рдордиреНрд╡рдп рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдпреВрд╡реА рд╕рдордиреНрд╡рдп рдХрд╣реАрдВ-рдХрд╣реАрдВ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдЪреЗрд╣рд░реЗ рдХреЛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдКрд░реНрдзреНрд╡ рдХреЗ рдпреВрд╡реА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдмреАрдЪ рд╣реИред
рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░
#version 140 uniform mat4 p3d_ModelViewProjectionMatrix; in vec2 p3d_MultiTexCoord0; in vec4 p3d_Vertex; out vec2 texCoord; void main() { texCoord = p3d_MultiTexCoord0; gl_Position = p3d_ModelViewProjectionMatrix * p3d_Vertex; }
рдпрд╣рд╛рдВ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдЯреЗрдХреНрд╕рдЪрд░ рдХреЗ рд╕рдордиреНрд╡рдп рдХреЛ рдЯреБрдХрдбрд╝рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рджреЛ-рдЖрдпрд╛рдореА рд╡реЗрдХреНрдЯрд░ рд╣реИ: рдпреВ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рди рдФрд░ рд╡реА рдХреЗ рд▓рд┐рдП рдПрдХред
рдШрд░реНрд╖рдг рдХрд░рдиреЗ рд╡рд╛рд▓рд╛
#version 140 uniform sampler2D p3d_Texture0; in vec2 texCoord; out vec2 fragColor; void main() { texColor = texture(p3d_Texture0, texCoord); fragColor = texColor; }
рдпрд╣рд╛рдБ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЦрдВрдб shader рдЕрдкрдиреЗ UV рд╕рдордиреНрд╡рдп рдореЗрдВ рд░рдВрдЧ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд░рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╕реНрдХреНрд░реАрди рднрд░реЗрдВ рдмрдирд╛рд╡рдЯ
#version 140 uniform sampler2D screenSizedTexture; out vec2 fragColor; void main() { vec2 texSize = textureSize(texture, 0).xy; vec2 texCoord = gl_FragCoord.xy / texSize; texColor = texture(screenSizedTexture, texCoord); fragColor = texColor; }
рдПрдХ рдмрдирд╛рд╡рдЯ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╕рдордп, рдЬрд╛рд▓ рдПрдХ рд╕рдкрд╛рдЯ рдЖрдпрдд рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рдорд╛рди рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдЬрд╛рдирддреЗ рд╣реБрдП, рдпреВрд╡реА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдП) рдпреВрд╡реА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЖрдпрдд рдкрд░ рд╕реНрдХреНрд░реАрди рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдмрдирд╛рд╡рдЯ рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ, рдФрд░
рдмреА) рдЦрдВрдб рдХреЗ x рдФрд░ y рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХред
X рдХреЛ U рд╕реЗ рдмрд╛рдБрдзрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЖрдиреЗ рд╡рд╛рд▓реА рдмрдирд╛рд╡рдЯ рдХреА рдЪреМрдбрд╝рд╛рдИ рд╕реЗ x рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕реА рддрд░рд╣, рд╡рд╛рдИ рдХреЛ рд╡реА рд╕реЗ рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЖрдиреЗ рд╡рд╛рд▓реА рдмрдирд╛рд╡рдЯ рдХреА рдКрдВрдЪрд╛рдИ рд╕реЗ рд╡рд╛рдИ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирдореВрдирд╛ рдХреЛрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рдХрд╛рд╢
рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рд╡реЗрд╢ рдХреЗ рдкрд╣рд▓реБрдУрдВ рдХреЛ рдлреИрд▓рд╛рдирд╛, рдлреИрд▓рд╛рдирд╛, рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдФрд░ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдирдореВрдирд╛ рдХреЛрдб рдлреЛрдВрдЧ рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рд╡реЗрд╢реАрдп рдкреНрд░рдХрд╛рд╢ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдкрд╛рдВрдбрд╛ 3 рдбреА рд╣рдореЗрдВ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрдЯреЗрдХреНрд╕ рдФрд░ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЪреАрдЬ рдПрдХ рдЫрд╛рдпрд╛ рдирдХреНрд╢рд╛ рд╣реИ рдФрд░ рдЫрд╛рдпрд╛ рдХреЛ рдкреНрд░рдХрд╛рд╢ рдпрд╛ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреА рдЬрдЧрд╣ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫрд╛рдпрд╛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИред
рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ, рд╣рдореЗрдВ рд╕реАрди рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд╕реНрдерд╛рди рд╕реЗ рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдЫрд╛рдпрд╛ рдпрд╛ рдкреНрд░рдХрд╛рд╢ рд╕реНрдерд╛рди рдореЗрдВ рдмрджрд▓рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рд╛рдврд╝реЗ рд╕рд╛рдврд╝реЗ рд╕рд╛рдврд╝реЗ рд╕рд╛рдврд╝реЗ рд╕рд╛рддреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдЖрдПрдЧрд╛ред рдПрдХ рдЫрд╛рдпрд╛ рдпрд╛ рдкреНрд░рдХрд╛рд╢ рд╕реНрдерд╛рди рдПрдХ рдЕрдВрддрд░рд┐рдХреНрд╖ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рдордиреНрд╡рдп рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИ (рдореВрд▓ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рд╣реИ)ред
рдШрд░реНрд╖рдг рдХрд░рдиреЗ рд╡рд╛рд▓рд╛
рдЯреБрдХрдбрд╝рд╛ shader рдкреНрд░рдХрд╛рд╢ рдЧрдгрдирд╛ рдХреЗ рдереЛрдХ рдХрд░рддрд╛ рд╣реИред
рд╕рд╛рдордЧреНрд░реА
рдкрд╛рдВрдбрд╛ 3 рдбреА рд╣рдореЗрдВ рдЙрд╕ рдЬрд╛рд▓ рдпрд╛ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА (рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ) рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдПрдХрд╛рдзрд┐рдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рджреГрд╢реНрдп рдХреА рд░реЛрд╢рдиреА рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛рдПрдВ, рд╣рдо рдПрдХ рдбреНрд░рд╛рдЗрд╡ рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рдлреИрд▓рд╛рдирд╛ рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рд░рдВрдЧ рджреЛрдиреЛрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред
рдЕрдм рд╣рдо рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдлреИрд▓рд╛рдирд╛ рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рд░рдВрдЧреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рдХрд╛рд╢ рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд╖реЗрддреНрд░

рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдлреИрд▓рдиреЗ рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рд░рдВрдЧреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЪрд╛рд░ рдмреБрдирд┐рдпрд╛рджреА рд╡реИрдХреНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкреНрд░рдХрд╛рд╢ рдХреА рджрд┐рд╢рд╛ рд╡реЗрдХреНрдЯрд░ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдиреАрд▓рд╛ рддреАрд░ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рдПрдХ рд╣рд░рд╛ рддреАрд░ рд╣реИ рдЬреЛ рд▓рдВрдмрд╡рдд рдКрдкрд░ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╡реЗрдХреНрдЯрд░ рдПрдХ рдиреАрд▓рд╛ рддреАрд░ рд╣реИ рдЬреЛ рдкреНрд░рдХрд╛рд╢ рдХреА рджрд┐рд╢рд╛ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдБрдЦ рдпрд╛ рджреГрд╢реНрдп рд╡реЗрдХреНрдЯрд░ рдирд╛рд░рдВрдЧреА рддреАрд░ рд╣реИ рдЬреЛ рдХреИрдорд░реЗ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИред
рдкреНрд░рдХрд╛рд╢ рдХреА рджрд┐рд╢рд╛ рд╢реАрд░реНрд╖ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╡реЗрдХреНрдЯрд░ рд╣реИред
рдпрджрд┐ рдпрд╣ рджрд┐рд╢рд╛рддреНрдордХ рдкреНрд░рдХрд╛рд╢ рд╣реИ, рддреЛ
p3d_LightSource[i].position.w
,
p3d_LightSource[i].position.w
рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рджрд┐рд╢рд╛рддреНрдордХ рдкреНрд░рдХрд╛рд╢ рдХреА рдХреЛрдИ рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рджрд┐рд╢рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдпрд╣ рджрд┐рд╢рд╛рддреНрдордХ рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рд╣реИ, рддреЛ рд░реЛрд╢рдиреА рдХреА рджрд┐рд╢рд╛ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдпрд╛ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рджрд┐рд╢рд╛рддреНрдордХ рдкреНрд░рдХрд╛рд╢ рдХреЗ рд▓рд┐рдП рдкрд╛рдВрдбрд╛ 3
p3d_LightSource[i].position.xyz
-direction
to
-direction
рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
рд╢реАрд░реНрд╖ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдПрдХ рдЗрдХрд╛рдИ рд╡реЗрдХреНрдЯрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпреВрдирд┐рдЯ рд╡реИрдХреНрдЯрд░ рдореЗрдВ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рддреАрди рдФрд░ рд╡реИрдХреНрдЯрд░ рдЪрд╛рд╣рд┐рдПред
рд╣рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рджрд┐рд╢рд╛ рдХреА рднрд╛рдЧреАрджрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдПрдХрддрд╛ (рдпреВрдирд┐рдЯ рд╡реЗрдХреНрдЯрд░) рдХреЗ рдмрд░рд╛рдмрд░ рджреВрд░реА рдпрд╛ рдкрд░рд┐рдорд╛рдг рджреЗрддрд╛ рд╣реИред
рджреЗрдЦрдиреЗ рдХреА рджрд┐рд╢рд╛ рд╡рд░реНрдЯреЗрдХреНрд╕ / рдЯреБрдХрдбрд╝реЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрдЯреЗрдХреНрд╕ / рдЯреБрдХрдбрд╝рд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреИрдорд░реЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИред рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рджреЗрдЦрдиреЗ рдХреА рдЬрдЧрд╣ рдореЗрдВ рд╢реАрд░реНрд╖ / рдЦрдВрдб рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреИрдорд░рд╛ (рдЖрдВрдЦ) рд╕реЗ рд╡рд░реНрдЯреЗрдХреНрд╕ / рдлреНрд░реЗрдЧреНрдореЗрдВрдЯ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд╡рд░реНрдЯреЗрдХреНрд╕ / рдЯреБрдХрдбрд╝рд╛ рд╕реЗ рдХреИрдорд░рд╛ (рдЖрдВрдЦ) рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВред
рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╡реЗрдХреНрдЯрд░ рд╕рддрд╣ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реЛрд╢рдиреА рдХреА рджрд┐рд╢рд╛ рдХрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╣реИред рдЬрдм рдкреНрд░рдХрд╛рд╢ рдХреА "рдХрд┐рд░рдг" рд╕рддрд╣ рдХреЛ рдЫреВрддреА рд╣реИ, рддреЛ рдпрд╣ рдЙрд╕реА рдХреЛрдг рдкрд░ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡рд╣ рдЧрд┐рд░ рдЧрдпрд╛ рдерд╛ред рд░реЛрд╢рдиреА рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХреА рджрд┐рд╢рд╛ рд╡реЗрдХреНрдЯрд░ рдХреЗ рдмреАрдЪ рдХреЗ рдХреЛрдг рдХреЛ "рдШрдЯрдирд╛ рдХрд╛ рдХреЛрдг" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╡реЗрдХреНрдЯрд░ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рдмреАрдЪ рдХреЗ рдХреЛрдг рдХреЛ "рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЛрдг" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдкрдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдкреНрд░рдХрд╛рд╢ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рдВрдХреЗрдд рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдВрдЦ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рдорд╛рди рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдЖрдВрдЦ рдХреА рджрд┐рд╢рд╛ рдКрдкрд░ / рдЯреБрдХрдбрд╝реЗ рд╕реЗ рдХреИрдорд░реЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд╛рддреА рд╣реИред рдкрд░рд╛рд╡рд░реНрддрд┐рдд рдкреНрд░рдХрд╛рд╢ рдХреА рдЪрдордХ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╣рдо рд░рд┐рдлреНрд▓реЗрдХреНрдЯ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдбрд┐рдлреНрдпреВрдЬрд╝ рд▓рд╛рдЗрдЯрд┐рдВрдЧ
рдлреИрд▓рд╛рдирд╛ рдкреНрд░рдХрд╛рд╢ рдХреА рдЪрдордХ рд╕рддрд╣ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХреА рдЕрджрд┐рд╢ рдЙрддреНрдкрд╛рдж рдФрд░ рдПрдХрд▓ рд╡реЗрдХреНрдЯрд░ рдХреА рд░реЛрд╢рдиреА рдХреА рджрд┐рд╢рд╛ рд╣реИред рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рд╢реВрдиреНрдп рд╕реЗ рдПрдХ рддрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рджреЛрдиреЛрдВ рд╡реИрдХреНрдЯрд░ рдПрдХ рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЪрдордХ рдПрдХрддрд╛ рд╣реИред рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдПрдХрддрд╛ рд╕реЗ рдХрдо рд╣реЛрдЧрд╛ред
рдпрджрд┐ рд░реЛрд╢рдиреА рд╕рджрд┐рд╢ рд╕рдорд╛рди рджрд┐рд╢рд╛ рдХреА рдУрд░ рдЬрд╛рддреА рд╣реИ, рддреЛ рдлреИрд▓рдиреЗ рд╡рд╛рд▓реА рд░реЛрд╢рдиреА рдХреА рдЪрдордХ рдПрдХрддрд╛ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред
рдпрджрд┐ рдлреИрд▓рд╛рдирд╛ рдкреНрд░рдХрд╛рд╢ рдХреА рдЪрдордХ рд╢реВрдиреНрдп рд╕реЗ рдХрдо рдпрд╛ рдЙрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЕрдЧрд▓реЗ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдкрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдм рд╣рдо рдЗрд╕ рд╕реНрд░реЛрдд рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рд╡рд┐рд╕рд░рд┐рдд рд░рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдлреИрд▓рд╛рдирд╛ рдкреНрд░рдХрд╛рд╢ рдХреА рдЪрдордХ рдПрдХрддрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рдлреИрд▓рд╛рдирд╛ рд░рдВрдЧ рдлреИрд▓рд╛рдирд╛ рдмрдирд╛рд╡рдЯ рдХреЗ рд░рдВрдЧ рдФрд░ рдкреНрд░рдХрд╛рд╢ рдХреЗ рд░рдВрдЧ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реЛрдЧрд╛ред рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЪрдордХ рдкрд░, рдлреИрд▓рд╛рдирд╛ рд░рдВрдЧ рдЧрд╣рд░рд╛ рд╣реЛрдЧрд╛редрдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рдлреИрд▓рд╛рдирд╛ рд░рдВрдЧ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдпрд╣ рдлреИрд▓рд╛рдиреЗ рдХреА рдмрдирд╛рд╡рдЯ рдХреЗ рд░рдВрдЧ рд╕реЗ рдЕрдзрд┐рдХ рдЙрдЬреНрдЬреНрд╡рд▓ рди рд╣реЛред рдпрд╣ рджреГрд╢реНрдп рдХреЗ рдУрд╡рд░рдПрдХреНрд╕рдкреЛрдЬрд░ рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛редрдкреНрд░рдХрд╛рд╢ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд
рдлреИрд▓рд╛рдирд╛ рдкреНрд░рдХрд╛рд╢ рдХреЗ рдмрд╛рдж, рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред
рдкрд░рд╛рд╡рд░реНрддрд┐рдд рдкреНрд░рдХрд╛рд╢ рдХреА рдЪрдордХ рдЖрдВрдЦ рд╡реЗрдХреНрдЯрд░ рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╡реЗрдХреНрдЯрд░ рдХреЗ рдмреАрдЪ рдЕрджрд┐рд╢ рдЙрддреНрдкрд╛рдж рд╣реИред рдЬреИрд╕реЗ рдХрд┐ рд╡рд┐рд╕рд░рд┐рдд рдкреНрд░рдХрд╛рд╢ рдХреА рдЪрдордХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рджреЛ рд╡реИрдХреНрдЯрд░ рдПрдХ рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд╢ рдХреА рдЪрдордХ рдПрдХрддрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдХреЛрдИ рдЕрдиреНрдп рдЪрдордХ рдЗрд╕ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХреА рдЧрдИ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рд░рдВрдЧ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░ рджреЗрдЧреАред
рд╕рд╛рдордЧреНрд░реА рдХреА рдЪрдордХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдкрд░рд╛рд╡рд░реНрддрд┐рдд рдкреНрд░рдХрд╛рд╢ рдХреА рд░реЛрд╢рдиреА рдХрд┐рддрдиреА рдмрд┐рдЦрд░реЗрдЧреАред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдПрдХ рд╕рд┐рдореБрд▓реЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмреНрд▓реЗрдВрдбрд░ рдореЗрдВред рдмреНрд▓реЗрдВрдбрд░ рдореЗрдВ, рдЗрд╕реЗ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рд╣рд╛рд░реНрдбрдиреЗрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИредрд╕реНрдкреЙрдЯрд▓рд╛рдЗрдЯ
рдпрд╣ рдХреЛрдб рдкреНрд░рдХрд╛рд╢ рдХреЛ рд╕реНрдкреЙрдЯрд▓рд╛рдЗрдЯ рд╢рдВрдХреБ рдпрд╛ рдкрд┐рд░рд╛рдорд┐рдб рдХреЗ рдмрд╛рд╣рд░ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, Panda3D рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд spotDirection
рдФрд░ spotCosCutoff
рджрд┐рд╢рд╛рддреНрдордХ рдФрд░ рдореМрдХреЗ рд░реЛрд╢рдиреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╕реНрдкреЙрдЯрд▓рд╛рдЗрдЯ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рддрд┐ рдФрд░ рдПрдХ рджрд┐рд╢рд╛ рджреЛрдиреЛрдВ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рджрд┐рд╢рд╛рддреНрдордХ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рдХреЗрд╡рд▓ рджрд┐рд╢рд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдмрд┐рдВрджреБ рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХреЛрдб рдмрдпрд╛рдиреЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕рднреА рддреАрди рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред spotCosCutoff = cosine(0.5 * spotlightLensFovAngle);
рдЕрдЧрд░ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж "рд░реЛрд╢рдиреА рдХрд╛ рдЯреБрдХрдбрд╝рд╛-рд╕реНрд░реЛрдд" рдФрд░ рд╕рд░реНрдЪрд▓рд╛рдЗрдЯ рдХреА рджрд┐рд╢рд╛ рд╡реЗрдХреНрдЯрд░ рдЦреЛрдЬ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЖрдзреЗ рдХреЛрдг рдХреЗ рдХреЛрд╕рд╛рдЗрди рд╕реЗ рдХрдо рд╣реИ, рддреЛ рд╢реЗрдбрд░ рдЗрд╕ рд╕реНрд░реЛрдд рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИредрдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рд╕рд╛рдЗрди рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ unitLightDirection
ред unitLightDirection
рдЦреЛрдЬ рд╕реЗ рдкреНрд░рдХрд╛рд╢ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЦреЛрдЬ рд╕реЗ рдЦрдВрдб рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ spotDirection
рд╕реАрдзреЗ рд╕рд░реНрдЪрд▓рд╛рдЗрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рджреВрд░реА рдкрд░ рдЦреЛрдЬ рдХреЗ рдкрд┐рд░рд╛рдорд┐рдб рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИредрджрд┐рд╢рд╛рддреНрдордХ рдФрд░ рд╕реНрдкреЙрдЯ рд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╛рдВрдбрд╛ 3 рдбреА spotCosCutoff
-1 рдХрд╛ рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ ред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж -1 рд╕реЗ 1. рддрдХ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ unitLightDirectionDelta
, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ -1 рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред
рдХреЛрдб рдХреА рддрд░рд╣ unitLightDirectionDelta
, рдпрд╣ рдХреЛрдб рднреА рд╕рднреА рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕реНрдкреЙрдЯрд▓рд╛рдЗрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЙрдЬреНрдЬрд╡рд▓ рдмрдирд╛ рджреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкреЙрдЯрд▓рд╛рдЗрдЯ рдкрд┐рд░рд╛рдорд┐рдб рдХреЗ рдХреЗрдВрджреНрд░ рдХреЗ рдкрд╛рд╕ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд╢ рдХреЗ рджрд┐рд╢рд╛рддреНрдордХ рдФрд░ рдмрд┐рдВрджреБ рд╕реНрд░реЛрддреЛрдВ рдХреЗ spotExponent
рд▓рд┐рдП рд╢реВрдиреНрдп рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╢реВрдиреНрдп рдХреА рд╢рдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдореВрд▓реНрдп рдПрдХрддрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдлреИрд▓рд╛рдирд╛ рд░рдВрдЧ рдЦреБрдж рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдПрдХ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдмрджрд▓рддрд╛ рдирд╣реАрдВ рд╣реИредрдЫрд╛рдпрд╛
рдкрд╛рдВрдбрд╛ 3 рдбреА рдЫрд╛рдпрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдЫрд╛рдпрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдФрд░ рдЫрд╛рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рддрд╛ рд╣реИред рд╕реНрд╡рдпрдВ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рджреЗрдЦрдиреЗ рдХреА рдЬрдЧрд╣ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдкреНрд░рдХрд╛рд╢ рд╕реНрдерд╛рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИ (рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИрдВ)ред рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдПрдХ рдЫрд╛рдпрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рджреГрд╢реНрдп рдХреЛ рдлреНрд░реЗрдо рдмрдлрд░ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдлрд╝реНрд░реЗрдо рдмрдлрд░ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рд╕реЗ рдЕрдВрд╢реЛрдВ рддрдХ рдХреА рджреВрд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ "рдЧрд╣рд░рд╛рдИ рдХрд╛ рдирдХреНрд╢рд╛" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╣реЛрдордореЗрдб рдбреЗрдкреНрде рдореИрдк рдХреЛ рд╢реЗрдбрд░ рдХреЗ рд░реВрдк uniform sampler2DShadow
рдореЗрдВ рдФрд░ рд╢реИрдбреЛ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ uniform mat4
ред рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреБрди: рдмрдирд╛рдПрдВрдЧреЗ рдХрд┐ рдкрд╛рдВрдбрд╛ 3 рдбреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИредрджрд┐рдЦрд╛рдП рдЧрдП рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ textureProj
, рдЬреЛ рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдЕрд▓рдЧ рд╣реИ texture
ред textureProj
рдкрд╣рд▓реЗ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд vertexInShadowSpaces[i].xyz
рд╣реИ vertexInShadowSpaces[i].w
ред рд╡рд╣ рдлрд┐рд░ vertexInShadowSpaces[i].xy
рдЫрд╛рдпрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдЧрд╣рд░рд╛рдИ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдлрд┐рд░ рд╡рд╣ vertexInShadowSpaces[i].z
рдЫрд╛рдпрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдХреА рдЧрд╣рд░рд╛рдИ рдХреЗ рд╕рд╛рде рд╢реАрд░реНрд╖ рдХреА рдЧрд╣рд░рд╛рдИ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ vertexInShadowSpaces[i].xy
ред рдпрджрд┐ рддреБрд▓рдирд╛ рд╕рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдпрд╣ textureProj
рдПрдХ рд▓реМрдЯ рдЖрддреА рд╣реИред рдЕрдиреНрдпрдерд╛, рдпрд╣ рд╢реВрдиреНрдп рджреЗрддрд╛ рд╣реИред рд╢реВрдиреНрдп рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╢реАрд░реНрд╖ / рдЯреБрдХрдбрд╝рд╛ рдЫрд╛рдпрд╛ рдореЗрдВ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╢реАрд░реНрд╖ / рдЯреБрдХрдбрд╝рд╛ рдЫрд╛рдпрд╛ рдореЗрдВ рдирд╣реАрдВ рд╣реИредрдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ textureProj
рдпрд╣ рдПрдХ рдорд╛рди рдХреЛ рд╢реВрдиреНрдп рд╕реЗ рдПрдХ рддрдХ рднреА рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЫрд╛рдпрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВtextureProj
рдЖрд╕рдиреНрди рдЧрд╣рд░рд╛рдИ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдИ рдЧрд╣рд░рд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рднрд╛рд░рд┐рдд рдФрд╕рдд рджреЗрддрд╛ рд╣реИред рдпрд╣ рднрд╛рд░рд┐рдд рдФрд╕рдд рдЫрд╛рдпрд╛ рдХреЛ рдЪрд┐рдХрдирд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИредрдХреНрд╖реАрдгрди
рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рджреВрд░реА рдкреНрд░рдХрд╛рд╢ рдХреА рджрд┐рд╢рд╛ рд╡реЗрдХреНрдЯрд░ рдХреА рднрдпрд╛рд╡рд╣рддрд╛ рдпрд╛ рд▓рдВрдмрд╛рдИ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рд░реЛрд╢рдиреА рдХреА рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рджрд┐рд╢рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕реА рджреВрд░реА рдПрдХрддрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧреАредрдХреНрд╖реАрдгрди рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рджреВрд░реА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЧрддрд┐рд░реЛрдз рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕реНрд░реЛрдд рд╕реЗ рджреВрд░ рдкреНрд░рдХрд╛рд╢ рдХрд╛ рдкреНрд░рднрд╛рд╡ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИредрдкреИрд░рд╛рдореАрдЯрд░ constantAttenuation
, linearAttenuation
рдФрд░ quadraticAttenuation
рдЖрдк рдХреЛрдИ рднреА рдорд╛рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ constantAttenuation = 1
, linearAttenuation = 0
рдФрд░ quadraticAttenuation = 1
ред рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде, рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдпрд╣ рдПрдХрддрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рджреВрд░ рдЬрд╛рдиреЗ рдкрд░ рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИредрдЕрдВрддрд┐рдо рд░рдВрдЧ рдкреНрд░рдХрд╛рд╢
рдкреНрд░рдХрд╛рд╢ рдХреЗ рдЕрдВрддрд┐рдо рд░рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдлреИрд▓рд╛рдирд╛ рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рд░рдВрдЧ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рдбреНрд░рд╛рдЗрд╡ рдореЗрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИредрд╡реНрдпрд╛рдкрдХ
рдкреНрд░рдХрд╛рд╢ рдореЙрдбрд▓ рдореЗрдВ рдкрд░рд┐рд╡реЗрд╢ рдкреНрд░рдХрд╛рд╢ рдШрдЯрдХ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдкрд░рд┐рд╡реЗрд╢ рд░рдВрдЧ, рдкрд░рд┐рд╡реЗрд╢ рдкреНрд░рдХрд╛рд╢ рдХрд╛ рд░рдВрдЧ, рдФрд░ рдлреИрд▓рд╛рдирд╛ рдмрдирд╛рд╡рдЯ рдХреЗ рд░рдВрдЧ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИредрдкрд░рд┐рд╡реЗрд╢ рдкреНрд░рдХрд╛рд╢ рдХрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрд░реЛрдд рдХрднреА рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд┐рдд рд╡рд┐рд╕рд░рд┐рдд рдФрд░ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд░рдВрдЧреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдЧрдгрдирд╛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПредрдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ SSAO рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╕рдордп рдкрд░рд┐рд╡реЗрд╢ рдкреНрд░рдХрд╛рд╢ рдХрд╛ рд░рдВрдЧ рдХрд╛рдо рдореЗрдВ рдЖрддрд╛ рд╣реИредрдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛
рдЕрдВрддрд┐рдо рд░рдВрдЧ рдкрд░рд┐рд╡реЗрд╢ рд░рдВрдЧ, рдлреИрд▓рд╛рдирд╛ рд░рдВрдЧ, рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд░рдВрдЧ рдФрд░ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд░рдВрдЧ рдХрд╛ рдпреЛрдЧ рд╣реИредрд╕реНрд░реЛрдд рдХреЛрдб
рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ

рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рдмрд┐рдирд╛ рд╕рддрд╣ рдкрд░ рдирдП рднрд╛рдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░, рдЬрдм рдПрдХ 3 рдбреА рдореЙрдбрд▓рд┐рдВрдЧ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореЗрд╖ рдХреЗ рдЙрдЪреНрдЪ рдФрд░ рдирд┐рдореНрди рдкрд╛рд▓реА рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдлрд┐рд░ рдЙрдЪреНрдЪ рдкрд╛рд▓реА рдЬрд╛рд▓ рд╕реЗ рдХреЛрдиреЗ рдХрд╛ рдорд╛рдирджрдВрдб рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдмреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдмрдирд╛рд╡рдЯ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢рд╛ рд╣реИред рдлрд┐рд░ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рдЕрдВрджрд░ рд╣рдо рдХрдо рдкреЙрд▓реА рдореЗрд╖ рдХреЗ рдХреЛрдиреЗ рдХреЗ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдореЗрдВ рдмреЗрдХ рдХрд┐рдП рдЧрдП рдЙрдЪреНрдЪ рдкреЙрд▓реА рдореЗрд╖ рдХреЗ рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рдЬрдм рдПрдХ рдЬрд╛рд▓ рдХреЛ рдЬрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдРрд╕рд╛ рд▓рдЧреЗрдЧрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╣реБрднреБрдЬ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдЙрдЪреНрдЪ-рдкрд╛рд▓реА рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдЙрдЪреНрдЪ рдПрдлрдкреАрдПрд╕ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдЙрдЪреНрдЪ рдкрд╛рд▓реА рдореЙрдбрд▓ рд╕реЗ рдирд┐рдореНрди рдкреЙрд▓реА рдореЙрдбрд▓ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдХрдо рдкрд╛рд▓реА рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░рд┐рдВрдкрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдУрд╡рд░рд▓реЗ рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдПрдХ рднреНрд░рдо рд╣реИред рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреЛрдг рдкрд░, рд╕рддрд╣ рдлрд┐рд░ рд╕реЗ рд╕рдкрд╛рдЯ рджрд┐рдЦрдиреЗ рд▓рдЧрддреА рд╣реИредрд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░
рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░, рдмрд╛рдпреЛрдореЗрдирд┐рдХрд▓ рд╡реЗрдХреНрдЯрд░, рдФрд░ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрди рд╡реИрдХреНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдорд╛рдиреНрдп рд╢реНрд░реЗрдгреА рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди рд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЬрдЧрд╣ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредp3d_NormalMatrix
рд╡рд░реНрд╕реЗрдЯреЗрдХреНрд╕ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡реИрдХреНрдЯрд░, рдмрд╛рдпрдиреЙрд░реНрдорд▓ рдФрд░ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕рджрд┐рд╢ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЬрдЧрд╣ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рджреЗрдЦрдиреЗ рдХреА рдЬрдЧрд╣ рдореЗрдВ рд╕рднреА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреИрдорд░реЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИрдВред[p3d_NormalMatrix] ModelViewMatrix рдХреЗ рд╢реАрд░реНрд╖ 3x3 рд░рд┐рд╡рд░реНрд╕ рдЯреНрд░рд╛рдВрд╕рдкреЛрд╕реЗрдВрдЯ рддрддреНрд╡ рд╣реИрдВред рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЬрдЧрд╣ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИред
рд╕реНрд░реЛрдд
рд╣рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдореИрдк рдХреЗ рдпреВрд╡реА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредрднрдЧрджрдбрд╝ рд╢реИрдбрд░
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЯреЗрдХреНрд╕ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рд╣рдореЗрдВ рдЕрдиреНрдп рдорд╛рдирджрдВрдб рджреЗрддрд╛ рд╣реИред рдЦрдВрдб рдЫрд╛рдпрд╛ рдореЗрдВ, рд╣рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдореЗрдВ рд╕реНрдерд┐рдд рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдиреЗ рдХреЗ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рджреНрд╡рд╛рд░рд╛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рд╕рдВрдЧрдд рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред
рдКрдкрд░, рдореИрдВрдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рд░рдВрдЧреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рд╣рдореЗрдВ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЙрд▓рдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдореВрд▓ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдирдХреНрд╢реЗ рдкрд░ рдмреЗрдХ рдХрд░ рд╕рдХреЗрдВред [ r, g, b] = [ r * 2 - 1, g * 2 - 1, b * 2 - 1] = [ x, y, z]
рдпрд╣рд╛рдБ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рд╕реЗ рдорд╛рдирджрдВрдб рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдорд╛рдирджрдВрдб рдЖрдорддреМрд░ рдкрд░ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реЗ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреНрд▓реЗрдВрдбрд░ рдЖрдкрдХреЛ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди, рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдкреЗрд╕, рд╡рд░реНрд▓реНрдб рд╕реНрдкреЗрд╕ рдФрд░ рдХреИрдорд░рд╛ рд╕реНрдкреЗрд╕ рдореЗрдВ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рд╕реЗрдВрдХрдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд╛рди рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕рджрд┐рд╢, рджреНрд╡рд┐рдШрд╛рдд рд╡реИрдХреНрдЯрд░ рдФрд░ рд╢реАрд░реНрд╖ рд╕рд╛рдорд╛рдиреНрдп рдкрд░ рдЖрдзрд╛рд░рд┐рдд 3x3 рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рдПрдВред рдЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рдЧреБрдгрд╛ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд░реЗрдВред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдПред рдЕрдиреНрдп рд╕рднреА рдкреНрд░рдХрд╛рд╢ рдЧрдгрдирд╛ рдЕрднреА рднреА рдХреА рдЬрд╛рддреА рд╣реИрдВредрд╕реНрд░реЛрдд рдХреЛрдб