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

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

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

рдореБрдЦреНрдп рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЬреА-рдмрдлрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрдЯрддрдо рдЕрдВрд╢реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рд╕реЗ рдЕрд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ: рдЧрд╣рд░рд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреА рдЧрдгрдирд╛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд┐рдП рдмрд┐рдирд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рдХрд╛рд╢ рд╣рдореЗрдВ рдЖрдЧреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдореЗрдВ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ: рдЬреА-рдмрдлрд░ рджреГрд╢реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдерд┐рддрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдирддреАрдЬрддрди, рдЬреА-рдмрдлрд░ рдореЗрдореЛрд░реА рд╕реНрдкреЗрд╕ рдореЗрдВ рдХрд╛рдлреА рдКрдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдФрд░ рджреЛрд╖ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдкрд╛рд░рднрд╛рд╕реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ (рдХреНрдпреЛрдВрдХрд┐ рдмрдлрд░ рд╕реНрдЯреЛрд░ рдХреЗрд╡рд▓ рдирд┐рдХрдЯрддрдо рд╕рддрд╣ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдирд╛ рджреЗрддрд╛ рд╣реИ) рдФрд░ рдПрдордПрд╕рдПрдП рдЬреИрд╕реЗ рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред
(рдиреЛрдЯ рд▓реЗрдиред - рдЬреА-рдмрдлрд░ рдмрд╣реБрдд рдореЗрдореЛрд░реА рд╕реНрдкреЗрд╕ рд▓реЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 1920 * 1080 рдХреА рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рдФрд░ рдкрд┐рдХреНрд╕реЗрд▓ рдкреНрд░рддрд┐ 128 рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдмрдлрд░ 33mb рд▓реЗ рдЬрд╛рдПрдЧрд╛ред рдореЗрдореЛрд░реА рдмреИрдВрдбрд╡рд┐рдбреНрде рдХреЗ рд▓рд┐рдП рдмрдврд╝рддреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВ - рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рд▓рд┐рдЦрд╛ рдФрд░ рдкрдврд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ)
рдЬреА рдмрдлрд░
рдЬреА-рдмрдлрд░ рдкрд┐рдЫрд▓реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рд╕ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдкреНрд░рдХрд╛рд╢-рд╕рдВрдмрдВрдзрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрдирд╛рд╡рдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдкреНрд░рддреНрдпрдХреНрд╖ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдП:
- 3 рдбреА рд╕реНрдерд┐рддрд┐ рд╡реЗрдХреНрдЯрд░: рдХреИрдорд░реЗ рдФрд░ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЯреБрдХрдбрд╝реЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рд╡рд┐рдЦрдВрдбрди рдХрд╛ рд╡рд┐рд╕рд░рд┐рдд рд░рдВрдЧ (рд▓рд╛рд▓, рд╣рд░реЗ рдФрд░ рдиреАрд▓реЗ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд░рд╛рд╡рд░реНрддрди - рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рд░рдВрдЧ рдореЗрдВ)ред
- 3 рдбреА рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ (рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рддрд╣ рдкрд░ рдХреЛрдг рдкреНрд░рдХрд╛рд╢ рдХреНрдпрд╛ рдЧрд┐рд░рддрд╛ рд╣реИ)
- рджрд░реНрдкрдг рдШрдЯрдХ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдирд╛рд╡
- рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдФрд░ рдЙрд╕рдХреЗ рд░рдВрдЧ рдХреА рд╕реНрдерд┐рддрд┐ред
- рдХреИрдорд░рд╛ рд╕реНрдерд┐рддрд┐ред
рдЗрди рдЪрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЙрд╕ рдмреНрд▓рд┐рди-рдлреЛрдВрдЧ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╡рд░реЗрдЬ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВред рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХрд╛ рд░рдВрдЧ рдФрд░ рд╕реНрдерд┐рддрд┐, рд╕рд╛рде рд╣реА рдХреИрдорд░реЗ рдХреА рд╕реНрдерд┐рддрд┐ рд╕рд╛рдорд╛рдиреНрдп рдЪрд░ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдХреА рдХреЗ рдореВрд▓реНрдп рдкреНрд░рддреНрдпреЗрдХ рдЫрд╡рд┐ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдВрдЧреЗред рдпрджрд┐ рд╣рдо рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рдЕрдВрддрд┐рдо рдкрд╛рд╕ рдореЗрдВ рдареАрдХ рдЙрд╕реА рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рд╕реАрдзреЗ рдкрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдЧрд╛, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╣рдо рдирд┐рдпрдорд┐рдд 2 рдбреА рдЖрдпрдд рдкрд░ рдЯреБрдХрдбрд╝реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред
OpenGL рдХрд╛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдХреНрдпрд╛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрдирд╛рд╡рдЯ рд╡рд╛рд▓реЗ рд╕рднреА рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рд╕реНрдХреНрд░реАрди рдХреЗ рдЖрдХрд╛рд░ (рдЬрд┐рд╕реЗ рдЬреА-рдмрдлрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдФрд░ рдЗрди рд╕рднреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдХрд╛рд╢ рдкрд╛рд╕ рдореЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдмрдирд╛рд╡рдЯ рдФрд░ рд╕реНрдХреНрд░реАрди рдХрд╛ рдЖрдХрд╛рд░ рд╕рдорд╛рди рд╣реИ, рд╣рдореЗрдВ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рдХрд╛рд╢ рдХреЗ рд╕рдорд╛рди рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИред
рдЫрджреНрдо рдХреЛрдб рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рдЪрд┐рддреНрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
while(...) // render loop { // 1. : / g- glBindFramebuffer(GL_FRAMEBUFFER, gBuffer); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); gBufferShader.use(); for(Object obj : Objects) { ConfigureShaderTransformsAndUniforms(); obj.Draw(); } // 2. : g- glBindFramebuffer(GL_FRAMEBUFFER, 0); glClear(GL_COLOR_BUFFER_BIT); lightingPassShader.use(); BindAllGBufferTextures(); SetLightingUniforms(); RenderQuad(); }
рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА: рд╕реНрдерд┐рддрд┐ рд╡реЗрдХреНрдЯрд░, рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░, рд░рдВрдЧ рд╡реЗрдХреНрдЯрд░ рдФрд░ рджрд░реНрдкрдг рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпред рдЬреНрдпрд╛рдорд┐рддреАрдп рдкрд╛рд╕ рдореЗрдВ, рд╣рдо рджреГрд╢реНрдп рдореЗрдВ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдЬреА-рдмрдлрд░ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред рд╣рдо рд╕рднреА рдмрдлрд╝рд░реНрд╕ рдХреЛ рдПрдХ рдбреНрд░реЙ рдореЗрдВ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд░реЗрдВрдбрд░ рдЯрд╛рд░рдЧреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЧреНрд▓реЛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА: рдмреНрд▓реВрдо , рд╣рдм рдкрд░ рдЕрдиреБрд╡рд╛рдж
рдЬреНрдпрд╛рдорд┐рддреАрдп рдкрд╛рд╕ рдХреЗ рд▓рд┐рдП, рд╕реНрдкрд╖реНрдЯ рдирд╛рдо gBuffer рдХреЗ рд╕рд╛рде рдПрдХ рдлреНрд░реЗрдордмрдлрд╝рд░ рдмрдирд╛рдПрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХрдИ рд░рдВрдЧ рдмрдлрд░ рдФрд░ рдПрдХ рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВрдЧреЗред рдкрджреЛрдВ рдФрд░ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ (рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП 16 рдпрд╛ 32-рдмрд┐рдЯ рдлреНрд▓реЛрдЯ рдорд╛рди) рдХреЗ рд╕рд╛рде рдПрдХ рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдмрдирд╛рд╡рдЯ рдореЗрдВ рдлреИрд▓рд╛рдирд╛ рд░рдВрдЧ рдФрд░ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдорд╛рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ (8 рдмрд┐рдЯ рдкреНрд░рддрд┐ рдШрдЯрдХ рд╕рдЯреАрдХрддрд╛) рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред
unsigned int gBuffer; glGenFramebuffers(1, &gBuffer); glBindFramebuffer(GL_FRAMEBUFFER, gBuffer); unsigned int gPosition, gNormal, gColorSpec; // glGenTextures(1, &gPosition); glBindTexture(GL_TEXTURE_2D, gPosition); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, SCR_WIDTH, SCR_HEIGHT, 0, GL_RGB, GL_FLOAT, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gPosition, 0); // glGenTextures(1, &gNormal); glBindTexture(GL_TEXTURE_2D, gNormal); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, SCR_WIDTH, SCR_HEIGHT, 0, GL_RGB, GL_FLOAT, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, gNormal, 0); // + glGenTextures(1, &gAlbedoSpec); glBindTexture(GL_TEXTURE_2D, gAlbedoSpec); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, SCR_WIDTH, SCR_HEIGHT, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_2D, gAlbedoSpec, 0); // OpenGL, unsigned int attachments[3] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2 }; glDrawBuffers(3, attachments); // . [...]
рдЪреВрдВрдХрд┐ рд╣рдо рдХрдИ рдкреНрд░рддрд┐рдкрд╛рджрди рд▓рдХреНрд╖реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдУрдкрдирдЬреАрдПрд▓ рдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдЬрд┐рд╕ glDrawBuffers()
рдореЗрдВ рдЖрдХрд░реНрд╖рд┐рдд рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рд╕реЗ рдЬреБрдбрд╝реЗ glDrawBuffers()
рд╕реЗ рдмрдлрд╝рд░реНрд╕ рдЬреБрдбрд╝реЗ рд╣реИрдВред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╣рдо рдкрджреЛрдВ рдФрд░ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ 3 рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЖрд░рдЬреАрдмреА рдмрдирд╛рд╡рдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╣рдо рддреБрд░рдВрдд рдПрдХ рд╣реА RGBA рдмрдирд╛рд╡рдЯ рдореЗрдВ рд░рдВрдЧ рдФрд░ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдЧреБрдгрд╛рдВрдХ рджреЛрдиреЛрдВ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ - рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рд╣рдо рдПрдХ рдХрдо рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХрд╛ рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рд╡рдЯ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рдирдП рддрд░реАрдХреЗ рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВред
рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЬреА-рдмрдлрд░ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдореЗрдВ рд░рдВрдЧ, рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдкрд░рд╛рд╡рд░реНрддрди рдЧреБрдгрд╛рдВрдХ рд╣реИ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реЗрдбрд░ рдХреА рддрд░рд╣ рдХреБрдЫ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
#version 330 core layout (location = 0) out vec3 gPosition; layout (location = 1) out vec3 gNormal; layout (location = 2) out vec4 gAlbedoSpec; in vec2 TexCoords; in vec3 FragPos; in vec3 Normal; uniform sampler2D texture_diffuse1; uniform sampler2D texture_specular1; void main() { // G- gPosition = FragPos; // G- gNormal = normalize(Normal); // gAlbedoSpec.rgb = texture(texture_diffuse1, TexCoords).rgb; // gAlbedoSpec.a = texture(texture_specular1, TexCoords).r; }
рдЪреВрдВрдХрд┐ рд╣рдо рдХрдИ рдкреНрд░рддрд┐рдкрд╛рджрди рд▓рдХреНрд╖реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, layout
рдХреА рдорджрдж рд╕реЗ layout
рдпрд╣ рд╕рдВрдХреЗрдд layout
рд╣реИрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдлреНрд░реЗрдордмрдлрд╝рд░ рдХреЗ рдмрдлрд░ рдореЗрдВ layout
рдХреНрдпрд╛ рдФрд░ рдХреНрдпрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрдлрд░ рдореЗрдВ рджрд░реНрдкрдг рдЧреБрдгрд╛рдВрдХ рдХреЛ рд╕реНрдЯреЛрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдмрдлрд╝рд░ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЗ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдореЗрдВ рдлреНрд▓реЛрдЯ рдореВрд▓реНрдп рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╣реА рд╕рдордиреНрд╡рдп рд╕реНрдерд╛рди рдореЗрдВ рд╕рднреА рдЪрд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдмреЗрд╣рдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдЧрдгрдирд╛ (рдФрд░ рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ) рдХрд░рддреЗ рд╣реИрдВред
рдЕрдЧрд░ рдЕрдм рд╣рдо рдХрдИ рдиреИрдиреЛ-рдЬреАрдЯреНрд╕ рдХреЛ рдЬреА-рдмрдлрд░ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдХреНрд░реАрди рдХреЗ рдПрдХ рдЪреМрдерд╛рдИ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдмрдлрд░ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рдХреЗ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦреЗрдВрдЧреЗ:

рд╕реНрдерд┐рддрд┐ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╡реИрдХреНрдЯрд░ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдХреЗ рджреЗрдЦреЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рд╕рд╣реА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджрд╛рдИрдВ рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдорд╛рдиреНрдп рд╡реИрдХреНрдЯрд░ рд▓рд╛рд▓ рд╣реЛрдВрдЧреЗред рдЗрд╕реА рддрд░рд╣ рд╕реЗ рджреГрд╢реНрдп рдХреЗ рдХреЗрдВрджреНрд░ рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рдеред рдЬреА-рдмрдлрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдЗрдП рдЕрдЧрд▓реЗ рднрд╛рдЧ рдкрд░ рдЬрд╛рдПрдБ: рдкреНрд░рдХрд╛рд╢ рдХрд╛ рдорд╛рд░реНрдЧред
рдкреНрд░рдХрд╛рд╢ рдорд╛рд░реНрдЧ
рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреА-рдмрдлрд░ рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рддреЛ рд╣рдо рдкреНрд░рдХрд╛рд╢-рдЧрдгрдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЬреА-рдмрдлрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢ рдФрд░ рдЕрдВрддрд┐рдо рд░рдВрдЧреЛрдВ рдХреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред рдЪреВрдВрдХрд┐ рдЬреА-рдмрдлрд░ рдХреЗ рдореВрд▓реНрдп рдХреЗрд╡рд▓ рджреГрд╢реНрдпрдорд╛рди рдЕрдВрд╢реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд╢ рдЧрдгрдирд╛рдУрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд╛рдлреА рдкреНрд░рднрд╛рд╡реА рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рджреГрд╢реНрдпреЛрдВ рдореЗрдВ, рдЬрд┐рд╕рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рддреЗ рд╕рдордп, рдХрдИ рдмрд╛рд░ рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЕрдХреНрд╕рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред
рдкреНрд░рдХрд╛рд╢ рдХреЗ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреВрд░реНрдг-рд╕реНрдХреНрд░реАрди рдЖрдпрдд (рдереЛрдбрд╝рд╛ рдмрд╛рдж рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рднрд╛рд╡) рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢ рдХреА рдзреАрдореА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, gPosition); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, gNormal); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, gAlbedoSpec); // shaderLightingPass.use(); SendAllLightUniformsToShader(shaderLightingPass); shaderLightingPass.setVec3("viewPos", camera.Position); RenderQuad();
рд╣рдо рдкреНрд░рддрд┐рдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬреА-рдмрдлрд░ рдмрдирд╛рд╡рдЯ рдХреЛ рдмрд╛рдВрдзрддреЗ рд╣реИрдВ , рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╢реЗрдбрд░ рдореЗрдВ рдкреНрд░рдХрд╛рд╢-рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░ рдорд╛рди рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдмреИрдардХ рдХреЗ рдкрд╛рдареЛрдВ рдореЗрдВ рд╣рдо рдЬрд┐рд╕ рдЕрдВрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдЦрдВрдб рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╢реЗрдбрд░ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИред рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдирдпрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЬреА-рдмрдлрд░ рд╕реЗ рд╕реАрдзреЗ рдкреНрд░рдХрд╛рд╢ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИред
#version 330 core out vec4 FragColor; in vec2 TexCoords; uniform sampler2D gPosition; uniform sampler2D gNormal; uniform sampler2D gAlbedoSpec; struct Light { vec3 Position; vec3 Color; }; const int NR_LIGHTS = 32; uniform Light lights[NR_LIGHTS]; uniform vec3 viewPos; void main() { // G- vec3 FragPos = texture(gPosition, TexCoords).rgb; vec3 Normal = texture(gNormal, TexCoords).rgb; vec3 Albedo = texture(gAlbedoSpec, TexCoords).rgb; float Specular = texture(gAlbedoSpec, TexCoords).a; // vec3 lighting = Albedo * 0.1; // vec3 viewDir = normalize(viewPos - FragPos); for(int i = 0; i < NR_LIGHTS; ++i) { // vec3 lightDir = normalize(lights[i].Position - FragPos); vec3 diffuse = max(dot(Normal, lightDir), 0.0) * Albedo * lights[i].Color; lighting += diffuse; } FragColor = vec4(lighting, 1.0); }
рд▓рд╛рдЗрдЯрд┐рдВрдЧ рд╢реЗрдбрд░ 3 рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЬреНрдпрд╛рдорд┐рддреАрдп рдорд╛рд░реНрдЧ рдореЗрдВ рджрд░реНрдЬ рдХреА рдЧрдИ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдФрд░ рдЬрд┐рд╕рдореЗрдВ рдЬреА-рдмрдлрд░ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдмрдирд╛рд╡рдЯ рд╕реЗ рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рдорд╛рди рдорд┐рд▓рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рд╛рдеред рдЦрдВрдб рдЫрд╛рдпрд╛рджрд╛рд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдмрдирд╛рд╡рдЯ рд╕реЗ рдкрдврд╝рдХрд░ рдкреНрд░рдХрд╛рд╢ рдЪрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдПрдХ рдмрдирд╛рд╡рдЯ - gAlbedoSpec
рд╕реЗ рд░рдВрдЧ рдФрд░ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рджреЛрдиреЛрдВ рдЧреБрдгрд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд gAlbedoSpec
ред
рдЪреВрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЦрдВрдб рдХреЗ рд▓рд┐рдП рдмреНрд▓рд┐рди-рдлреЛрдВрдЧ рдореЙрдбрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдорд╛рди (рд╕рд╛рде рд╣реА рд╕рдорд╛рди рд╢реЗрдбрд░ рдЪрд░) рд╣реИрдВ, рд╣рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рдЧрдгрдирд╛ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рд╣реИ рдЗрдирдкреБрдЯ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ред
32 рдЫреЛрдЯреЗ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдбреЗрдореЛ рд╢реБрд░реВ рдХрд░рдирд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ:

рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рдиреБрдХрд╕рд╛рди рдореЗрдВ рд╕реЗ рдПрдХ рдорд┐рд╢реНрд░рдг рдХреА рдЕрд╕рдВрднрд╡рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЬреА-рдмрдлрд╝рд░реНрд╕ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕рддрд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ, рдЬрдмрдХрд┐ рдорд┐рд╢реНрд░рдг рдХрдИ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред (рд╕рдореНрдорд┐рд╢реНрд░рдг) , рдЕрдиреБрд╡рд╛рдж ред рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд╛ рдПрдХ рдФрд░ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ; рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЬреА-рдмрдлрд░ рдореЗрдВ рднреМрддрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рдХрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрди рдХрдорд┐рдпреЛрдВ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд┐рд╢реНрд░рдг рдХреА рдХрдореА) рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗ рдЕрдХреНрд╕рд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ: рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдкрд╛рджрди, рдФрд░ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рд╛рде рджреВрд╕рд░рд╛ рднрд╛рдЧ рджреГрд╢реНрдп рдореЗрдВ рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдпрд╛ рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд░рдВрдЧреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИред (рдиреЛрдЯред рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ: рдкрд╛рд░рднрд╛рд╕реА рдзреБрдЖрдВ, рдЖрдЧ, рдХрд╛рдВрдЪ рдЬреЛрдбрд╝рдирд╛) рдХрд╛рд░реНрдп рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЫреЛрдЯреЗ рдХреНрдпреВрдмреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдХрд╛рд╢ рдХреНрдпреВрдмреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╢реЗрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рд╡реЗ рд╕рдорд╛рди рд░рдВрдЧ рдореЗрдВ рдЪрдордХрддреЗ рд╣реИрдВ)ред
рдкреНрд░рддреНрдпрдХреНрд╖ рдХреЗ рд╕рд╛рде рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рддрд┐рдкрд╛рджрди рдорд┐рд▓рд╛рдПрдВред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдХреЗрдВрджреНрд░ рдХреЗ рд╕рд╛рде 3 рдбреА рдХреНрдпреВрдм рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрд░реЛрдд рдХреЗ рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд╢ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рдорди рдореЗрдВ рдЖрддрд╛ рд╣реИ рд╡рд╣ рд╕реАрдзреЗ рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рддрд┐рдкрд╛рджрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдХреНрдпреВрдмреНрд╕ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдо рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдХреНрдпреВрдмреНрд╕ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рдмрд╛рджред рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
// [...] RenderQuad(); // shaderLightBox.use(); shaderLightBox.setMat4("projection", projection); shaderLightBox.setMat4("view", view); for (unsigned int i = 0; i < lightPositions.size(); i++) { model = glm::mat4(); model = glm::translate(model, lightPositions[i]); model = glm::scale(model, glm::vec3(0.25f)); shaderLightBox.setMat4("model", model); shaderLightBox.setVec3("lightColor", lightColors[i]); RenderCube(); }
рдпреЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреНрдпреВрдмреНрд╕ рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рддрд┐рдкрд╛рджрди рд╕реЗ рдЧрд╣рд░рд╛рдИ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрд╢рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд▓рдХреНрд╖реНрдп рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдЬреНрдпрд╛рдорд┐рддреАрдп рдорд╛рд░реНрдЧ рд╕реЗ рдЧрд╣рд░рд╛рдИ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЧрд╣рд░рд╛рдИ рдмрдлрд╝рд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЪрдордХрджрд╛рд░ рдХреНрдпреВрдмреНрд╕ рдЦреАрдВрдЪреЗрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЪрдордХрджрд╛рд░ рдХреНрдпреВрдмреНрд╕ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЗрд╡рд▓ рддрднреА рдЦреАрдВрдЪреЗ рдЬрд╛рдПрдВрдЧреЗ рдЬрдм рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд░реАрдм рд╣реЛрдВред
рд╣рдо glBlitFramebuffer
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ glBlitFramebuffer
рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреВрд╕рд░реЗ glBlitFramebuffer
рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдордиреЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг: ( рдПрдВрдЯреА-рдПрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ ), рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИ ред glBlitFramebuffer
рдлрд╝рдВрдХреНрд╢рди glBlitFramebuffer
рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдирд┐рд░реНрджрд┐рд╖реНрдЯ рднрд╛рдЧ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп glBlitFramebuffer
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рднрд╛рдЧ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реИред
рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рдХрд╛рд╢ рдорд╛рд░реНрдЧ рдореЗрдВ рдЦреАрдВрдЪреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдлреНрд░реЗрдордмрдлрд╝рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЬреА-рдмрдлрд░ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рдХреЛ рдмрдЪрд╛рдпрд╛ред рдпрджрд┐ рд╣рдо рдЬреА-рдмрдлрд░ рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЪрдордХрджрд╛рд░ рдХреНрдпреВрдмреНрд╕ рдХреЛ рдЦреАрдВрдЪрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ рджреГрд╢реНрдп рдХреЗ рдкреВрд░реЗ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рдПрдХ рдкреНрд░рддреНрдпрдХреНрд╖ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рдореЗрдВ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдлреНрд░реЗрдордмрдлрд╝рд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
glBindFramebuffer(GL_READ_FRAMEBUFFER, gBuffer); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); // - glBlitFramebuffer( 0, 0, SCR_WIDTH, SCR_HEIGHT, 0, 0, SCR_WIDTH, SCR_HEIGHT, GL_DEPTH_BUFFER_BIT, GL_NEAREST ); glBindFramebuffer(GL_FRAMEBUFFER, 0); // [...]
рдпрд╣рд╛рдВ рд╣рдо рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рдбреЗрдкреНрде рдмрдлрд░ рдХреА рд╕рдВрдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА рдХреЛ рдбрд┐рдлреЙрд▓реНрдЯ рдбреЗрдкреНрде рдмрдлрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд▓рд░ рдмрдлрд╝рд░реНрд╕ рдпрд╛ рд╕реНрдЯреЗрдВрд╕рд┐рд▓ рдмрдлрд░ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдпрджрд┐ рд╣рдо рдЕрдм рдЪрдордХрддреЗ рдХреНрдпреВрдмреНрд╕ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЦреАрдВрдЪрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ рджреГрд╢реНрдп рдХреА рдЬреНрдпрд╛рдорд┐рддрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рд░рд▓ рд░реВрдк рдореЗрдВ рдЦреАрдВрдЪреА рдЧрдИ рд╣реИ)ред

рдбреЗрдореЛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рд╛рде рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕рдореНрдорд┐рд╢реНрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╢реЗрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд
рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдХрдореА рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░ рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рд╡рд┐рд▓рдВрдмрд┐рдд рдкреНрд░рдХрд╛рд╢ рдЕрдХреЗрд▓реЗ рд╣рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЕрднреА рднреА рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рдпреЛрдЧрджрд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╣реИред рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрдВрджрд░ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реНрдердЧрд┐рдд рдкреНрд░рддрд┐рдкрд╛рджрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ - рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдХреНрд╖реЗрддреНрд░ред (рдкреНрд░рдХрд╛рд╢ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ)
рдЖрдорддреМрд░ рдкрд░, рдЬрдм рд╣рдо рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рдмреБрджреНрдз рджреГрд╢реНрдп рдореЗрдВ рдЯреБрдХрдбрд╝реЗ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЯреБрдХрдбрд╝реЗ рдкрд░ рдЗрд╕рдХреА рджреВрд░реА рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рджреГрд╢реНрдп рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рдпреЛрдЧрджрд╛рди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред рдпрджрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХрднреА рднреА рдЯреБрдХрдбрд╝реЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рддреЛ рд╣рдо рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдордп рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреНрдпреЛрдВ рдмрд░реНрдмрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рджрд╛рдпрд░реЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рддреНрд░рд┐рдЬреНрдпрд╛ (рдпрд╛ рдЖрдпрддрди) рдХреЛ рдЦреЛрдЬрдирд╛ рд╣реИ - рдЕрд░реНрдерд╛рдд, рд╡рд╣ рдХреНрд╖реЗрддреНрд░ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕рддрд╣ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдЪреВрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреНрд╖реАрдгрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЕрдзрд┐рдХрддрдо рджреВрд░реА (рддреНрд░рд┐рдЬреНрдпрд╛) рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рдХрд╛рд╢ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдХреЗрд╡рд▓ рдЙрди рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд╢ рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЧрдгрдирд╛ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЪрд╛рд▓ рд╣реИред
рдПрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд (рддреНрд░рд┐рдЬреНрдпрд╛) рдХреЗ рджрд╛рдпрд░реЗ рдХреА рдЧрдгрдирд╛
рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рддреНрд░рд┐рдЬреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЪрдордХ рдХреЗ рд▓рд┐рдП рднрд┐рдЧреЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рдореАрдХрд░рдг рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕реЗ рд╣рдо рдЕрдВрдзреЗрд░рд╛ рдорд╛рдирддреЗ рд╣реИрдВ - рдпрд╣ 0.0 рдпрд╛ рдХреБрдЫ рдФрд░ рдЕрдзрд┐рдХ рд░реЛрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдЕрдВрдзреЗрд░рд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 0.03ред рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ, рд╣рдо рдкреНрд░рдХрд╛рд╢ рдкреБрдВрдЬ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓, рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХреНрд╖реАрдгрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ
FрдкреНрд░рдХрд╛рд╢= fracIKc+KlтИЧd+KqтИЧd2
рд╣рдо рдЗрд╕ рд╕рдореАрдХрд░рдг рдХреЛ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрдм FрдкреНрд░рдХрд╛рд╢=0.0 , рдпрд╛рдиреА, рдЬрдм рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдВрдзреЗрд░рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рдореАрдХрд░рдг рдХрднреА рднреА 0.0 рдХреЗ рд╕рдЯреАрдХ рдореВрд▓реНрдп рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдХреЛрдИ рд╣рд▓ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп 0.0 рдХреЗ рдХрд░реАрдм рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдЪрдордХ рдХреЗ рд▓рд┐рдП рд╕рдореАрдХрд░рдг рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдВрдзреЗрд░рд╛ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЪрдордХ рдореВрд▓реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ frac5256 - 256 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд, 8-рдмрд┐рдЯ рдлреНрд░реЗрдордмрдлрд╝рд░ рдореЗрдВ 256 рдЕрд▓рдЧ рдЪрдордХ рдорд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрдпрдирд┐рдд рдХреНрд╖реАрдгрди рдлрд╝рдВрдХреНрд╢рди рд░реЗрдВрдЬ рдХреА рджреВрд░реА рдкрд░ рд▓рдЧрднрдЧ рдЕрдВрдзреЗрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ 5/256 рд╕реЗ рдХрдо рдЪрдордХ рддрдХ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рд╕реАрдорд╛ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реЛ рдЬрд╛рдПрдЧреА - рдпрд╣ рдЗрддрдирд╛ рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реИред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рд╕реЗ рдкреНрд░рдХрд╛рд╢ рдХреА рдЕрдЪрд╛рдирдХ рддреЗрдЬ рд╕реАрдорд╛ рдирд╣реАрдВ рджреЗрдЦрдиреА рдЪрд╛рд╣рд┐рдПред рдмреЗрд╢рдХ, рдпрд╣ рджреГрд╢реНрдп рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдиреНрдпреВрдирддрдо рдЪрдордХ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдЫреЛрдЯреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЧрдгрдирд╛ рдХреА рджрдХреНрд╖рддрд╛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЫрд╡рд┐ рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИ: рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреА рд╕реАрдорд╛рдУрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдЕрдЪрд╛рдирдХ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред
рдХреНрд╖реАрдгрди рд╕рдореАрдХрд░рдг рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдмрди рдЬрд╛рддрд╛ рд╣реИ:
frac5256= fracImaxAttenuation
рдпрд╣рд╛рдВ IрдЕрдзрд┐рдХрддрдо - рдкреНрд░рдХрд╛рд╢ рдХрд╛ рд╕рдмрд╕реЗ рдЪрдордХрджрд╛рд░ рдШрдЯрдХ (рдЖрд░, рдЬреА, рдмреА рдЪреИрдирд▓реЛрдВ рд╕реЗ)ред рд╣рдо рд╕рдмрд╕реЗ рдЙрдЬреНрдЬреНрд╡рд▓ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рдШрдЯрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рджрд╛рдпрд░реЗ рдкрд░ рдПрдХ рдХрдордЬреЛрд░ рдкреНрд░рддрд┐рдмрдВрдз рджреЗрдВрдЧреЗред
рд╣рдо рд╕рдореАрдХрд░рдг рд╣рд▓ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ:
frac5256 cdotAttenuation=Imax
Attenuation=Imax cdot frac2565
Kc+Kl cdotd+Kq cdotd2=Imax cdot frac2565
Kc+Kl cdotd+Kq cdotd2тИТIрдЕрдзрд┐рдХрддрдо cdot frac2565=0
рдЕрдВрддрд┐рдо рд╕рдореАрдХрд░рдг рдлреЙрд░реНрдо рдореЗрдВ рдПрдХ рджреНрд╡рд┐рдШрд╛рдд рд╕рдореАрдХрд░рдг рд╣реИ x2+bx+c=0 рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде:
x= fracтИТKl+ sqrtK2lтИТ4Kq(KcтИТImax frac2565)2Kq
рд╣рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдореАрдХрд░рдг рдорд┐рд▓рд╛ рдЬреЛ рд╣рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рддреНрд░рд┐рдЬреНрдпрд╛ - x рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ (рдирд┐рд░рдВрддрд░ рдХреНрд╖реАрдгрди, рд░реИрдЦрд┐рдХ рдФрд░ рджреНрд╡рд┐рдШрд╛рдд рдЧреБрдгрд╛рдВрдХ) рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
float constant = 1.0; float linear = 0.7; float quadratic = 1.8; float lightMax = std::fmaxf(std::fmaxf(lightColor.r, lightColor.g), lightColor.b); float radius = (-linear + std::sqrtf(linear * linear - 4 * quadratic * (constant - (256.0 / 5.0) * lightMax))) / (2 * quadratic);
рд╕реВрддреНрд░ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рдЕрдзрд┐рдХрддрдо рдЪрдордХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓рдЧрднрдЧ 1.0 рдФрд░ 5.0 рдХреЗ рдмреАрдЪ рдПрдХ рддреНрд░рд┐рдЬреНрдпрд╛ рджреЗрддрд╛ рд╣реИред
рд╣рдо рдордВрдЪ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдЗрд╕ рддреНрд░рд┐рдЬреНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЙрди рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рднреАрддрд░ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдиреАрдЪреЗ рдкреНрд░рдХрд╛рд╢ рдХреА рдПрдХ рд░реЗрдбреЛрди рдорд╛рд░реНрдЧ рд╣реИ рдЬреЛ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗрд╡рд▓ рд╢реИрдХреНрд╖рд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ (рд╣рдо рдЬрд▓реНрдж рд╣реА рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпреЛрдВ)ред
struct Light { [...] float Radius; }; void main() { [...] for(int i = 0; i < NR_LIGHTS; ++i) { // float distance = length(lights[i].Position - FragPos); if(distance < lights[i].Radius) { // [...] } } }
рдкрд░рд┐рдгрд╛рдо рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЗрд╕рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рднреАрддрд░ рд╣реА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдВрддрд┐рдо рдХреЛрдб рдПрдХ рдбреЗрдореЛ рд╣реИред ред
рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рджрд╛рдпрд░реЗ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧред
рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЯреБрдХрдбрд╝рд╛ рдЯреБрдХрдбрд╝рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдФрд░ рдХреЗрд╡рд▓ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреА рдЧрдгрдирд╛ рд╕реЗ рдХреИрд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдФрд░ GLSL shader рднрд╛рд╖рд╛ рдмрд╣реБрдд рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рд▓реВрдк рдФрд░ рд╢рд╛рдЦрд╛рдУрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдкрд░ shader рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХрдИ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ рдХреЛ рдПрдХ рд╣реА shader рдХреА рдЧрдгрдирд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЕрдХреНрд╕рд░ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╢реЗрдб рд╣рдореЗрд╢рд╛ рд╕рднреА рд╢рд╛рдЦрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рднреА рд╢реЗрдб рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВред (рдиреЛрдЯ рд▓реЗрдиред рдпрд╣ рдЧрдгрдирд╛рдУрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ shader рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред) рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдпрд╣ рдкрддрд╛ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рддреНрд░рд┐рдЬреНрдпрд╛ рдЬрд╛рдВрдЪ рдмреЗрдХрд╛рд░ рд╣реИ: рд╣рдо рдЕрднреА рднреА рд╕рднреА рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗ!
рдкреНрд░рдХрд╛рд╢ рдХреЗ рджрд╛рдпрд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рддрд░рд╣ рдПрдХ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИред рдЧреЛрд▓реЗ рдХрд╛ рдХреЗрдВрджреНрд░ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдХреНрд╖реЗрддреНрд░ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд╣реА рд╣реЛред рдпрд╣рд╛рдБ рдПрдХ рдЫреЛрдЯреА рд╕реА рдЪрд╛рд▓ рд╣реИ - рд╣рдо рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдЖрд╕реНрдердЧрд┐рдд рдЯреБрдХрдбрд╝рд╛ shader рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдЧреЛрд▓реЗ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╕рдордп, рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рд╣рдо рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдкрд┐рдХреНрд╕рд▓ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рд╕рднреА рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред :

, . , , . _*__
_ + __ , .
: ( ) , , , - ( ). stenil .
, , , . ( ) : c (deferred lighting) (tile-based deferred shading) . MSAA. .
vs
( ) - , , . , тАФ , MSAA, .
( ), ( g- ..) . , .
: , , , . , , , . . parallax mapping, , . , .
PS - . , !