[
рдкрд╣рд▓рд╛ рднрд╛рдЧ ]
рдореВрд▓ рдмрд╛рддреЗрдВ рд╕реЗ рдирд┐рдкрдЯрд╛, рд▓реЗрдЦ рдХреЗ рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рд╣рдо рд╡рд╕реНрддреБ рд░реВрдкрд░реЗрдЦрд╛, рдЦрд┐рд▓, SSAO, рдХрд▓рдВрдХ, рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрд╣рд░рд╛рдИ, рдкрд┐рдХреНрд╕реЗрд▓рдХрд░рдг, рдФрд░ рдЕрдиреНрдп рдЬреИрд╕реЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
рд░реВрдкрд░реЗрдЦрд╛
рджреГрд╢реНрдп рдХреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЖрдХреГрддрд┐ рдмрдирд╛рдирд╛ рдЦреЗрд▓ рдХреЛ рдПрдХ рдЕрдиреЛрдЦрд╛ рд░реВрдк рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХреЙрдорд┐рдХреНрд╕ рдпрд╛ рдХрд╛рд░реНрдЯреВрди рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рдбрд┐рдлреНрдпреВрдЬрд╝ рдордЯреАрд░рд┐рдпрд▓
рд╕рдореЛрдЪреНрдЪ рд╢реЗрдбрд░ рдХреЛ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдФрд░ рд░рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдирдкреБрдЯ рдмрдирд╛рд╡рдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдЖрдиреЗ рд╡рд╛рд▓реА рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЛ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рд░рдВрдЧ рдлреИрд▓рд╛рдирд╛, рдлреИрд▓рд╛рдирд╛ рдмрдирд╛рд╡рдЯ рд╕реЗ рд░рдВрдЧ, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рд╕реЗ рд░рдВрдЧ рднреА рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
uniform struct { vec4 diffuse ; } p3d_Material; out vec4 fragColor; void main() { vec3 diffuseColor = p3d_Material.diffuse.rgb; fragColor = vec4(diffuseColor, 1); }
рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЯреБрдХрдбрд╝рд╛ shader рд╣реИ рдЬреЛ рдПрдХ рдЬреНрдпрд╛рдорд┐рддрд┐ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдлреИрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд░рдВрдЧ рдХреЛ рдПрдХ рдлреНрд░реЗрдо рдмрдлрд░ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдлреНрд░реЗрдо рдмрдлрд░ рд╕реЗ рдпрд╣ рдлреИрд▓рд╛рдирд╛ рд░рдВрдЧ рдмрдирд╛рд╡рдЯ рдкрде shader рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдмрдирд╛рд╡рдЯ рд╣реЛрдЧреАред
рдпрд╣ рдлреНрд░реЗрдо рдмрдлрд░ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдлреИрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд░рдВрдЧ рдХреА рдмрдирд╛рд╡рдЯ рд╣реИ, рдЬреЛ рдЙрди рд░рдВрдЧреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдмреНрд▓реЗрдВрдбрд░ рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╕рдореЛрдЪреНрдЪ рд╢реЗрдбрд░ рджреГрд╢реНрдп рдореЗрдВ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдиреЗрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд░рдВрдЧ рджреЗрдВрдЧреЗред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдлреИрд▓рд╛рдирд╛ рд░рдВрдЧ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдпрджрд┐ рджреГрд╢реНрдп рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЕрдкрдирд╛ рдлреИрд▓рд╛рдирд╛ рд░рдВрдЧ рдирд╣реАрдВ рд╣реИред
рдХрд┐рдирд╛рд░реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
рдХрд┐рдирд╛рд░реЗ рдмрдирд╛рдирд╛
GIMP рдореЗрдВ рдПрдЬ рд░рд┐рдХрдЧреНрдирд┐рд╢рди рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред
рдЗрд╕ рдЫрд╛рдпрд╛рдВрдХрди рддрдХрдиреАрдХ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЧрдгрдирд╛ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИред рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреНрд░реЛрд▓реНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░реАрди рдХреЛ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЖрдпрддрд╛рдХрд╛рд░ рдЬрд╛рд▓ рдХреЗ рдЪрд╛рд░ рдХреЛрдиреЗ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдЖрдиреЗ рд╡рд╛рд▓реА рдмрдирд╛рд╡рдЯ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдЪреВрдВрдХрд┐ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░реАрди рдЖрдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдпреВрд╡реА-рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЯреБрдХрдбрд╝реЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдФрд░ рдЖрдиреЗ рд╡рд╛рд▓реА рдмрдирд╛рд╡рдЯ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдЬрд╛рдирддреЗ рд╣реБрдПред
рдЕрдкрдиреЗ рд╕реНрд╡рд╛рдж рдХреЗ рдЕрдиреБрд░реВрдк
separation
рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреГрдердХреНрдХрд░рдг, рдХрд┐рдирд╛рд░реЛрдВ рдпрд╛ рд░реЗрдЦрд╛рдУрдВ рдХреЛ рдореЛрдЯрд╛ рдХрд░рддрд╛ рд╣реИред
рдПрдЬ рд░рд┐рдХрдЧреНрдирд┐рд╢рди рддрдХрдиреАрдХ рдЖрдиреЗ рд╡рд╛рд▓реА рдмрдирд╛рд╡рдЯ рдХреЗ рд░рдВрдЧреЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЛ рдвреВрдВрдврддреА рд╣реИред рд╡рд░реНрддрдорд╛рди рдЯреБрдХрдбрд╝реЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рдиреМ рдирдореВрдиреЛрдВ рдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдЪрдордХреАрд▓реЗ рдФрд░ рдЧрд╣рд░реЗ рд░рдВрдЧреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП 3x3 рдЯреБрдХрдбрд╝реЗ рдЦрд┐рдбрд╝рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рд╡рд╣ рдПрдХ рд░рдВрдЧ рдХреА рдЪрдордХ рд╕реЗ рджреВрд╕рд░реЗ рдХреА рдЪрдордХ рдХреЛ рдШрдЯрд╛рддреА рд╣реИ, рдЕрдкрдирд╛ рдЕрдВрддрд░ рдкрд╛рддреА рд╣реИред
рдЗрд╕ рдЕрдВрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдЙрдЯрдкреБрдЯ рд░рдВрдЧ рдХреЗ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХрд┐рдирд╛рд░реЗ рдпрд╛ рд░реЗрдЦрд╛ рдирд╣реАрдВ рдЦреАрдВрдЪреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдХреЛрдИ рдЕрдВрддрд░ рд╣реИ, рддреЛ рдмрдврд╝рдд рддреИрдпрд╛рд░ рд╣реИред
рдереНрд░реЗрд╢реЛрд▓реНрдб рдорд╛рди рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЕрдм рдпрд╣ рд╢реВрдиреНрдп рд╣реИред рдХреЛрдИ рднреА рдиреЙрдирдЬрд╝реЛрд░реЛ рд╡реИрд▓реНрдпреВ рдПрдХ рдмрдврд╝рдд рдмрди рдЬрд╛рддреА рд╣реИ; рдпрд╣ рдЫреЛрдЯреЗ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реА рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИред рд╢реЛрд░ рдЖрдиреЗ рд╡рд╛рд▓реА рдмрдирд╛рд╡рдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ рдХреЗрд╡рд▓ рдмрдбрд╝реЗ рдЕрдВрддрд░ рдХреЗ рд▓рд┐рдП рд░реВрдкрд░реЗрдЦрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╕реНрд░реЛрдд рдХреЛрдб
рдХреЛрд╣рд░рд╛
рдХреЛрд╣рд░рд╛ (рдпрд╛ рдзреБрдВрдз, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдмреНрд▓реЗрдВрдбрд░ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рджреГрд╢реНрдп рдореЗрдВ рд╡рд╛рдпреБрдордВрдбрд▓реАрдп рдзреБрдВрдз рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд░рд╣рд╕реНрдпрдордп рдирд░рдо рдЙрднрд░реЗ рд╣реБрдП рднрд╛рдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИред рдХреБрдЫ рдЬреНрдпрд╛рдорд┐рддрд┐ рдЕрдЪрд╛рдирдХ рдХреИрдорд░рд╛ рджреГрд╢реНрдпрддрд╛ рдХреЗ рдкрд┐рд░рд╛рдорд┐рдб рдореЗрдВ рдЧрд┐рд░рдиреЗ рдкрд░ рдЙрднрд░реЗ рд╣реБрдП рднрд╛рдЧ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред
рдкрд╛рдВрдбрд╛ 3 рдбреА рдореЗрдВ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдХреЛрд╣рд░реЗ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдкрдиреА рдЫрд╛рдпрд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреИрдорд░реЗ рд╕реЗ рджреВрд░ рдЬрд╛рдиреЗ рдкрд░ рдХреЛрд╣рд░реЗ рдХреА рдЪрдордХ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЗрдЦреАрдп рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдШрд╛рддреАрдп рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрд╣рд░реЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреЛрд╣рд░реЗ рдХреА рдЪрдордХ рд╢реВрдиреНрдп рд╣реЛрддреА рд╣реИред рдЬрдм рд╢реАрд░реНрд╖ рд╕реНрдерд┐рддрд┐ рдХреЛрд╣рд░реЗ рдХреЗ рдЕрдВрдд рддрдХ
fogIntensity
, рддреЛ
fogIntensity
рдПрдХрддрд╛ рдХреЗ
fogIntensity
рдкрд╣реБрдВрдЪрддреА рд╣реИред рдХреЛрд╣рд░реЗ рдХреЗ рдЦрддреНрдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕рднреА
fogIntensity
, рдКрдкрд░ рд╕реЗ 1 рддрдХ рд╕реАрдорд┐рдд рд╣реИред
рдХреЛрд╣рд░реЗ рдХреА рдЪрдордХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдХреЛрд╣рд░реЗ рдХреЗ рд░рдВрдЧ рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВред рдЬреИрд╕реЗ-рдЬреИрд╕реЗ
fogIntensity
рдПрдХрддрд╛ рдХреЗ
fogIntensity
рдЖрддреА рд╣реИ, рдХрдо рдФрд░ рдХрдо
outputColor
-рд░рдВрдЧ рдФрд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдХреЛрд╣рд░реЗ рдХрд╛ рд░рдВрдЧ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЬрдм
fogIntensity
рдПрдХрддрд╛ рддрдХ рдкрд╣реБрдВрдЪрддреА рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рдХреЛрд╣рд░реЗ рдХрд╛ рд░рдВрдЧ рдмрдирд╛ рд░рд╣реЗрдЧрд╛ред
рдХреЛрд╣рд░реЗ рдкрд░ рдХреЛрд╣рд░реЗ
рдж рдкреИрде рд╢реИрдбрд░ рдЕрдзрд┐рдХ рд╕рдордЧреНрд░ рдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рд░рдВрдЧреЛрдВ рдкрд░ рдХреЛрд╣рд░реЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╡рд╣ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреЛрд╣рд░реЗ рдХреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛрд╣рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧреА, рдЬреЛ рдЕрдЬреАрдм рд▓рдЧреЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╣ рдЕрднреА рднреА рдорд┐рд▓ рдХреЗ рд╕рд╛рде рдЪрд░рдг рдХреЗ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рд╕рдмрд╕реЗ рдмрд╛рд╣рд░реА рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рдЖрдХреГрддрд┐ рдмрдирд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдЬреНрдпрд╛рдорд┐рддрд┐ рд╕реЗ рдкрд░реЗ рдЬрд╛рдирд╛ рд╣реИ - рдЬрд╣рд╛рдВ рдХреЛрдИ рд╢реАрд░реНрд╖ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИрдВред
positionTexture
рдПрдХ рдлреНрд░реЗрдо рдмрдлрд░ рдЯреЗрдХреНрд╕рдЪрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡реНрдпреВ рд╕реНрдкреЗрд╕ рдХреЗ рд╡рд░реНрдЯрд┐рдХрд▓ рдХреЗ рдкреЛрдЬрд┐рд╢рди рд╣реЛрддреЗ рд╣реИрдВред рдЬрдм рд╣рдо SSAO shader рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВрдЧреЗ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВрдЧреЗред
рд╕реНрд░реЛрдд рдХреЛрдб
рдлреВрд▓
рджреГрд╢реНрдп рдореЗрдВ рдЦрд┐рд▓рдиреЗ рд╕реЗ рдкреНрд░рдХрд╛рд╢ рдореЙрдбрд▓ рдХрд╛ рдПрдХ рдареЛрд╕ рднреНрд░рдо рдкреИрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд╢ рдЙрддреНрд╕рд░реНрдЬрдХ рд╡рд╕реНрддреБрдПрдВ рдЕрдзрд┐рдХ рдареЛрд╕ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдкреНрд░рдХрд╛рд╢ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрдордХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдЖрдк рдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреГрдердХреНрдХрд░рдг рдзрдмреНрдмрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдирдореВрдиреЗ рдзреБрдВрдзрд▓рд╛ рдХреА рддрд╛рдХрдд рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рднрд╛рд╡ рд╕реЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд░рд╛рд╢рд┐ рдмреНрд▓реВрдо рдЖрдЙрдЯрдкреБрдЯ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИред
рдпрд╣ рддрдХрдиреАрдХ рд╡рд░реНрддрдорд╛рди рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд
samples
рдкрд░ рдПрдХ рдЦрд┐рдбрд╝рдХреА рдХреЗ рдЖрдХрд╛рд░ рдХреЗ
samples
рдкрд╛рд╕ рдХрд░рдХреЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдпрд╣ рдкрде рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЦрд┐рдбрд╝рдХреА рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред
рдпрд╣ рдХреЛрдб рдЖрдиреЗ рд╡рд╛рд▓реА рдмрдирд╛рд╡рдЯ рд╕реЗ рд░рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЧреНрд░реЗрд╕реНрдХреЗрд▓ рдореЗрдВ рд▓рд╛рд▓, рд╣рд░реЗ рдФрд░ рдиреАрд▓реЗ рд░рдВрдЧ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдПрдХ рдореВрд▓реНрдп рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЧреНрд░реЗрд╕реНрдХреЗрд▓ рдореЗрдВ рдореВрд▓реНрдп рдереНрд░реЗрд╢реЛрд▓реНрдб рд╕реЗ рдХрдо рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рд░рдВрдЧ рдХреЛ рддреНрдпрд╛рдЧ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдХрд╛рд▓рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЦрд┐рдбрд╝рдХреА рдХреЗ рднреАрддрд░ рд╕рднреА рдирдореВрдиреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реБрдП, рдпрд╣
result
рдореЗрдВ рдЙрдирдХреЗ рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬрдорд╛ рдХрд░рддрд╛ рд╣реИред
рдирдореВрдиреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд╣ рд▓рд┐рдП рдЧрдП рдирдореВрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд░рдВрдЧ рдХреЗ рдирдореВрдиреЛрдВ рдХреЗ рдпреЛрдЧ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡рдпрдВ рдФрд░ рдЙрд╕рдХреЗ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рд░рдВрдЧ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ, рд╣рдореЗрдВ рдПрдХ рдзреБрдВрдзрд▓реА рдЫрд╡рд┐ рдорд┐рд▓рддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдзрдмреНрдмреЗ рдХреЛ рдмреЙрдХреНрд╕ рдмреНрд▓рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдЖрдк рдмреНрд▓реВрдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВред
рд╕реНрд░реЛрдд рдХреЛрдб
рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕ рдПрдВрдмрд┐рдПрдВрдЯ рдЗрдВрдХреНрд▓реВрдЬрди (SSAO)

SSAO рдЙрди рдкреНрд░рднрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЬрд╛рдирддреЗ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЙрдирдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣ рдПрдХ рдФрд╕рдд рджрд░реНрдЬреЗ рдХреЗ рджреГрд╢реНрдп рдХреЛ рдПрдХ рдЕрджреНрднреБрдд рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ! рд╕реНрдерд┐рд░ рджреГрд╢реНрдпреЛрдВ рдореЗрдВ, рдкрд░рд┐рд╡реЗрд╢ рд░реЛрдбрд╝рд╛ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдмреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдЧрддрд┐рд╢реАрд▓ рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рд╢реЗрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред SSAO рдЕрдзрд┐рдХ рдкрд░рд┐рд╖реНрдХреГрдд рдЫрд╛рдпрд╛рдВрдХрди рддрдХрдиреАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓реЗрдВрдЧреЗ, рддреЛ рдЖрдк рдПрдХ рдорд╛рд╕реНрдЯрд░ рд╢реЗрдбрд░ рдмрди рдЬрд╛рдПрдВрдЧреЗред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╢реАрд░реНрд╖рдХ рдореЗрдВ "рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕" рд╢рдмреНрдж рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕ рдореЗрдВ рд╕рднреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВред
рдЖрд╡рдХ рдбреЗрдЯрд╛
SSAO shader рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдирдкреБрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
- рджреЗрдЦрдиреЗ рдХреА рдЬрдЧрд╣ рдореЗрдВ рд╢реАрд░реНрд╖ рдкрджреЛрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░ред
- рджреЗрдЦрдиреЗ рдХреА рдЬрдЧрд╣ рдореЗрдВ рдХреЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╡реИрдХреНрдЯрд░ред
- рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди рдореЗрдВ рдирдореВрдирд╛ рд╡реИрдХреНрдЯрд░ред
- рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди рдореЗрдВ рд╢реЛрд░ рд╡реИрдХреНрдЯрд░ред
- рдХреИрдорд░рд╛ рд▓реЗрдВрд╕ рдкрд░ рдкреНрд░рдХреНрд╖реЗрдкрдг рдореИрдЯреНрд░рд┐рдХреНрд╕ред
рд╕реНрдерд┐рддрд┐
рдлреНрд░реЗрдо рдмрдлрд░ рдмрдирд╛рд╡рдЯ рдореЗрдВ рд╢реАрд░реНрд╖ рдкрджреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рд╣рдо рдЙрдиреНрд╣реЗрдВ
рдХреИрдорд░рд╛ рдбреЗрдкреНрде рдмрдлрд░ рд╕реЗ рд░реАрдХреНрд░рд┐рдПрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрд╛рдЗрдб рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рддреБрд░рдВрдд рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЗрдВрдЧреЗред рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
PT(Texture) depthTexture = new Texture("depthTexture"); depthTexture->set_format(Texture::Format::F_depth_component32); PT(GraphicsOutput) depthBuffer = graphicsOutput->make_texture_buffer("depthBuffer", 0, 0, depthTexture); depthBuffer->set_clear_color(LVecBase4f(0, 0, 0, 0)); NodePath depthCameraNP = window->make_camera(); DCAST(Camera, depthCameraNP.node())->set_lens(window->get_camera(0)->get_lens()); PT(DisplayRegion) depthBufferRegion = depthBuffer->make_display_region(0, 1, 0, 1); depthBufferRegion->set_camera(depthCameraNP);
рдпрджрд┐ рдЖрдк рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдкрд╛рдВрдбрд╛ 3 рдбреА рдореЗрдВ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
in vec4 vertexPosition; out vec4 fragColor; void main() { fragColor = vertexPosition; }
рдпрд╣рд╛рдБ рдПрдХ рдмрдлрд░ рдмрдлрд░ рдмрдирд╛рд╡рдЯ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреА рдЬрдЧрд╣ рдореЗрдВ рд╢реАрд░реНрд╖ рдкрджреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг shader рд╣реИред рдПрдХ рдЕрдзрд┐рдХ рдХрдард┐рди рдХрд╛рд░реНрдп рдлреНрд░реЗрдо рдмрдлрд░ рдХреА рдмрдирд╛рд╡рдЯ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдЯреБрдХрдбрд╝реЗ рд╡реЗрдХреНрдЯрд░ рдХреЗ рдШрдЯрдХ рдЕрдВрддрд░рд╛рд▓
[0, 1]
рддрдХ рд╕реАрдорд┐рдд рди рд╣реЛрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ (рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрд┐рдЯреНрд╕) рд╣реЛред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рд╢реАрд░реНрд╖ рд╕реНрдерд╛рди рд╕реНрдерд┐рддрд┐
<-139.444444566, 0.00000034343, 2.5>
, рддреЛ рдЖрдк рдЗрд╕реЗ рдмрдирд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ
<0.0, 0.0, 1.0>
рдирд╣реАрдВ рдмрдЪрд╛ рд╕рдХрддреЗред
рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рд╣реИ рдЬреЛ рд╡рд░реНрдЯреЗрдХреНрд╕ рдкреЛрдЬреАрд╢рди рдХреЛ рд╕рдВрдЪрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреНрд░реЗрдо рдмрдлрд░ рдмрдирд╛рд╡рдЯ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЙрд╕реЗ рд▓рд╛рд▓, рд╣рд░реЗ, рдиреАрд▓реЗ рдФрд░ рдЕрд▓реНрдлрд╛ рдХреЗ рд▓рд┐рдП 32 рдмрд┐рдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╣ рдЕрдВрддрд░рд╛рд▓ рджреНрд╡рд╛рд░рд╛ рдорд╛рдиреЛрдВ рдХреЗ рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рджреЗрддрд╛ рд╣реИ
[0, 1]
ред
set_rgba_bits(32, 32, 32, 32)
рд▓рд┐рдП рдХреЙрд▓ рдмрд┐рдЯ рд╡реЙрд▓реНрдпреВрдо рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред
glTexImage2D ( GL_TEXTURE_2D , 0 , GL_RGB32F , 1200 , 900 , 0 , GL_RGB , GL_FLOAT , nullptr );
рдпрд╣рд╛рдБ OpenGL рдкрд░ рдПрдХ рд╕рдорд╛рди рдХреЙрд▓ рд╣реИред
GL_RGB32F
рдмрд┐рдЯреНрд╕ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рд░рдВрдЧреАрди рдмрдлрд░ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдореАрдХрд░рдгреЛрдВ рдХреЗ рдЕрдВрддрд┐рдо рдФрд░ рдЕрдВрддрд┐рдо рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдорд┐рд╢реНрд░рдг рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдорд┐рд╢реНрд░рд┐рдд рд╕рдореАрдХрд░рдг рдХреА рдЧрдгрдирд╛ [0, 1] рдпрд╛ [тИТ1, 1] рддрдХ рд╕реАрдорд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд░рдВрдЧреАрди рдмрдлрд╝рд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╣реЛрддреА рд╣реИред рдпрджрд┐ рд░рдВрдЧ рдмрдлрд░ рдореЗрдВ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдмрд┐рдВрджреБ рд╣реИ, рддреЛ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред
рд╕реНрд░реЛрдд
рдпрд╣рд╛рдБ рдЖрдк рдХреЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рджреЗрдЦрддреЗ рд╣реИрдВ; y рдЕрдХреНрд╖ рдКрдкрд░ рд╣реИред
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ PAND3D рдПрдХ рдЕрдХреНрд╖ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реБрдП z рдЕрдХреНрд╖ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ OpenGL рдореЗрдВ y рдЕрдХреНрд╖ рдКрдкрд░ рджрд┐рдЦрддрд╛ рд╣реИред рдкреИрдВрдбрд░ 3 рдбреА рдореЗрдВ рдкреЛрдЬрд┐рд╢рди shader рдЙрд░реНрдзреНрд╡ z рдХреЗ рд╕рд╛рде рдХреЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ
gl-coordinate-system default
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
normals
SSAO shader рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдирдореВрдиреЛрдВ рдХреЗ рд╕рд╣реА рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЛрдиреЗ рдХреЗ рдорд╛рдирджрдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдирдореВрдирд╛ рдХреЛрдб рдЧреЛрд▓рд╛рд░реНрдз рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрдИ рдирдореВрдиреЗ рд╡рд╛рд▓реЗ рд╡реИрдХреНрдЯрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЧреЛрд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдирджрдВрдбреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
in vec3 vertexNormal; out vec4 fragColor; void main() { vec3 normal = normalize(vertexNormal); fragColor = vec4(normal, 1); }
рд╕реНрдерд┐рддрд┐ shader рдХреА рддрд░рд╣, рд╕рд╛рдорд╛рдиреНрдп shader рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦреЗрдВ рдФрд░ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╡реЗ рджреЗрдЦрдиреЗ рдХреА рдЬрдЧрд╣ рдореЗрдВ рд╣реИрдВред
рдХреЛрдиреЗ рдХреЗ рдорд╛рдирджрдВрдб рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВ; y рдЕрдХреНрд╖ рдКрдкрд░ рд╣реИред
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдкрд╛рдВрдбрд╛ 3 рдбреА z рдЕрдХреНрд╖ рдХреЛ рдЙрд░реНрдзреНрд╡рд╛рдзрд░ рд╡реЗрдХреНрдЯрд░, рдФрд░ рдУрдкрдирдЬреАрдПрд▓ рдХреЛ y рдЕрдХреНрд╖ рдорд╛рдирддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп shader z рдЕрдХреНрд╖ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХреЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
gl-coordinate-system default
3D рдореЗрдВ рдЧреНрд▓
gl-coordinate-system default
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдирдореВрдиреЗ
рдХрд┐рд╕реА рднреА рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡реЗрд╢ рд░реЛрдбрд╝рд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЖрд╕-рдкрд╛рд╕ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдирдореВрдирд╛ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ред
рдирдореВрдирд╛ рдХреЛрдб рдПрдХ рдЧреЛрд▓рд╛рд░реНрдз рдореЗрдВ рд╡рд┐рддрд░рд┐рдд 64 рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирдореВрдиреЗ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпреЗ
ssaoSamples
SSAO shader рдХреЛ рдкрд╛рд╕ рдХрд░ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
LVecBase3f sample = LVecBase3f ( randomFloats(generator) * 2.0 - 1.0 , randomFloats(generator) * 2.0 - 1.0 , randomFloats(generator) * 2.0 - 1.0 ).normalized();
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдирдореВрдиреЛрдВ рдХреЛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдШрдЯрдХ z рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЛ рдмрджрд▓ рджреЗрдВ рддрд╛рдХрд┐ рдпрд╣ рд╢реВрдиреНрдп рд╕реЗ рдПрдХ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПред
рд╢реЛрд░
рдирдореВрдирд╛ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╢реЛрд░ рд╡реИрдХреНрдЯрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпреЗ рд╢реЛрд░ рд╡реИрдХреНрдЯрд░ рд╕рддрд╣ рдХреЗ рд╢реАрд░реНрд╖ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдирдореВрдиреЛрдВ рдХреЛ рдШреБрдорд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░рд┐рд╡реЗрд╢ рд░реЛрдбрд╝рд╛

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

рдпрд╣рд╛рдБ рдЖрдкрдХреЛ рд╕рддрд╣ рдХреЗ рдКрдкрд░ рд╕реНрдерд╛рди рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд░реЛрдбрд╝рд╛ рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рд╣реИред
рдХреБрдЫ рдЕрдиреНрдп рддрдХрдиреАрдХреЛрдВ рдХреА рддрд░рд╣, SSAO shader рдореЗрдВ рдХрдИ рдирд┐рдпрдВрддреНрд░рдг рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдЙрдкрд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдирдореВрдирд╛ рд╕реЗ рдХреИрдорд░реЗ рдХреА рджреВрд░реА рдкрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рджрд╛рдЧ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреНрд░рд┐рдЬреНрдпрд╛ рдирдореВрдирд╛ рд╕реНрдерд╛рди рдХреЗ рдХрд╡рд░реЗрдЬ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдмрдврд╝рд╛рддрд╛ рдпрд╛ рдШрдЯрд╛рддрд╛ рд╣реИред рд▓реЛрдЕрд░рд░реЗрдВрдЬ рдФрд░ рдЕрдкрд░рд░реЗрдВрдЬ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рдХрд┐рд╕реА рднреА рдорд╛рди рдХреЗ рд▓рд┐рдП рдХрд╛рд░рдХ рдореАрдЯреНрд░рд┐рдХ рдХреА рдорд╛рдирдХ рд╕реАрдорд╛ рдХреЛ
[0, 1]
рд╕реЗ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред рд╕реАрдорд╛ рдмрдврд╝рд╛рдХрд░, рдЖрдк рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рдЖрдЧреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐, рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡реЗрдХреНрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, 16 рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡реИрдХреНрдЯрд░ рдмрдирд╛рдП рдЧрдП рдереЗред рд╡рд░реНрддрдорд╛рди рдЯреБрдХрдбрд╝реЛрдВ рдХреА рд╕реНрдХреНрд░реАрди рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡реЗрдХреНрдЯрд░ рдФрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛, рдЕрд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдирдореВрдирд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди рд╕реЗ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рд╕реНрдерд╛рди рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╢реЗрдбрд░ рд▓реВрдк рдХреЗ рд╕рднреА рдирдореВрдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдШрдЯрд╛рдПред
рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдирдореВрдирд╛ рдХреЛ рд╢реАрд░реНрд╖ / рдЦрдВрдб рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд░рдЦреЗрдВ рдФрд░ рдЗрд╕реЗ рддреНрд░рд┐рдЬреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реНрдХреЗрд▓ рдХрд░реЗрдВред
рджреЗрдЦрдиреЗ рдХреА рдЬрдЧрд╣ рдореЗрдВ рдирдореВрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд╕реНрдерд╛рди рд╕реЗ рдХрддрд░рди рд╕реНрдерд╛рди рддрдХ рдФрд░ рдлрд┐рд░ рдпреВрд╡реА рд╕реНрдерд╛рди рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред
-1 * 0.5 + 0.5 = 0 1 * 0.5 + 0.5 = 1
рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдХрддрд░рди рд╕реНрдерд╛рди рдХреЗ рдШрдЯрдХ рд╢реВрдиреНрдп рд╕реЗ рдПрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рд╣реИрдВ, рдФрд░ рдпреВрд╡реА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╢реВрдиреНрдп рд╕реЗ рдПрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рд╣реИрдВред рдХреНрд▓рд┐рдкрд┐рдВрдЧ рд╕реНрдкреЗрд╕ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ UV рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реЗрдХрдВрдб рд╕реЗ рдЧреБрдгрд╛ рдХрд░реЗрдВ рдФрд░ рдПрдХ рд╕реЗрдХрдВрдб рдЬреЛрдбрд╝реЗрдВред
2 рдбреА рд╕реНрдерд┐рддрд┐ рдмрдирд╛рд╡рдЯ рдкрд░ 3 рдбреА рдирдореВрдирд╛ рдкреЗрд╢ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдпреВрд╡реА рдСрдлрд╕реЗрдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд╣рдо рдЗрд╕реА рд╕реНрдерд┐рддрд┐ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдвреВрдВрдврддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рджреЗрдЦрдиреЗ рдХреА рдЬрдЧрд╣ рд╕реЗ рдХрддрд░рди рд╡рд╛рд▓реА рдЬрдЧрд╣ рдХреЛ UV рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╡рд╛рдкрд╕ рджреЗрдЦрдиреЗ рдХреА рдЬрдЧрд╣ рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рд╢реЗрдбрд░ рдЗрд╕ рд▓реВрдк рдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛рддрд╛ рд╣реИ рдХрд┐ рдирдореВрдирд╛ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдирдореВрдирд╛ рдХреЗ рдкреАрдЫреЗ рдХреЛрдИ рдЬреНрдпрд╛рдорд┐рддрд┐ рд╣реИ, рдпрд╛ рдирдореВрдирд╛ рдХреЗ рд╕рд╛рдордиреЗред рдпрджрд┐ рдирдореВрдирд╛ рдХреБрдЫ рдЬреНрдпрд╛рдорд┐рддрд┐ рдореЗрдВ рдпрд╛ рдЙрд╕рдХреЗ рд╕рд╛рдордиреЗ рд╕реНрдерд┐рдд рд╣реИ, рддреЛ рдпрд╣ рдирдореВрдирд╛ рдХреЗрд╡рд▓ рдУрд╡рд░рд▓реИрдк рдХрд┐рдП рдЧрдП рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдирдореВрдирд╛ рдХреБрдЫ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рдкреАрдЫреЗ рд╣реИ, рддреЛ рдпрд╣ рдирдореВрдирд╛ рдУрд╡рд░рд▓реИрдк рдХрд┐рдП рдЧрдП рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдм рдЗрд╕ рд╕реИрдВрдкрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рдЬрд╝рди рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рдЕрдВрджрд░ рдпрд╛ рдЙрд╕рдХреЗ рдмрд╛рд╣рд░ рдХреИрд╕реЗ рдбрд╛рд▓реЗрдВред рдлрд┐рд░, рдЗрд╕ рдирдореВрдиреЗ рдХреЛ рд░реЛрдбрд╝рд╛ рдореАрдЯреНрд░рд┐рдХ рд╕реЗ рдШрдЯрд╛рдПрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд╛рди рд▓реЗрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдирдореВрдиреЛрдВ рдХреЛ рд▓реВрдк рд╕реЗ рдкрд╣рд▓реЗ рдУрд╡рд░рд▓реИрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЕрдВрддрд░рд╛рд▓
[0, NUM_SAMPLES]
рд╕реЗ рдЕрдВрддрд░рд╛рд▓ рдХреЛ
[0, 1]
рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдореВрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдУрд╡рд░рд▓реИрдк рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВред рд╢реВрдиреНрдп рдХрд╛ рдорддрд▓рдм рдкреВрд░реНрдг рд░реЛрдбрд╝рд╛ рд╣реИ, рдЗрдХрд╛рдЗрдпреЛрдВ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХреЛрдИ рд░реЛрдбрд╝рд╛ рдирд╣реАрдВред рдЕрдм рд╡рд┐рдЦрдВрдбрди рдореАрдЯреНрд░рд┐рдХ рдХреЛ рдЦрдВрдб рд░рдВрдЧ рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ, рдФрд░ рдпрд╣ рдмрд╛рдд рд╣реИред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдореЗрдВ, рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреЛ рдУрд╡рд░рд▓реИрдкрд┐рдВрдЧ рдкреГрд╖реНрдарднреВрдорд┐ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдлреНрд░реЗрдо рдмрдлрд░ рд╕реЗ рд╕реНрдерд┐рддрд┐ рдмрдирд╛рд╡рдЯ рдХрд╛ рдЕрд▓реНрдлрд╛ рдорд╛рди рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред
рдзреБрдВрдзрд▓рд╛ (рдзреБрдВрдзрд▓рд╛)
SSAO рдлреНрд░реЗрдо рдмрдлрд░ рдХреА рдмрдирд╛рд╡рдЯ рдереЛрдбрд╝рд╛ рд╢реЛрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдЪреМрд░рд╕рд╛рдИ рдХреЗ рд▓рд┐рдП рдзреБрдВрдзрд▓рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
SSAO рдмреНрд▓рд░ рд╢реЗрдбрд░ рдПрдХ рдирд┐рдпрдорд┐рдд рдмреЙрдХреНрд╕ рдмреНрд▓рд░ рд╣реИред рдмреНрд▓реВрдорд░ рд╢реИрдбрд░ рдХреА рддрд░рд╣, рдпрд╣ рдЖрдиреЗ рд╡рд╛рд▓реА рдмрдирд╛рд╡рдЯ рдкрд░ рдПрдХ рдЦрд┐рдбрд╝рдХреА рдЦреАрдВрдЪрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЕрдкрдиреЗ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдФрд╕рдд рдХрд░рддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ред X рдПрдХ рдЕрд▓рдЧ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред
рдкрд░рд┐рд╡реЗрд╢ рдХрд╛ рд░рдВрдЧ
SSAO рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдЪреБрдиреМрддреА рдлрд┐рд░ рд╕реЗ рдкреНрд░рдХрд╛рд╢ рдЧрдгрдирд╛ рдореЗрдВ рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдмрдирд╛рд╡рдЯ SSAO рдмрдирд╛рд╡рдЯ рдмрдлрд░ рдореЗрдВ рдХреИрд╕реЗ рд░реЛрдбрд╝рд╛ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рд╡реЗрд╢ рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред
рд╕реНрд░реЛрдд рдХреЛрдб
рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрд╣рд░рд╛рдИ
рдлрд╝реАрд▓реНрдб рдХреА рдЧрд╣рд░рд╛рдИ рднреА рдПрдХ рдРрд╕рд╛ рдкреНрд░рднрд╛рд╡ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд░ рдЖрдк рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рд░рд╣ рд╕рдХрддреЗред рдХрд▓рд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐ рд╕реЗ, рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рджрд░реНрд╢рдХ рдХрд╛ рдзреНрдпрд╛рди рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡рд╕реНрддреБ рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рдереЛрдбрд╝реЗ рдкреНрд░рдпрд╛рд╕ рдХреА рдХреАрдордд рдкрд░ рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрд╣рд░рд╛рдИ рдпрдерд╛рд░реНрдерд╡рд╛рдж рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЬреЛрдбрд╝рддреА рд╣реИред
рдзреНрдпрд╛рди рдореЗрдВ
рдкрд╣рд▓рд╛ рдЪрд░рдг рджреГрд╢реНрдп рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлреЛрдХрд╕ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕реЗ рдлреНрд░реЗрдо рдмрдлрд░ рдЯреЗрдХреНрд╕рдЪрд░ рдкрд░ рд░реЗрдВрдбрд░ рдХрд░реЗрдВред рдпрд╣ рдлрд╝реАрд▓реНрдб рдмрдлрд░ рдХреА рдЧрд╣рд░рд╛рдИ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдЧрд╛ред
рдзреНрдпрд╛рди рд╕реЗ рдмрд╛рд╣рд░
рджреВрд╕рд░рд╛ рдЪрд░рдг рджреГрд╢реНрдп рдХреЛ рдзреБрдВрдзрд▓рд╛ рдХрд░рдирд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлреЛрдХрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛред рдмреНрд▓реВрдо рдФрд░ SSAO рдХреЗ рд╕рд╛рде, рдЖрдк рдмреЙрдХреНрд╕ рдмреНрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ defocused рджреГрд╢реНрдп рдХреЛ рдлреНрд░реЗрдо рдмрдлрд░ рдмрдирд╛рд╡рдЯ рдкрд░ рд░реЗрдВрдбрд░ рдХрд░реЗрдВред рдпрд╣ рдлрд╝реАрд▓реНрдб рдЫрд╛рдпрд╛рджрд╛рд░ рдХреА рдЧрд╣рд░рд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЗрдирдкреБрдЯ рдорд╛рди рд╣реЛрдЧрд╛ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ред X рдПрдХ рдЕрд▓рдЧ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред
рдорд┐рд╢реНрд░рдг
рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
focalLengthSharpness
рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рджреГрд╢реНрдп рдлреЛрдХрд▓ рд▓рдВрдмрд╛рдИ рдореЗрдВ defocused рд╣реЛрдЧрд╛ред
focalLengthSharpness
рдЫреЛрдЯреА
focalLengthSharpness
,
focalLengthSharpness
рд╣реА рдЬреНрдпрд╛рджрд╛
focalLengthSharpness
рд╕реАрди рдлреЛрдХрд▓ рд▓реЗрдВрде рдкрд░ рд╣реЛрдВрдЧреЗред рдзреБрдВрдзрд▓рд╛ рд╣реЛ рдЬрд╛рдирд╛ рдлреЛрдХрд▓ рд▓рдВрдмрд╛рдИ рд╕реЗ рджреВрд░ рдЬрд╛рдиреЗ рдкрд░ рджреГрд╢реНрдп рдХреЛ рдзреБрдВрдзрд▓рд╛ рдХрд░рдиреЗ рдХреА рдЧрддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред
blurRate
рдЬрд┐рддрдирд╛ рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛, рдлреЛрдХрд╕ рдмрд┐рдВрджреБ рд╕реЗ рджреВрд░ рдЬрд╛рддреЗ рд╕рдордп рджреГрд╢реНрдп рдЙрддрдирд╛ рд╣реА рдзреБрдВрдзрд▓рд╛ рд╣реЛрдЧрд╛ред
рд╣рдореЗрдВ рдлрд╝реЛрдХрд╕ рдореЗрдВ рдФрд░ рдбрд┐рдлреЛрдХрд╕ рдХреА рдЧрдИ рдЫрд╡рд┐ рдореЗрдВ рд░рдВрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рд╣рдореЗрдВ рджреЗрдЦрдиреЗ рдХреА рдЬрдЧрд╣ рдореЗрдВ рд╢реАрд░реНрд╖ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЖрдк рдЙрд╕ рдлреНрд░реЗрдо рдмрдлрд╝рд░ рд╕реЗ рд╕реНрдерд┐рддрд┐ рдХреА рдмрдирд╛рд╡рдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ SSAO рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдФрд░ рдпрд╣рд╛рдВ рднреНрд░рдо рдХреА рд╕реНрдерд┐рддрд┐ рдкреИрджрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рдХреЗ рдХрд░реАрдм blur
, рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ outOfFocusColor
ред рд╢реВрдиреНрдп рдХреЗ рдореВрд▓реНрдп рдХрд╛ blur
рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд╣реИред blur >= 1
рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ defocused рд╣реИредрд╕реНрд░реЛрдд рдХреЛрдб
posterization
рдЪрд┐рддреНрд░рдг, рдпрд╛ рд░рдВрдЧ рдХрд╛ рдирдореВрдирд╛рдХрд░рдг, рдПрдХ рдЫрд╡рд┐ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рд░рдВрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдЖрдк рдЧреЗрдо рдХреЛ рдХреЙрдорд┐рдХ рдпрд╛ рд░реЗрдЯреНрд░реЛ рд▓реБрдХ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╢реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдЯреВрди рд╢реИрд▓реА рдорд┐рд▓рддреА рд╣реИред
рдЖрдк рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЬрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛, рдЙрддрдиреЗ рд╣реА рдЕрдзрд┐рдХ рдлреВрд▓ рдмрдиреЗ рд░рд╣реЗрдВрдЧреЗред
рд╣рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд░рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдкрджрд╛рд╡рдирддрд┐ рдирд╣реАрдВ рджреЗрдЦреА рд╣реИред рдЗрд╕рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдпрд╣ рдкрд╛рд░рдВрдкрд░рд┐рдХ рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдкрд░рд┐рдгрд╛рдо рдмрдирд╛рддрд╛ рд╣реИред рд░рдВрдЧ рдкреИрд▓реЗрдЯ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЧреНрд░реЗрд╕реНрдХреЗрд▓ рдореЗрдВ рд░рдВрдЧ рдХреЛ рдПрдХ рдореВрд▓реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВред рд╣рдо рд░рдВрдЧ рдХреЛ рдПрдХ рд╕реНрддрд░ рдкрд░ рдмрд╛рдВрдзрдХрд░ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЧреНрд░реЗрд╕реНрдХреЗрд▓ рдореЗрдВ рд╡рд┐рдЪреНрдЫреЗрджрд┐рдд рдореВрд▓реНрдп рдФрд░ рдЧреНрд░реЗрд╕реНрдХреЗрд▓ рдореЗрдВ рдЧреИрд░-рд╡рд┐рд╡реЗрдХреА рдореВрд▓реНрдп рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рдЗрдирдкреБрдЯ рд░рдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдпрд╣ рдЕрдВрддрд░ рд╡рд╣ рд░рд╛рд╢рд┐ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЧреНрд░реЗрд╕реНрдХреЗрд▓ рдореЗрдВ рдПрдХ рд╡рд┐рд╡реЗрдХрдкреВрд░реНрдг рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдВрдЧ рдХреЛ рдмрдврд╝рд╛рдирд╛ / рдШрдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЯреБрдХрдбрд╝рд╛ рдХреЗ рд░рдВрдЧ рдХреЛ рдЗрдирдкреБрдЯ рд░рдВрдЧ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛редрд╕реЗрд▓ рд╢реЗрдбрд┐рдВрдЧ
рдЪрд┐рддреНрд░рд╛рдВрдХрди рдЪрд┐рддреНрд░ рдХреЛ рд╕реАрдПрд▓ рд╢реЗрдбрд┐рдВрдЧ рдХреА рддрд░рд╣ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реЗрд▓ рд╢реЗрдбрд┐рдВрдЧ рд╡рд┐рд╕рд░рд┐рдд рдлреИрд▓рд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдФрд░ рд░рдВрдЧреЛрдВ рдХреЛ рдЕрд╕рддрдд рд░рдВрдЧреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреА рд╣реИред рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдХреЗ рдмрд╛рд░реАрдХ рд╡рд┐рд╡рд░рдг рдФрд░ рдЫреЛрдЯреЗ рдореВрд▓реНрдп рдХреЗ рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рдареЛрд╕ рдлреИрд▓ рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ levels
редрд╕реНрд░реЛрдд рдХреЛрдб
рдкрд┐рдХреНрд╕реЗрд▓реЗрд╢рди
рдПрдХ 3 рдбреА рдЧреЗрдо рдХрд╛ рдкрд┐рдХреНрд╕реЗрд▓рдХрд░рдг рдЗрд╕реЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд░реВрдк рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдЖрдкрдХреЛ рд╕рдордп рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рднреА рдкрд┐рдХреНрд╕реЗрд▓ рдХрд▓рд╛ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗ рдЬрд╛рдПрдЧрд╛ред рд╕рд╣реА рд░реЗрдЯреНрд░реЛ рд▓реБрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреЛрд╢реНрдЪрд░рд╛рдЗрдЬреЗрд╢рди рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдПрдВред
рдЖрдк рдкрд┐рдХреНрд╕реЗрд▓ рдЖрдХрд╛рд░ рдХреЛ рд╕реНрд╡рдпрдВ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЬрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛, рдЫрд╡рд┐ рдЙрддрдиреА рд╣реА рдХрдард┐рди рд╣реЛрдЧреАред
рдпрд╣ рддрдХрдиреАрдХ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЕрдкрдиреЗ рдирд┐рдХрдЯрддрдо рдЧреИрд░-рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдкрд┐рдХреНрд╕реЗрд▓-рдЖрдХрд╛рд░ рдХреА рдЦрд┐рдбрд╝рдХреА рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рддреА рд╣реИред рдпреЗ рд╡рд┐рдВрдбреЛ рдЗрдирдХрдорд┐рдВрдЧ рдЯреЗрдХреНрд╕рдЪрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╣реЛрддреА рд╣реИрдВред рдЦрд┐рдбрд╝рдХреА рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рдЯреБрдХрдбрд╝реЗ рдЙрдирдХреА рдЦрд┐рдбрд╝рдХреА рдореЗрдВ рдЕрдиреНрдп рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд░рдВрдЧ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд╛рдВрдЫрд┐рдд рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рдордиреНрд╡рдп рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдиреЗ рд╡рд╛рд▓реЗ рдмрдирд╛рд╡рдЯ рд╕реЗ рдЙрд╕рдХрд╛ рд░рдВрдЧ рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд░рдВрдЧ рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВредрд╕реНрд░реЛрдд рдХреЛрдб
рдкреИрдирд╛
рдкреИрдирд╛рдкрди рдкреНрд░рднрд╛рд╡ (рдкреИрдирд╛рдкрди) рдЫрд╡рд┐ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рд╡рд┐рдкрд░реАрддрддрд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдХрд╛рдо рдЖрддрд╛ рд╣реИ рдЬрдм рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдмрд╣реБрдд рдирд░рдо рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рдореВрд▓реНрдп рдмрджрд▓рдХрд░, рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЗ рддреЗрдЬ рдХреЗ рдкрд░рд┐рдорд╛рдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдорд╛рди рд╢реВрдиреНрдп рд╣реИ, рддреЛ рдЫрд╡рд┐ рдирд╣реАрдВ рдмрджрд▓реЗрдЧреАред рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде, рдЫрд╡рд┐ рдЕрдЬреАрдм рд▓рдЧрдиреЗ рд▓рдЧрддреА рд╣реИред
рдЖрд╕рдиреНрди рдЕрдВрд╢реЛрдВ рдХреЛ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ amount * -1
ред рд╡рд░реНрддрдорд╛рди рдЯреБрдХрдбрд╝рд╛ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ amount * 4 + 1
ред
рдкрдбрд╝реЛрд╕реА рдЯреБрдХрдбрд╝реЗ рдКрдкрд░, рдиреАрдЪреЗ, рдмрд╛рдПрдБ рдФрд░ рджрд╛рдПрдБ рд╣реИрдВред рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкрд░рд┐рдгрд╛рдо рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд░рд╛рд╢рд┐ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЕрдВрддрд┐рдо рд░рдВрдЧ рд╣реИредрд╕реНрд░реЛрдд рдХреЛрдб
рдлрд┐рд▓реНрдо рдХрд╛ рджрд╛рдирд╛
рдлрд┐рд▓реНрдо рдХрд╛ рджрд╛рдирд╛ (рдЫреЛрдЯреА рдЦреБрд░рд╛рдХ рдореЗрдВ, рдФрд░ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдирд╣реАрдВ) рдпрдерд╛рд░реНрдерд╡рд╛рдж рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдкреНрд░рднрд╛рд╡ рдХреЛ рд╣рдЯрд╛рдиреЗ рддрдХ рдЕрджреГрд╢реНрдп рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдпреЗ рдРрд╕реА рдЦрд╛рдорд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рдбрд┐рдЬрд┐рдЯрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдЫрд╡рд┐ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЖрд╢реНрд╡рд╕реНрдд рдХрд░рддреА рд╣реИрдВредрдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлрд┐рд▓реНрдо рдЕрдирд╛рдЬ рдЖрдорддреМрд░ рдкрд░ рдЕрдВрддрд┐рдо рдкреНрд░рднрд╛рд╡ рд╣реИ рдЬреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдлреНрд░реЗрдо рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИредрдореВрд▓реНрдп
amount
рдлрд┐рд▓реНрдо рдЕрдирд╛рдЬ рдХреА рджреГрд╢реНрдпрддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрдЪреНрдЪ рдореВрд▓реНрдп, рддрд╕реНрд╡реАрд░ рдореЗрдВ рдЕрдзрд┐рдХ "рдмрд░реНрдл"редрдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрдордХ
рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рдореВрд▓реНрдп рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрдордХ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред Time Since F1 = 00 01 02 03 04 05 06 07 08 09 10 Frame Number = F1 F3 F4 F5 F6 osg_FrameTime = 00 02 04 07 08
рдкрд╛рдВрдбрд╛ 3 рдбреА osg_FrameTime
рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдореВрд▓реНрдп ред рдПрдХ рдлреНрд░реЗрдо рдЯрд╛рдЗрдо рдПрдХ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдлреНрд░реЗрдо рдХреЗ рдмрд╛рдж рдХрд┐рддрдиреЗ рд╕реЗрдХрдВрдб рдмреАрдд рдЪреБрдХреЗ рд╣реИрдВред рдирдореВрдирд╛ рдХреЛрдб рдлрд┐рд▓реНрдо рдХреЗ рджрд╛рдиреЗ рдХреЛ рдЪреЗрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ osg_FrameTime
рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдореЗрдВ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред
рд╕реНрдерд┐рд░ рдЕрдирд╛рдЬ рдХреЗ рд▓рд┐рдП, рдлрд┐рд▓реНрдореЛрдВ рдХреЛ osg_FrameTime
рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ред рдкреИрдЯрд░реНрди рджреЗрдЦрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдлрд┐рд▓реНрдо рдЕрдирд╛рдЬ рдХреЗ рдЕрдВрдХ, рдпрд╛ рд╕реНрдкреЙрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛрдиреЛрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ, рдФрд░ x, рдФрд░ y рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк x рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЗрд╡рд▓ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд░реЗрдЦрд╛рдПрдБ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдПрдВрдЧреА, рдпрджрд┐ рдЖрдк y рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЗрд╡рд▓ рдХреНрд╖реИрддрд┐рдЬ рд░реЗрдЦрд╛рдПрдБ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдВрдЧреАредрдХреЛрдб рдореЗрдВ, рд╡рд┐рдХрд░реНрдг рд╕рдорд░реВрдкрддрд╛ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордиреНрд╡рдп рджреВрд╕рд░реЗ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдмреЗрд╢рдХ, рдЖрдк рд╕рдордиреНрд╡рдп рдЧреБрдгрдХ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдмрд╛рд░рд┐рд╢ рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд░реНрд╖рд╛ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЪреЗрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЙрдЯрдкреБрдЯ sin
рдХреЛ рдЧреБрдгрд╛ рдХрд░реЗрдВ osg_FrameTime
редрдПрдХреНрд╕ рдФрд░ рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдмрд╛рд░рд┐рд╢ рдХреА рджрд┐рд╢рд╛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордиреНрд╡рдп рдХрд░рддрд╛ рд╣реИред рдиреАрдЪреЗ рдХреА рдУрд░ рдмреМрдЫрд╛рд░ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ x рд╕рдордиреНрд╡рдп рдЫреЛрдбрд╝реЗрдВред input = (gl_FragCoord.x + gl_FragCoord.y * osg_FrameTime) * toRadians frame(10000 * sin(input)) = fract(10000 * sin(6.977777777777778)) = fract(10000 * 0.6400723818964882) =
sin
рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлреНрд░реИрдЧрдореЗрдВрдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЖрдЙрдЯрдкреБрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИрд╢ рдХрд┐рдП рдЧрдП рд╣реИрдВ sin
ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдВрдкрддреНрддрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ - рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ (рдмрдбрд╝реЗ рдпрд╛ рдЫреЛрдЯреЗ) рдЬреЛ рднреА рд╣реЛ, рдЖрдЙрдЯрдкреБрдЯ рдЕрдВрддрд░рд╛рд▓ рдорд╛рдЗрдирд╕ рдПрдХ рд╕реЗ рдПрдХ рддрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рд╣реЛрдЧрд╛ред fract(10000 * sin(6.977777777777778)) = fract(10000 * 0.6400723818964882) = fract(6400.723818964882) = 0.723818964882
sin
рд╕рд╛рде fract
рдореЗрдВ рдПрдХ рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред >>> [floor(fract(4 * sin(x * toRadians)) * 10) for x in range(0, 10)] [0, 0, 1, 2, 2, 3, 4, 4, 5, 6] >>> [floor(fract(10000 * sin(x * toRadians)) * 10) for x in range(0, 10)] [0, 4, 8, 0, 2, 1, 7, 0, 0, 5]
рдкрд╣рд▓реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рджреЗрдЦреЗрдВ, рдФрд░ рдлрд┐рд░ рджреВрд╕рд░реА рдкрд░ред рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИ, рд▓реЗрдХрд┐рди рдкреИрдЯрд░реНрди рджреВрд╕рд░реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджреВрд╕рд░реЗ рдореЗрдВ рдХрдо рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ fract(10000 * sin(...))
рдирд┐рд░реНрдзрд╛рд░рдХ рд╣реИ, рдкреИрдЯрд░реНрди рдХреЛ рдмрд╣реБрдд рдХрдордЬреЛрд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИредрдпрд╣рд╛рдВ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░рдХ sin
рдкрд╣рд▓реЗ 1, рдлрд┐рд░ 10, рдлрд┐рд░ 100 рдФрд░ рдлрд┐рд░ 1000 рд╣реИредрдЬреИрд╕рд╛ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдорд╛рдиреЛрдВ рдХреЗ рдЧреБрдгрдХ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реЛрддреА рд╣реИ, sin
рдкреИрдЯрд░реНрди рдХрдо рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдХреЛрдб sin
рдХреЛ 10,000 рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдЦреБрд╢рдмреВ рдХрд╛ рд░рдВрдЧ
рдЯреБрдХрдбрд╝реЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ UV-рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рдмрджрд▓реЗрдВред рдЗрди рдпреВрд╡реА-рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рд╡рд░реНрддрдорд╛рди рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рд╡рдЯ рдХреЗ рд░рдВрдЧ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВред
рдореВрд▓реНрдп рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрдордХ рдореЗрдВ рдмрджрд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рд░рдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
рдЯреБрдХрдбрд╝реЗ рдХрд╛ рд░рдВрдЧ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ, рдФрд░ рдпрд╣ рдмрд╛рдд рд╣реИрд╕реНрд░реЛрдд рдХреЛрдб
рдзрдиреНрдпрд╡рд╛рдж