рдУрдкрдирдЬреАрдПрд▓ рдЬрд╛рдиреЗрдВред рдкрд╛рда 5.8 - рдмреНрд▓реВрдо

OGL3

рдлреВрд▓


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

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


рд╕рд╛рдордЧреНрд░реА
рднрд╛рдЧ 1. рдЖрд░рдВрдн рдХрд░рдирд╛

  1. рдУрдкрди
  2. рдЦрд┐рдбрд╝рдХреА рдХрд╛ рдирд┐рд░реНрдорд╛рдг
  3. рдирдорд╕реНрдХрд╛рд░ рдЦрд┐рдбрд╝рдХреА
  4. рдирдорд╕реНрддреЗ рддреНрд░рд┐рдХреЛрдг
  5. shaders
  6. рдмрдирд╛рд╡рдЯ
  7. рдкрд░рд┐рд╡рд░реНрддрди
  8. рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА
  9. рдХреИрдорд░рд╛

рднрд╛рдЧ 2. рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рдХрд╛рд╢

  1. рд░рдВрдЧ
  2. рдкреНрд░рдХрд╛рд╢ рдореВрд▓ рдмрд╛рддреЗрдВ
  3. рд╕рд╛рдордЧреНрд░реА
  4. рдмрдирд╛рд╡рдЯ рдХреЗ рдирдХреНрд╢реЗ
  5. рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд
  6. рдПрдХрд╛рдзрд┐рдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд

рднрд╛рдЧ 3ред 3 рдбреА рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

  1. рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдорд╛рди рд▓реЗрдВ
  2. рдореЗрд╖ рдмрд╣реБрднреБрдЬ рд╡рд░реНрдЧ
  3. 3 рдбреА рдореЙрдбрд▓ рд╡рд░реНрдЧ

рднрд╛рдЧ 4. рдЙрдиреНрдирдд OpenGL рд╕реБрд╡рд┐рдзрд╛рдПрдБ

  1. рдЧрд╣рд░рд╛рдИ рдкрд░реАрдХреНрд╖рдг
  2. рд╕реНрдЯреИрдВрд╕рд┐рд▓ рдкрд░реАрдХреНрд╖рдг
  3. рд░рдВрдЧ рдорд┐рд▓рд╛рдирд╛
  4. рдХреНрд▓рд┐рдкрд┐рдВрдЧ рдЪреЗрд╣рд░реЗ
  5. рдлреНрд░реЗрдо рдмрдлрд░
  6. рдШрди рдХрд╛рд░реНрдб
  7. рдЙрдиреНрдирдд рдбреЗрдЯрд╛ рд╣реИрдВрдбрд▓рд┐рдВрдЧ
  8. рдЙрдиреНрдирдд GLSL
  9. рдЬреНрдпрд╛рдорд┐рддреАрдп shader
  10. instancing
  11. рдЪреМрд░рд╕рд╛рдИ

рднрд╛рдЧ 5. рдЙрдиреНрдирдд рдкреНрд░рдХрд╛рд╢

  1. рдЙрдиреНрдирдд рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ред рдмреНрд▓рд┐рди-рдлреЛрдВрдЧ рдореЙрдбрд▓ред
  2. рдЧрд╛рдорд╛ рд╕реБрдзрд╛рд░
  3. рдЫрд╛рдпрд╛ рдХрд╛рд░реНрдб
  4. рд╕рд░реНрд╡рджрд┐рд╢рд╛рддреНрдордХ рдЫрд╛рдпрд╛ рдирдХреНрд╢реЗ
  5. рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░рдг
  6. рд▓рдВрдмрди рдорд╛рдирдЪрд┐рддреНрд░рдг
  7. рдПрдЪрдбреАрдЖрд░
  8. рдлреВрд▓
  9. рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рддрд┐рдкрд╛рджрди
  10. SSAO

рднрд╛рдЧ 6. рдкреАрдмреАрдЖрд░

  1. рд╕рд┐рджреНрдзрд╛рдВрдд
  2. рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд
  3. IBLред рд╡рд┐рдХреНрд╖реЗрдкрдгред
  4. IBLред рдорд┐рд░рд░ рдПрдХреНрд╕рдкреЛрдЬрд╝рд░ред


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

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

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

рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЪрд░рдг рджрд░ рдЪрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред 4 рдЪрдордХреАрд▓реЗ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рд╡рд╛рд▓реЗ рдПрдХ рджреГрд╢реНрдп рдХреЛ рд░рдВрдЧреАрди рдХреНрдпреВрдмреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред рдЗрди рд╕рднреА рдХреА рдЪрдордХ рдорд╛рди 1.5 рд╕реЗ 15.0 рддрдХ рд╣реИред рдпрджрд┐ рд░рдВрдЧ рдмрдлрд░ рдПрдЪрдбреАрдЖрд░ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:


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


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


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


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

рддреЛ, рдЙрдкрд░реЛрдХреНрдд рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣рдореЗрдВ рдЦрд┐рд▓ рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдПрдХ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рдердо рджреЗрддреА рд╣реИрдВред рдиреАрдЪреЗ рджреА рдЧрдИ рдЫрд╡рд┐ рдЖрд╡рд╢реНрдпрдХ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рддреА рд╣реИ:


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╕реАрдорд╛ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рджреГрд╢реНрдп рдХреЗ рдЙрдЬреНрдЬреНрд╡рд▓ рднрд╛рдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдПред рдпрд╣реА рд╣рдо рдХрд░реЗрдВрдЧреЗред

рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдирд┐рдХрд╛рд▓реЗрдВ


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

layout (location = 0) out vec4 FragColor; layout (location = 1) out vec4 BrightColor; 

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

 //       unsigned int hdrFBO; glGenFramebuffers(1, &hdrFBO); glBindFramebuffer(GL_FRAMEBUFFER, hdrFBO); unsigned int colorBuffers[2]; glGenTextures(2, colorBuffers); for (unsigned int i = 0; i < 2; i++) { glBindTexture(GL_TEXTURE_2D, colorBuffers[i]); 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_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); //     glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D, colorBuffers[i], 0 ); } 

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

 unsigned int attachments[2] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 }; glDrawBuffers(2, attachments); 

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

 #version 330 core layout (location = 0) out vec4 FragColor; layout (location = 1) out vec4 BrightColor; [...] void main() { [...] //      FragColor = vec4(lighting, 1.0); //         //   -    ,    float brightness = dot(FragColor.rgb, vec3(0.2126, 0.7152, 0.0722)); if(brightness > 1.0) BrightColor = vec4(FragColor.rgb, 1.0); else BrightColor = vec4(0.0, 0.0, 0.0, 1.0); } 

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

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рддрдХрдиреАрдХ рдПрдЪрдбреАрдЖрд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рд╛рде рдЗрддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдПрдЪрдбреАрдЖрд░ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдкрд╛рджрди рд░рдВрдЧ рдШрдЯрдХреЛрдВ рдХреЛ 1.0 рдХреА рдКрдкрд░реА рд╕реАрдорд╛ рд╕реЗ рдкрд░реЗ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдорд╛рдирдХ рдЕрдВрддрд░рд╛рд▓ [0., 1.] рдХреЗ рдмрд╛рд╣рд░ рдЪрдордХ рджрд╣рд▓реАрдЬ рдХреЛ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдлрд╛рдЗрди-рдЯреНрдпреВрди рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рджреГрд╢реНрдп рдХреЗ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЙрдЬреНрдЬреНрд╡рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред рдПрдЪрдбреАрдЖрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдЖрдкрдХреЛ рдЕрдВрддрд░рд╛рд▓ [0., 1.] рдореЗрдВ рдПрдХ рдЪрдордХ рджрд╣рд▓реАрдЬ рдХреЗ рд╕рд╛рде рд╕рдВрддреЛрд╖ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд╛рдлреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЪрдордХ рдореЗрдВ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ "рддреЗрдЬ" рдХрдЯрдСрдл рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдХреНрд╕рд░ рдЦрд┐рд▓рдиреЗ рдХреЛ рднреА рдмрд╣реБрдд рд╣реА рдбрд░рд╛рд╡рдирд╛ рдФрд░ рдЖрдХрд░реНрд╖рдХ рдмрдирд╛рддрд╛ рд╣реИ (рдкрд╣рд╛рдбрд╝реЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдПрдХ рдмрд░реНрдл рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЙрдЪреНрдЪ рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ) ред

рд╢реЗрдбрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рджреЛ рд▓рдХреНрд╖реНрдп рдмрдлрд╝рд░реНрд╕ рдореЗрдВ рджреГрд╢реНрдп рдХреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЫрд╡рд┐ рд╣реЛрдЧреА, рд╕рд╛рде рд╣реА рдХреЗрд╡рд▓ рдЙрдЬреНрдЬреНрд╡рд▓ рдХреНрд╖реЗрддреНрд░реЛрдВ рд╡рд╛рд▓реА рдЫрд╡рд┐ рд╣реЛрдЧреАред


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

рдЧреМрд╕рд┐рдпрди рдмреНрд▓рд░


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


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

рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рднрд╛рд░рд╛рдВрдХ рдЧреБрдгрд╛рдВрдХ рдХреЗ рджреЛ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕реЗ рдЧреМрд╕рд┐рдпрди рд╡рдХреНрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджреЛ-рдЖрдпрд╛рдореА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд░рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рддреБрд░рдВрдд рдПрдХ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗ: рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ 32x32 рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЫреЛрдЯреЗ рдзрдмреНрдмрд╛ рдХреЛрд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдЫрд╡рд┐ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП 1024 рдмрдирд╛рд╡рдЯ рдХреЗ рдирдореВрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА!

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЧреЙрд╕рд┐рдпрди рд╡рдХреНрд░ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЧрдгрд┐рддреАрдп рд╡рд┐рд╢реЗрд╖рддрд╛ - рдкреГрдердХреНрдХрд░рдг рд╣реИ, рдЬреЛ рдХреНрд╖реИрддрд┐рдЬ рдФрд░ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдШрдЯрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рджреЛ рдЖрдпрд╛рдореА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рджреЛ рдПрдХ рдЖрдпрд╛рдореА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджреЗрдЧрд╛ред рдпрд╣ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рдмрджрд▓реЗ рдореЗрдВ рдзреБрдВрдзрд▓рд╛ рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛: рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ, рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рджрд┐рд╢рд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╡рдЬрди рдХреЗ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд▓рдВрдмрд╡рддред рдкрд░рд┐рдгрд╛рдореА рдЫрд╡рд┐ рджреЛ-рдЖрдпрд╛рдореА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕рдорд╛рди рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡реАрдбрд┐рдпреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдмрд╣реБрдд рдХрдо рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╢рдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: рдмрдирд╛рд╡рдЯ рд╕реЗ 1024 рдирдореВрдиреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рд╣рдореЗрдВ рдХреЗрд╡рд▓ 32 + 32 = 64 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ! рдпрд╣ рджреЛ-рдкрд╛рд╕ рдЧреМрд╕рд┐рдпрди рдирд┐рд╕реНрдкрдВрджрди рдХрд╛ рд╕рд╛рд░ рд╣реИред


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

рдлрд╝реНрд░реЗрдо рдмрдлрд╝рд░ рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЛрдб рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдЧреЙрд╕рд┐рдпрди рдмреНрд▓рд░ рд╢реЗрдбрд░ рдХреЛрдб рдкрд░:

 #version 330 core out vec4 FragColor; in vec2 TexCoords; uniform sampler2D image; uniform bool horizontal; uniform float weight[5] = float[] (0.227027, 0.1945946, 0.1216216, 0.054054, 0.016216); void main() { //     vec2 tex_offset = 1.0 / textureSize(image, 0); //    vec3 result = texture(image, TexCoords).rgb * weight[0]; if(horizontal) { for(int i = 1; i < 5; ++i) { result += texture(image, TexCoords + vec2(tex_offset.x * i, 0.0)).rgb * weight[i]; result += texture(image, TexCoords - vec2(tex_offset.x * i, 0.0)).rgb * weight[i]; } } else { for(int i = 1; i < 5; ++i) { result += texture(image, TexCoords + vec2(0.0, tex_offset.y * i)).rgb * weight[i]; result += texture(image, TexCoords - vec2(0.0, tex_offset.y * i)).rgb * weight[i]; } } FragColor = vec4(result, 1.0); } 

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

рдмрдирд╛рд╡рдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд░рдВрдЧ рдмрдлрд░ рд╡рд╛рд▓реЗ рджреЛ рдлреНрд░реЗрдо рдмрдлрд╝рд░реНрд╕ рдмрдирд╛рдПрдБ:

 unsigned int pingpongFBO[2]; unsigned int pingpongBuffer[2]; glGenFramebuffers(2, pingpongFBO); glGenTextures(2, pingpongBuffer); for (unsigned int i = 0; i < 2; i++) { glBindFramebuffer(GL_FRAMEBUFFER, pingpongFBO[i]); glBindTexture(GL_TEXTURE_2D, pingpongBuffer[i]); 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_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, pingpongBuffer[i], 0 ); } 

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

 bool horizontal = true, first_iteration = true; int amount = 10; shaderBlur.use(); for (unsigned int i = 0; i < amount; i++) { glBindFramebuffer(GL_FRAMEBUFFER, pingpongFBO[horizontal]); shaderBlur.setInt("horizontal", horizontal); glBindTexture( GL_TEXTURE_2D, first_iteration ? colorBuffers[1] : pingpongBuffers[!horizontal] ); RenderQuad(); horizontal = !horizontal; if (first_iteration) first_iteration = false; } glBindFramebuffer(GL_FRAMEBUFFER, 0); 

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

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдзреБрдВрдзрд▓рд╛ рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


рдкреНрд░рднрд╛рд╡ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЗрд╡рд▓ рдзреБрдВрдзрд▓реА рдЫрд╡рд┐ рдХреЛ рджреГрд╢реНрдп рдХреЗ рдореВрд▓ рдПрдЪрдбреАрдЖрд░ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред

рдмрдирд╛рд╡рдЯ рд╕рдореНрдорд┐рд╢реНрд░рдг


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

 #version 330 core out vec4 FragColor; in vec2 TexCoords; uniform sampler2D scene; uniform sampler2D bloomBlur; uniform float exposure; void main() { const float gamma = 2.2; vec3 hdrColor = texture(scene, TexCoords).rgb; vec3 bloomColor = texture(bloomBlur, TexCoords).rgb; hdrColor += bloomColor; // additive blending //   vec3 result = vec3(1.0) - exp(-hdrColor * exposure); //     - result = pow(result, vec3(1.0 / gamma)); FragColor = vec4(result, 1.0); } 

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

рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо - рд╕рднреА рдЙрдЬреНрдЬреНрд╡рд▓ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдПрдХ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЪрдордХ рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ:


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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдБ рд╣реИ ред

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

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрди


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


All Articles