рдУрдкрдирдЬреАрдПрд▓ рдЬрд╛рдиреЗрдВред рдкрд╛рда 6.4 - IBLред рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдПрдХреНрд╕рдкреЛрдЬрд╝рд░

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

рдПрд▓ рдУ ( рдкреА , рдУ рдореАрдЯрд░ рдИ рдЬреА рдПрдХ рдУ ) = рдореИрдВ рдПрди рдЯреА рдПрд▓ рдореИрдВ рд╣реВрдБ рдореИрдВ рдЯреА рдУ рдПрдо рдИ рдЬреА рдПрдХ ( рдХрд╢реНрдореАрд░ рдШ рдЪ рдЖрд░ рдПрдХ рдЧ рдЧ рдкреА рдореИрдВ + рдХрд╢реНрдореАрд░ рд░реЛрдВ рдЪ r рдПрдХ рд╕реА рдбреА рдПрдл рдЬреА 4 ( рдПрди рдУ рдПрдо рдИ рдЬреА рдП рдУ рд╕реА рдбреА рдУ рдЯреА рдПрди )         ( omegai cdotn))Li(p, omegai)n cdot omegaid omegai



рд╕рд╛рдордЧреНрд░реА
рднрд╛рдЧ 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ред рдорд┐рд░рд░ рдПрдХреНрд╕рдкреЛрдЬрд╝рд░ред


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

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

рд╡рд┐рднрд╛рдЬрди-рдпреЛрдЧ рд╕рдиреНрдирд┐рдХрдЯрди рд╡рд┐рдзрд┐ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╣рдо рдкрд░рд╛рд╡рд░реНрддрди рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВ, рдЗрд╕рдореЗрдВ рджрд░реНрдкрдг рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЙрдкрдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ ( рдкрд┐рдЫрд▓реЗ рдкрд╛рда рдореЗрдВ рд╡рд┐рд╕рд░рд┐рдд рднрд╛рдЧ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдорд╛рдирд╛ рдЧрдпрд╛ рдерд╛):

Lo(p, omegao)= int limit Omega(ks fracDFG4( omegao cdotn)( omegao cdotn)Li(p, omegai)n ncdot omegaid omegai= int limit Omegafr(p, omegai, omegao)Li(p, omegai)n cdot omegaid omegai


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

fr(p,wi,wo)= fracDFG4( omegao cdotn)( omegai cdotn)


рдЕрднрд┐рдиреНрди рдХреЗ рддрд╣рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд░ рднреА рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ  omegao - рджреЛ рджрд┐рд╢рд╛ рд╡рд╛рд▓реЗ рд╡реИрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдХреНрдпреВрдмрд┐рдХ рдореИрдк рд╕реЗ рдЪрдпрди рдХрд░рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИред рдмрд┐рдВрджреБ рд╕реНрдерд┐рддрд┐ рдкреАрдкреА рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ - рдкрд┐рдЫрд▓реЗ рдкрд╛рда рдореЗрдВ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреНрдпреЛрдВ рдХреА рдЧрдИ рдереАред рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдиреНрди рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЧрдгрдирд╛  omegai рдФрд░  omegao рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЕрд╕рдВрднрд╡ рд╣реИред

рдорд╣рд╛рдХрд╛рд╡реНрдп рдЦреЗрд▓реЛрдВ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рд░рд╛рд╢рд┐ рд╡рд┐рдзрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЧрдгрдирд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЛ рд╕реНрд╡рддрдВрддреНрд░ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдмрд╛рдж рдореЗрдВ рдЕрдВрддрд┐рдо рдЧрдгрдирд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рднрд╛рдЬрди рдпреЛрдЧ рд╡рд┐рдзрд┐ рджрд░реНрдкрдг рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рджреЛ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рдирд┐рдХрд╛рд▓рддреА рд╣реИ:

L_o (p, \ omega_o) = \ int \ limit _ {\ _ Omega} L_i (p, \ omega_i) d \ omega_i * \ int \ limit \ _ \ _ Omega }__r (p, \ omega_i, \ omega_o) n \ cdot \ _ omega_i d \ omega_i

L_o (p, \ omega_o) = \ int \ limit _ {\ _ Omega} L_i (p, \ omega_i) d \ omega_i * \ int \ limit \ _ \ _ Omega }__r (p, \ omega_i, \ omega_o) n \ cdot \ _ omega_i d \ omega_i


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


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

vec3 N = normalize(w_o); vec3 R = N; vec3 V = R; 

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


рд╡рд┐рднрд╛рдЬрди-рдпреЛрдЧ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рджрд░реНрдкрдг рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ BRDF рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЖрдиреЗ рд╡рд╛рд▓реА рдКрд░реНрдЬрд╛ рдЪрдордХ рдХреЛ рд╕рднреА рджрд┐рд╢рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдлреЗрдж рд░реЛрд╢рдиреА рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЕрд░реНрдерд╛рддред L(p,x)=1.0 ), рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде BRDF рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдХреА рдкреВрд░реНрд╡-рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ: рд╕рд╛рдордЧреНрд░реА рдЦреБрд░рджрд░рд╛рдкрди рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рдмреАрдЪ рдХрд╛ рдХреЛрдг рдПрди рдФрд░ рдкреНрд░рдХрд╛рд╢ рдХреА рджрд┐рд╢рд╛  omegai (рдпрд╛ n cdot omegai )ред рдорд╣рд╛рдХрд╛рд╡реНрдп рдЦреЗрд▓реЛрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдЦреБрд░рджрд░рд╛рдкрди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП BRDF рдЧрдгрдирд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдкреНрд░рдХрд╛рд╢ рдХреЗ рдмреАрдЪ рдХреЛрдг рдХреЛ рджреНрд╡рд┐-рдЖрдпрд╛рдореА рдмрдирд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ BRDF рдПрдХреАрдХрд░рдг рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рд▓реБрдХ-рдЕрдк рдЯреЗрдмрд▓ ( LUT ) рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ред рдпрд╣ рд╕рдВрджрд░реНрдн рдмрдирд╛рд╡рдЯ рд╕рддрд╣ рдХреЗ рдлреНрд░реЗрд╕реЗрд▓ рдЧреБрдгрд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдкреИрдорд╛рдиреЗ рдФрд░ рдСрдлрд╕реЗрдЯ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рд▓ рдФрд░ рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдЪреИрдирд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрдВрддрддрдГ рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд╛рд╢рд┐ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:


рдпрд╣ рд╕рд╣рд╛рдпрдХ рдмрдирд╛рд╡рдЯ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдИ рдЧрдИ рд╣реИ: рдХреНрд╖реИрддрд┐рдЬ рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ ([0., 1. рд╕реЗ рд▓реЗрдХрд░) рдХреЛ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ n cdot omegai рдмреАрдЖрд░рдбреАрдПрдл рдХрд╛рд░реНрдп; рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЗрдирдкреБрдЯ рдЦреБрд░рджрд░рд╛рдкрди рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

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

 float lod = getMipLevelFromRoughness(roughness); vec3 prefilteredColor = textureCubeLod(PrefilteredEnvMap, refVec, lod); vec2 envBRDF = texture2D(BRDFIntegrationMap, vec2(NdotV, roughness)).xy; vec3 indirectSpecular = prefilteredColor * (F * envBRDF.x + envBRDF.y) 

рдПрдкрд┐рдХ рдЧреЗрдореНрд╕ рд╕реЗ рд╕реНрдкреНрд▓рд┐рдЯ-рд╕рдо рд╡рд┐рдзрд┐ рдХреА рдпрд╣ рд╕рдореАрдХреНрд╖рд╛ рдЖрдкрдХреЛ рджрд░реНрдкрдг рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЖрднрд╛рд╕ рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИред рдЕрдм рдЪрд▓реЛ рдХрд╛рд░реНрдб рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡рдпрдВ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рдПрдЪрдбреАрдЖрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдкреВрд░реНрд╡ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛


рдкрд░реНрдпрд╛рд╡рд░рдг рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдкреВрд░реНрд╡ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдПрдХ рд╡рд┐рдХрд┐рд░рдг рдорд╛рдирдЪрд┐рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдЕрдм рд╣рдо рдЦреБрд░рджрд░рд╛рдкрди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдШрди рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рдирдП рдореАрд▓ рд╕реНрддрд░ рдореЗрдВ рдЦреБрд░рджрд░рд╛рдкрди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдмрдЪрд╛рддреЗ рд╣реИрдВред

рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рдШрди рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдкреВрд░реНрд╡ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред рдЖрд╡рд╢реНрдпрдХ рд╕реНрддрд░ рдореАрд▓ рд╕реНрддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ glGenerateMipmaps () рдХрд╣рддреЗ рд╣реИрдВ - рд╡рд░реНрддрдорд╛рди рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рдПрдЧреА:

 unsigned int prefilterMap; glGenTextures(1, &prefilterMap); glBindTexture(GL_TEXTURE_CUBE_MAP, prefilterMap); for (unsigned int i = 0; i < 6; ++i) { glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB16F, 128, 128, 0, GL_RGB, GL_FLOAT, nullptr); } glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glGenerateMipmap(GL_TEXTURE_CUBE_MAP); 

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

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


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

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

рдореЛрдВрдЯреЗ рдХрд╛рд░реНрд▓реЛ рдПрдХреАрдХрд░рдг рдФрд░ рдорд╣рддреНрд╡ рдХрд╛ рдирдореВрдирд╛


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

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

O= int limitbaf(x)dx= frac1N sumNтИТ1i=0 fracf(x)pdf(x)


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


рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирдореВрдиреЗ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 150 рд╕реЗрдореА рдХреА рд╡реГрджреНрдзрд┐ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 170 рд╕реЗрдореА рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореВрд▓реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

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

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

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

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


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

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

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

рдХрдо рдмреЗрдореЗрд▓ рдЕрдиреБрдХреНрд░рдо


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

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

 float RadicalInverse_VdC(uint bits) { bits = (bits << 16u) | (bits >> 16u); bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u); bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u); bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u); bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u); return float(bits) * 2.3283064365386963e-10; // / 0x100000000 } // ---------------------------------------------------------------------------- vec2 Hammersley(uint i, uint N) { return vec2(float(i)/float(N), RadicalInverse_VdC(i)); } 

рд╣реИрдорд░реНрд╕рд▓реА () рдХрдИ рдЖрдХрд╛рд░ рдХреЗ рдирдореВрдиреЛрдВ рд╕реЗ рдХрдо рдмреЗрдореЗрд▓ рдЕрдиреБрдХреНрд░рдо рдХреЗ ith рддрддреНрд╡ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдПрди ред
рд╕рднреА OpenGL рдбреНрд░рд╛рдЗрд╡рд░ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрд╢рдВрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП WebGL рдФрд░ OpenGL ES 2.0) рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ:

 float VanDerCorpus(uint n, uint base) { float invBase = 1.0 / float(base); float denom = 1.0; float result = 0.0; for(uint i = 0u; i < 32u; ++i) { if(n > 0u) { denom = mod(float(n), 2.0); result += denom * invBase; invBase = invBase / 2.0; n = uint(float(n) / 2.0); } } return result; } // ---------------------------------------------------------------------------- vec2 HammersleyNoBitOps(uint i, uint N) { return vec2(float(i)/float(N), VanDerCorpus(i, 2u)); } 

рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкреБрд░рд╛рдиреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдореЗрдВ рд╕рд╛рдЗрдХрд┐рд▓ рдСрдкрд░реЗрдЯрд░реЛрдВ рдкрд░ рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рднреА 32 рдмрд┐рдЯреНрд╕ рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрдкрд╛рджрдХ рдирд╣реАрдВ рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рднреА рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдмрд┐рдЯ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рднреАред

рдЬреАрдЬреАрдПрдХреНрд╕ рдореЙрдбрд▓ рдореЗрдВ рдорд╣рддреНрд╡ рдирдореВрдирд╛


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

 const uint SAMPLE_COUNT = 4096u; for(uint i = 0u; i < SAMPLE_COUNT; ++i) { vec2 Xi = Hammersley(i, SAMPLE_COUNT); 

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

 vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness) { float a = roughness*roughness; float phi = 2.0 * PI * Xi.x; float cosTheta = sqrt((1.0 - Xi.y) / (1.0 + (a*a - 1.0) * Xi.y)); float sinTheta = sqrt(1.0 - cosTheta*cosTheta); //       vec3 H; Hx = cos(phi) * sinTheta; Hy = sin(phi) * sinTheta; Hz = cosTheta; //        vec3 up = abs(Nz) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); vec3 tangent = normalize(cross(up, N)); vec3 bitangent = cross(N, tangent); vec3 sampleVec = tangent * Hx + bitangent * Hy + N * Hz; return normalize(sampleVec); } 

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

рд╣реИрдорд░рд╕реНрд▓реА рдЕрдиреБрдХреНрд░рдо рдФрд░ рд╕реИрдВрдкрд▓ рд╡реЗрдХреНрдЯрд░ рдЬрдирд░реЗрд╢рди рдХреЛрдб рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкреВрд░реНрд╡ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдФрд░ рдХрдирд╡рд▓реНрд╢рдирдлрд╝рд┐рд▓реНрдЯрд░ рдЧреНрд░реЗрдб рджреЗ рд╕рдХрддреЗ рд╣реИрдВ:

 #version 330 core out vec4 FragColor; in vec3 localPos; uniform samplerCube environmentMap; uniform float roughness; const float PI = 3.14159265359; float RadicalInverse_VdC(uint bits); vec2 Hammersley(uint i, uint N); vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness); void main() { vec3 N = normalize(localPos); vec3 R = N; vec3 V = R; const uint SAMPLE_COUNT = 1024u; float totalWeight = 0.0; vec3 prefilteredColor = vec3(0.0); for(uint i = 0u; i < SAMPLE_COUNT; ++i) { vec2 Xi = Hammersley(i, SAMPLE_COUNT); vec3 H = ImportanceSampleGGX(Xi, N, roughness); vec3 L = normalize(2.0 * dot(V, H) * H - V); float NdotL = max(dot(N, L), 0.0); if(NdotL > 0.0) { prefilteredColor += texture(environmentMap, L).rgb * NdotL; totalWeight += NdotL; } } prefilteredColor = prefilteredColor / totalWeight; FragColor = vec4(prefilteredColor, 1.0); } 


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

рдПрдордЖрдИрдкреА рд╕реНрддрд░реЛрдВ рдореЗрдВ рдкреВрд░реНрд╡ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬрдирд╛


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

 prefilterShader.use(); prefilterShader.setInt("environmentMap", 0); prefilterShader.setMat4("projection", captureProjection); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_CUBE_MAP, envCubemap); glBindFramebuffer(GL_FRAMEBUFFER, captureFBO); unsigned int maxMipLevels = 5; for (unsigned int mip = 0; mip < maxMipLevels; ++mip) { //        - unsigned int mipWidth = 128 * std::pow(0.5, mip); unsigned int mipHeight = 128 * std::pow(0.5, mip); glBindRenderbuffer(GL_RENDERBUFFER, captureRBO); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, mipWidth, mipHeight); glViewport(0, 0, mipWidth, mipHeight); float roughness = (float)mip / (float)(maxMipLevels - 1); prefilterShader.setFloat("roughness", roughness); for (unsigned int i = 0; i < 6; ++i) { prefilterShader.setMat4("view", captureViews[i]); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, prefilterMap, mip); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); renderCube(); } } glBindFramebuffer(GL_FRAMEBUFFER, 0); 

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

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

 vec3 envColor = textureLod(environmentMap, WorldPos, 1.2).rgb; 

рдЗрд╕ рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрди рдЪрд┐рддреНрд░ рд╣реЛрдЧрд╛:


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

рдкреВрд░реНрд╡ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрдирд╡рд▓реНрд╢рди рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ


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

рдШрди рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд╕реАрдореЛрдВ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐


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


рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, OpenGL рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдЗрд╕ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ:

 glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS); 

рдпрд╣ рдПрдкреНрд▓реАрдХреЗрд╢рди рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рдзреНрд╡рдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рдЗрд╕ рд╡рд┐рд░реВрдкрдг рд╕рд╛рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рджреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЪрдордХреАрд▓реЗ рдбреЙрдЯреНрд╕ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ


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


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

 float D = DistributionGGX(NdotH, roughness); float pdf = (D * NdotH / (4.0 * HdotV)) + 0.0001; //        float resolution = 512.0; float saTexel = 4.0 * PI / (6.0 * resolution * resolution); float saSample = 1.0 / (float(SAMPLE_COUNT) * pdf + 0.0001); float mipLevel = roughness == 0.0 ? 0.0 : 0.5 * log2(saSample / saTexel); 

рдПрдордЖрдИрдкреА рд╕реНрддрд░реЛрдВ рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рд╡рд░рдг рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рд▓рд┐рдирд┐рдпрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВ:

 glBindTexture(GL_TEXTURE_CUBE_MAP, envCubemap); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, OpenGL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ mip рд╕реНрддрд░ рдмрдирд╛рдирд╛ рди рднреВрд▓реЗрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдореБрдЦреНрдп mip рд╕реНрддрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж:

 //  HDR      ... [...] //  - glBindTexture(GL_TEXTURE_CUBE_MAP, envCubemap); glGenerateMipmap(GL_TEXTURE_CUBE_MAP); 

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

BRDF рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЧрдгрдирд╛


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

рдПрд▓ рдУ ( рдкреА , ╧Й рдУ ) = тИл ╬й рдПрд▓ рдореИрдВ ( рдкреА , ╧Й рдореИрдВ ) d ╧Й рдореИрдВ * тИл ╬й рдЪ рдЖрд░ ( рдкреА , ╧Й рдореИрдВ , ╧Й рдУ ) n тЛЕ ╧Й рдореИрдВ d ╧Й рдореИрдВ


рд╣рдордиреЗ рдХреБрд▓ рд░рд╛рд╢рд┐ рдХреЗ рдмрд╛рдПрдВ рд╣рд┐рд╕реНрд╕реЗ рдХреА рдЧрдгрдирд╛ рдХреА рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрдпреВрдмрд┐рдХ рдореИрдк рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЦреБрд░рджрд░рд╛рдкрди рд╕реНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджрд░реНрдЬ рдХрд┐рдпрд╛ред рджрд╛рдИрдВ рдУрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде BDRF рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рджреГрдврд╝реАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: рдХреЛрдгn тЛЕ ╧Й рдореИрдВ , рд╕рддрд╣ рдЦреБрд░рджрд░рд╛рдкрди рдФрд░ Fresnel рдХреЗ рдЧреБрдгрд╛рдВрдХрдПрдл реж ред рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдлреЗрдж рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╛ рдирд┐рд░рдВрддрд░ рдКрд░реНрдЬрд╛ рдЪрдордХ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдмреАрдЖрд░рдбреАрдПрдл рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ рдПрд▓ i = 1.0 ред рддреАрди рдЪрд░реЛрдВ рдХреЗ рд▓рд┐рдП BRDF рдХреА рдЦреЛрдЬ рдХрд░рдирд╛ рдХреЛрдИ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ F 0 рджрд░реНрдкрдг BRDF рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

тИл ╬й рдЪрдЖрд░(рдкреА,╧ЙрдореИрдВ,╧ЙрдУ)nтЛЕ╧ЙрдореИрдВрдШ╧ЙрдореИрдВ= тИл ╬й рдЪрдЖрд░(рдкреА,╧ЙрдореИрдВ,╧ЙрдУ) рдПрдл ( ╧Й рдУ , рдЬ )рдПрдл ( ╧Й рдУ , рдПрдЪ ) nтЛЕ╧ЙрдореИрдВd╧ЙрдореИрдВ


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

тИл ╬й рдЪ рдЖрд░ ( рдкреА , ╧Й рдореИрдВ , ╧Й рдУ )рдПрдл ( ╧Й рдУ , рдЬ ) рдПрдл(╧ЙрдУ,рдПрдЪ)nтЛЕ╧ЙрдореИрдВd╧ЙрдореИрдВ


рд░рд╛рдЗрдЯ рдПрдВрдЯреНрд░реА рдХреА рдЬрдЧрд╣ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐ рдл Fresnel-рд╢реНрд▓рд┐рдХ рдХреЗ рд╕рдиреНрдирд┐рдХрдЯрди рдкрд░, рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ:

тИл ╬й рдЪ рдЖрд░ ( рдкреА , ╧Й рдореИрдВ , ╧Й рдУ )рдПрдл ( ╧Й рдУ , рдПрдЪ ) (рдПрдл0+(1-рдПрдл0)(1-╧ЙрдУтЛЕрдЬ)5)nтЛЕ╧ЙрдореИрдВd╧ЙрдореИрдВ


рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдирдХрд╛рд░реЗрдВ ( 1 - ╧Й рдУ тЛЕ рдЬ ) 5 рдХреИрд╕реЗ / a l p h a рдкрд░ рдирд┐рд░реНрдгрдп рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПрдПрдл реж :

тИл╬йfr(p,╧Йi,╧Йo)F(╧Йo,h)(F0+(1тИТF0)╬▒)nтЛЕ╧Йid╧Йi


тИл╬йfr(p,╧Йi,╧Йo)F(╧Йo,h)(F0+1тИЧ╬▒тИТF0тИЧ╬▒)nтЛЕ╧Йid╧Йi


тИл╬йfr(p,╧Йi,╧Йo)рдПрдл ( ╧Й рдУ , рдПрдЪ ) (рдПрдл0*(1-╬▒)+╬▒)nтЛЕ╧ЙрдореИрдВd╧ЙрдореИрдВ


рдЕрдЧрд▓рд╛ рдХрд╛рд░реНрдп рдП рдПрдл рд╣рдо рджреЛ рдЕрднрд┐рдиреНрди рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

тИл ╬й рдЪ рдЖрд░ ( рдкреА , ╧Й рдореИрдВ , ╧Й рдУ )рдПрдл ( ╧Й рдУ , рдПрдЪ ) (рдПрдл0*(1-╬▒))рдПрдитЛЕ╧ЙрдореИрдВd╧ЙрдореИрдВ+тИл╬йрдЪрдЖрд░(рдкреА,╧ЙрдореИрдВ,╧ЙрдУ)рдПрдл ( ╧Й рдУ , рдПрдЪ ) (╬▒)nтЛЕ╧ЙрдореИрдВd╧ЙрдореИрдВ


рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдл 0 рдЕрднрд┐рдиреНрди рдХреЗ рддрд╣рдд рдирд┐рд░рдВрддрд░ рд╣реЛрдЧрд╛, рдФрд░ рд╣рдо рдЗрд╕реЗ рдЕрднрд┐рдиреНрди рдХреЗ рд╕рдВрдХреЗрдд рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЧреЗ, рд╣рдо рдкреНрд░рдХрдЯ рдХрд░реЗрдВрдЧреЗрдореВрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ ╬▒ рдФрд░ BRDF рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдВрддрд┐рдо рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

F0тИл╬йfr(p,╧Йi,╧Йo)(1тИТ(1тИТ╧ЙoтЛЕh)5)nтЛЕ╧Йid╧Йi+тИл╬йfr(p,╧Йi,╧Йo)(1тИТ╧ЙoтЛЕh)5nтЛЕ╧Йid╧Йi


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

n рдФрд░ рдбрдмреНрд▓реНрдпреВ рдУ ред- 2 рдбреА рдмрдирд╛рд╡рдЯ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦреЗрдВ рдХрд╛рд░реНрдб complexation BRDF ( BRDF рдПрдХреАрдХрд░рдг рдирдХреНрд╢рд╛ ) рд╣реИ, рдЬреЛ рдЕрдВрддрд┐рдо рд╢реЗрдбрд░ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рддрд╛рд▓рд┐рдХрд╛ рдореВрд▓реНрдпреЛрдВ, рдЬреЛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ specular рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдмрдиреЗрдЧреА рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

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

 vec2 IntegrateBRDF(float NdotV, float roughness) { vec3 V; Vx = sqrt(1.0 - NdotV*NdotV); Vy = 0.0; Vz = NdotV; float A = 0.0; float B = 0.0; vec3 N = vec3(0.0, 0.0, 1.0); const uint SAMPLE_COUNT = 1024u; for(uint i = 0u; i < SAMPLE_COUNT; ++i) { vec2 Xi = Hammersley(i, SAMPLE_COUNT); vec3 H = ImportanceSampleGGX(Xi, N, roughness); vec3 L = normalize(2.0 * dot(V, H) * H - V); float NdotL = max(Lz, 0.0); float NdotH = max(Hz, 0.0); float VdotH = max(dot(V, H), 0.0); if(NdotL > 0.0) { float G = GeometrySmith(N, V, L, roughness); float G_Vis = (G * VdotH) / (NdotH * NdotV); float Fc = pow(1.0 - VdotH, 5.0); A += (1.0 - Fc) * G_Vis; B += Fc * G_Vis; } } A /= float(SAMPLE_COUNT); B /= float(SAMPLE_COUNT); return vec2(A, B); } // ---------------------------------------------------------------------------- void main() { vec2 integratedBRDF = IntegrateBRDF(TexCoords.x, TexCoords.y); FragColor = integratedBRDF; } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдкрд░реЛрдХреНрдд рдЧрдгрд┐рддреАрдп рдЧрдгрдирд╛рдУрдВ рдХреЗ рд▓рдЧрднрдЧ рд╢рд╛рдмреНрджрд┐рдХ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд░реВрдк рдореЗрдВ BRDF рдХреЗ рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЦреБрд░рджрд░рд╛рдкрди рдФрд░ рдХреЛрдг рдХреЗ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред╬╕ , рд╡реЗрдХреНрдЯрд░ рдирдореВрдирд╛ рдорд╣рддреНрд╡ рдирдореВрдирд╛ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдФрд░ рддрдмреНрджреАрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ Fresnel BRDF рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реА рдмрдирд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреНрд░рддреНрдпреЗрдХ рдирдореВрдиреЗ рдХреЗ рд▓рд┐рдП, рдореВрд▓реНрдп рдХреЗ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдФрд░ рд╡рд┐рд╕реНрдерд╛рдкрди рдХреА рднрдпрд╛рд╡рд╣рддрд╛F 0 , рдЬреЛ рдЕрдВрдд рдореЗрдВ рдФрд╕рдд рд╣реИ рдФрд░ рдлреЙрд░реНрдоvec2рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред рдПрдХрд╕реИрджреНрдзрд╛рдВрддрд┐рдХрд╕рдмрдХ рдореЗрдВ, рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдЧреБрдгрд╛рдВрдХ рдХреЗ рдмрд╛рдж рд╕реЗ, IBL рдХреА рдЧрдгрдирд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ BRDF рдХрд╛ рдЬреНрдпрд╛рдорд┐рддреАрдп рдШрдЯрдХ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ

k рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

k d i r e c t = ( ╬▒ + 1 ) реи8


k I B L = ╬▒ 22


рдЪреВрдВрдХрд┐ рдмреАрдЖрд░рдбреАрдПрдл, рдЖрдИрдмреАрдПрд▓ рдХреА рдЧрдгрдирд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрднрд┐рдиреНрди рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЧреБрдгрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рд╢реНрд▓рд┐рдХ-рдЬреАрдЬреАрдПрдХреНрд╕ рдореЙрдбрд▓ рдореЗрдВ рдЬреНрдпрд╛рдорд┐рддрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП k I B L :

 float GeometrySchlickGGX(float NdotV, float roughness) { float a = roughness; float k = (a * a) / 2.0; float nom = NdotV; float denom = NdotV * (1.0 - k) + k; return nom / denom; } // ---------------------------------------------------------------------------- float GeometrySmith(vec3 N, vec3 V, vec3 L, float roughness) { float NdotV = max(dot(N, V), 0.0); float NdotL = max(dot(N, L), 0.0); float ggx2 = GeometrySchlickGGX(NdotV, roughness); float ggx1 = GeometrySchlickGGX(NdotL, roughness); return ggx1 * ggx2; } 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЧреБрдгрд╛рдВрдХ k рдХреА рдЧрдгрдирд╛ рдкреИрд░рд╛рдореАрдЯрд░a рдХреЗрдЖрдзрд╛рд░ рдкрд░ рдХреА рдЬрд╛рддреАрд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛рд╡рд░реНрдгрди рдХрд░рддреЗ рд╕рдордпрдЦреБрд░рджрд░рд╛рдкрдирдкреИрд░рд╛рдореАрдЯрд░рдирд╣реАрдВ рд╣реЛрддрд╛рд╣реИ, рдЬреЛ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд╣рд╛рдВ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдЬрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣рд╛рдБ рдЭреВрда: рдорд╣рд╛рдХрд╛рд╡реНрдп рдЦреЗрд▓ рдпрд╛ рдбрд┐рдЬреНрдиреА рджреНрд╡рд╛рд░рд╛ рдореВрд▓ рдХрд╛рдо рдореЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╣ рд░рд╣реА рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореВрд▓реНрдп рдХрд╛ рдПрдХ рд╕реАрдзрд╛ рдХрд╛рдо рд╣реИ рд▓рд╛рдпрдХ рд╣реИрдЦреБрд░рджрд░рд╛рдкрдирдкреИрд░рд╛рдореАрдЯрд░рдПрдХрдПрдХреАрдХреГрдд рдирдХреНрд╢реЗ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕реБрд░рд╛рдЧ BRDF рд╕рдорд╛рди, рдорд╣рд╛рдХрд╛рд╡реНрдп рдЦреЗрд▓ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛редрдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, BRDF рдХрдирд╡рд▓реНрд╢рди рдкрд░рд┐рдгрд╛рдо рдХреЛ 512x512 рдЖрдХрд╛рд░ рдХреА 2 рдбреА рдмрдирд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛:



 unsigned int brdfLUTTexture; glGenTextures(1, &brdfLUTTexture); //   ,     glBindTexture(GL_TEXTURE_2D, brdfLUTTexture); glTexImage2D(GL_TEXTURE_2D, 0, GL_RG16F, 512, 512, 0, GL_RG, GL_FLOAT, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

рдЬреИрд╕рд╛ рдХрд┐ рдПрдкрд┐рдХ рдЧреЗрдореНрд╕ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣рд╛рдВ 16-рдмрд┐рдЯ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдЯреЗрдХреНрд╕рдЪрд░ рдлреЙрд░реНрдореЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдзрд╛рд░ рд╕реЗ рдирдореВрдирд╛ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП GL_CLAMP_TO_EDGE рдореЗрдВ рд░рд┐рдкреАрдЯ рдореЛрдб рд╕реЗрдЯ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ ред

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

 glBindFramebuffer(GL_FRAMEBUFFER, captureFBO); glBindRenderbuffer(GL_RENDERBUFFER, captureRBO); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, 512, 512); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, brdfLUTTexture, 0); glViewport(0, 0, 512, 512); brdfShader.use(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); RenderQuad(); glBindFramebuffer(GL_FRAMEBUFFER, 0); 

рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рдмрдирд╛рд╡рдЯ рдирдХреНрд╢рд╛ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рднрд╛рдЬрди рдХреА рд░рд╛рд╢рд┐ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╡рд┐рднрд╛рдЬрди рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рджреГрдврд╝ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ:


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

IBL рдореЙрдбрд▓ рдореЗрдВ рдЕрдВрддрд┐рдо рдкрд░рд╛рд╡рд░реНрддрди рдЧрдгрдирд╛


рддреЛ, рдПрдХ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд░рд╛рд╡рд░реНрддрди рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рджрд░реНрдкрдг рдШрдЯрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдЕрд▓рдЧ рд░рд╛рд╢рд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рд╕рдиреНрдирд┐рдХрдЯрди рдШрдЯрдХреЛрдВ рдХреЛ рдПрдХ рдкреВрд░реЗ рдореЗрдВ "рдЧреЛрдВрдж" рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкрд╣рд▓реЗ, рдкреВрд░реНрд╡-рдкрд░рд┐рдХрд▓рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо shader рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдирдореВрдиреЗ рдЬреЛрдбрд╝реЗрдВ:

 uniform samplerCube prefilterMap; uniform sampler2D brdfLUT; 

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

 void main() { [...] vec3 R = reflect(-V, N); const float MAX_REFLECTION_LOD = 4.0; vec3 prefilteredColor = textureLod(prefilterMap, R, roughness * MAX_REFLECTION_LOD).rgb; [...] } 

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрдирд╡рд▓реНрд╢рди рд╕реНрдЯреЗрдЬ рдкрд░, рд╣рдордиреЗ рдХреЗрд╡рд▓ 5 mip рд╕реНрддрд░реЛрдВ (рд╢реВрдиреНрдп рд╕реЗ рдЪреМрдереЗ рддрдХ) рдХреЛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛, рдирд┐рд░рдВрддрд░ MAX_REFLECTION_LOD рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП mip рд╕реНрддрд░реЛрдВ рд╕реЗ рдЪрдпрди рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рдЕрдЧрд▓рд╛, рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рджреЗрдЦрдиреЗ рдХреА рджрд┐рд╢рд╛ рдХреЗ рдмреАрдЪ рдЦреБрд░рджрд░рд╛рдкрди рдФрд░ рдХреЛрдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ BRDF рдПрдХреАрдХрд░рдг рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ:

 vec3 F = FresnelSchlickRoughness(max(dot(N, V), 0.0), F0, roughness); vec2 envBRDF = texture(brdfLUT, vec2(max(dot(N, V), 0.0), roughness)).rg; vec3 specular = prefilteredColor * (F * envBRDF.x + envBRDF.y); 

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



 vec3 F = FresnelSchlickRoughness(max(dot(N, V), 0.0), F0, roughness); vec3 kS = F; vec3 kD = 1.0 - kS; kD *= 1.0 - metallic; vec3 irradiance = texture(irradianceMap, N).rgb; vec3 diffuse = irradiance * albedo; const float MAX_REFLECTION_LOD = 4.0; vec3 prefilteredColor = textureLod(prefilterMap, R, roughness * MAX_REFLECTION_LOD).rgb; vec2 envBRDF = texture(brdfLUT, vec2(max(dot(N, V), 0.0), roughness)).rg; vec3 specular = prefilteredColor * (F * envBRDF.x + envBRDF.y); vec3 ambient = (kD * diffuse + specular) * ao; 

рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рд╡реИрд▓реНрдпреВ рдХреЗрдПрд╕ рд╕реЗ рдЧреБрдгрд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ , рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдлреНрд░реЗрд╕реЗрд▓ рдЧреБрдгрд╛рдВрдХ рд╣реЛрддрд╛ рд╣реИред

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


рдЖрдк рдЖрдЧреЗ рднреА рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ PBR рдореЙрдбрд▓ рдХреЗ рдЕрдиреБрд░реВрдк рдмрдирд╛рд╡рдЯ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рд╕реЗ рдЧреЛрд▓реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :


рдпрд╛ рдПрдВрдбреНрд░рдпреВ рдореИрдХреНрд╕рд┐рдореЛрд╡ рд╕реЗ рддреИрдпрд╛рд░ рдкреАрдмреАрдЖрд░ рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рдПрдХ рднрд╡реНрдп рдореЙрдбрд▓ рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ :


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


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

рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?


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

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

рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ: рдЗрди рдкрд╛рдареЛрдВ рдореЗрдВ рдкреАрдмреАрдЖрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреА рдЧрд╣рд░реА рд╕рдордЭ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкреАрдмреАрдЖрд░ рд░реЗрдВрдбрд░ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░реА рдХреА рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдЖрдИрдмреАрдПрд▓ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдб рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЧрдгрдирд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдкрдиреЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ, рдЖрдк рдХреЗрд╡рд▓ рдЙрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдорд╣рд╛рди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП cmftStudio рдпрд╛ IBLBaker ред

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

(рдирдореВрдиреЗ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдЗрдВрдЬрди рдХреЗ рдХрдЪреНрдЪреЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд▓реЗрдЦрдХ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╣рд╛рдБ , prim.perред )

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдордЧреНрд░реА


  1. рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЗрдВрдЬрди 4 рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЫрд╛рдпрд╛рдВрдХрди : рдПрдХ рд╡рд┐рднрд╛рдЬрд┐рдд рд░рд╛рд╢рд┐ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдкрдг рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рдХрд╛рд╡реНрдп рдЦреЗрд▓реЛрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгред рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, IBL PBR рдкрд╛рда рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред
  2. рдлрд┐рдЬрд┐рдХрд▓реА рдмреЗрд╕реНрдб рд╢реЗрдбрд┐рдВрдЧ рдПрдВрдб рдЗрдореЗрдЬ рдмреЗрд╕реНрдб рд▓рд╛рдЗрдЯрд┐рдВрдЧ : рдкреАрдмреАрдЖрд░ рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЖрдИрдмреАрдПрд▓ рдХреЗ рджрд░реНрдкрдг рдШрдЯрдХ рдХреА рдЧрдгрдирд╛ рд╕рд╣рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд▓реЗрдЦред
  3. рдЗрдореЗрдЬ рдмреЗрд╕реНрдб рд▓рд╛рдЗрдЯрд┐рдВрдЧ : рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ IBL рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдкрд░ рдПрдХ рдмрд╣реБрдд рд▓рдВрдмреА рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдкреЛрд╕реНрдЯ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рдЬрд╛рдВрдЪ рдкреНрд░рдХреНрд╖реЗрдк рд╕рдорд╕реНрдпрд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
  4. Moving Frostbite to PBR : , PBR ┬лAAA┬╗.
  5. Physically Based Rendering тАУ Part Three : , IBL PBR JMonkeyEngine.
  6. Implementation Notes: Runtime Environment Map Filtering for Image Based Lighting : HDR , .

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


All Articles