рдУрдкрдирдЬреАрдПрд▓ рдЬрд╛рдиреЗрдВред рдкрд╛рда 5.6 - рд▓рдВрдмрди рдорд╛рдирдЪрд┐рддреНрд░рдг

OGL3

рд▓рдВрдмрди рдорд╛рдирдЪрд┐рддреНрд░рдг


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

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

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

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

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

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

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

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

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

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

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

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

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


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


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


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

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

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

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


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

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

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

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

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░, рд╣рдорд╛рд░реА рдЖрд╕реНрддреАрди рдХреЛ рд▓реБрдврд╝рдХрд╛ рд╣реБрдЖ рд╣реИ, рд╣рдо рддрддреНрдХрд╛рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред

рд▓рдВрдмрди рдорд╛рдирдЪрд┐рддреНрд░рдг


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

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


рдлрд┐рд░ рд╕реЗ рд╣рдо рдкрд░рд┐рдЪрд┐рдд рдбреЙрдЯреНрд╕ рджреЗрдЦрддреЗ рд╣реИрдВ  рд░рдВрдЧрд╣рд░рд╛рдПрдХ рдФрд░  colorрдиреАрд▓рд╛B рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдмрд╛рд░ рд╡реЗрдХреНрдЯрд░  рд░рдВрдЧрднреВрд░рд╛ рдмрд╛рд░рдкреА рд╡реЗрдХреНрдЯрд░ рдХреЛ рдШрдЯрд╛рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛  рд░рдВрдЧрдирд╛рд░рдВрдЧреА рдмрд╛рд░V рдмрдирд╛рд╡рдЯ рд╕реЗ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реЛрддрд╛ рд╣реИ  рд░рдВрдЧрд╣рд░рд╛рдПрдХ ред рдКрдВрдЪрд╛рдЗрдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЧрд╣рд░рд╛рдИ рдХреЛ рдПрдХрддрд╛ рд╕реЗ рдЧрд╣рд░рд╛рдИ рдХреЗ рдирдореВрдиреЗ рдХреЛ рдШрдЯрд╛рдХрд░ рдпрд╛ рдХрд┐рд╕реА рднреА рдЫрд╡рд┐ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдмрдирд╛рд╡рдЯ рдХреЗ рд░рдВрдЧреЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

#version 330 core layout (location = 0) in vec3 aPos; layout (location = 1) in vec3 aNormal; layout (location = 2) in vec2 aTexCoords; layout (location = 3) in vec3 aTangent; layout (location = 4) in vec3 aBitangent; out VS_OUT { vec3 FragPos; vec2 TexCoords; vec3 TangentLightPos; vec3 TangentViewPos; vec3 TangentFragPos; } vs_out; uniform mat4 projection; uniform mat4 view; uniform mat4 model; uniform vec3 lightPos; uniform vec3 viewPos; void main() { gl_Position = projection * view * model * vec4(aPos, 1.0); vs_out.FragPos = vec3(model * vec4(aPos, 1.0)); vs_out.TexCoords = aTexCoords; vec3 T = normalize(mat3(model) * aTangent); vec3 B = normalize(mat3(model) * aBitangent); vec3 N = normalize(mat3(model) * aNormal); mat3 TBN = transpose(mat3(T, B, N)); vs_out.TangentLightPos = TBN * lightPos; vs_out.TangentViewPos = TBN * viewPos; vs_out.TangentFragPos = TBN * vs_out.FragPos; } 

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

рд╢реЗрдбрд░ рдХреЗ рдЕрдВрджрд░, рд╣рдо рд▓рдВрдмрди рдореИрдкрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 #version 330 core out vec4 FragColor; in VS_OUT { vec3 FragPos; vec2 TexCoords; vec3 TangentLightPos; vec3 TangentViewPos; vec3 TangentFragPos; } fs_in; uniform sampler2D diffuseMap; uniform sampler2D normalMap; uniform sampler2D depthMap; uniform float height_scale; vec2 ParallaxMapping(vec2 texCoords, vec3 viewDir); void main() { vec3 viewDir = normalize(fs_in.TangentViewPos - fs_in.TangentFragPos); //       Parallax Mapping vec2 texCoords = ParallaxMapping(fs_in.TexCoords, viewDir); //      //     vec3 diffuse = texture(diffuseMap, texCoords); vec3 normal = texture(normalMap, texCoords); normal = normalize(normal * 2.0 - 1.0); //  тАУ     [...] } 

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

ParallaxMapping рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рдЫрд┐рдкрд╛ рд╣реИ?

  vec2 ParallaxMapping(vec2 texCoords, vec3 viewDir) { float height = texture(depthMap, texCoords).r; vec2 p = viewDir.xy / viewDir.z * (height * height_scale); return texCoords - p; } 

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

рд╣рдо viewDir.xy рдХреЛ divDir.z рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдХреНрд╖рдг рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗ ред рдЪреВрдБрдХрд┐ рд╡реЗрдХреНрдЯрд░ рджреГрд╢реНрдп рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдШрдЯрдХ z рдЕрдВрддрд░рд╛рд▓ [0, 1] рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдЬрдм рд╡реЗрдХреНрдЯрд░ рдШрдЯрдХ z рдХреА рд╕рддрд╣ рдХреЗ рд▓рдЧрднрдЧ рд╕рдорд╛рдирд╛рдВрддрд░ рд╣реЛрддрд╛ рд╣реИ, рд╢реВрдиреНрдп рдХреЗ рдХрд░реАрдм рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рднрд╛рдЬрди рдСрдкрд░реЗрд╢рди рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реИ  рд░рдВрдЧрднреВрд░рд╛ рдмрд╛рд░рдкреА рдЕрдЧрд░ рд╡реНрдпреВрдЕрд░ рд╕рддрд╣ рдХреЗ рд▓рдВрдмрд╡рдд рдХреЗ рдХрд░реАрдм рд╣реИ рддреЛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмрд╛ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдо рд╡реЗрдХреНрдЯрд░ рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВ  рд░рдВрдЧрднреВрд░рд╛ рдмрд╛рд░рдкреА рдЬрдм рдЖрдк рдПрдХ рдХреЛрдг рдкрд░ рд╕рддрд╣ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣ рдЖрдкрдХреЛ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

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

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


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

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

 texCoords = ParallaxMapping(fs_in.TexCoords, viewDir); if(texCoords.x > 1.0 || texCoords.y > 1.0 || texCoords.x < 0.0 || texCoords.y < 0.0) discard; 

рдирддреАрдЬрддрди, рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рд╕рднреА рдЯреБрдХрдбрд╝реЗ рдЕрдВрддрд░рд╛рд▓ рд╕реЗ рдмрд╛рд╣рд░ рдЧрд┐рд░рддреЗ рд╣реИрдВ [0, 1] рдХреЛ рддреНрдпрд╛рдЧ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдиреЗрддреНрд░рд╣реАрди рд▓рдВрдмрди рдореИрдкрд┐рдВрдЧ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдЕрд╕реНрд╡реАрдХреГрддрд┐ рд╡рд┐рдзрд┐ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреБрдЫ рд╕рддрд╣реЛрдВ рдпрд╛ рдмрдирд╛рд╡рдЯ рдорд╛рдорд▓реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рдорд╛рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдорд╛рди рдХреА рд░рд╛рд╣рдд рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдордЬрдмреВрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ:


рдирдореВрдирд╛ рд╕реНрд░реЛрдд рдпрд╣рд╛рдВ рд╣реИрдВ ред

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


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

рдЦрдбрд╝реА рд▓рдВрдмрди рдорд╛рдирдЪрд┐рддреНрд░рдг


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

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


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдкрд░рддреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рдд рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕рдХреА рдЧрд╣рд░рд╛рдИ рдХреА рдЧрд╣рд░рд╛рдИ рд╕реЗ рдореВрд▓реНрдп рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдкрд░рдд рдХреА рдЧрд╣рд░рд╛рдИ рдЧрд╣рд░рд╛рдИ рдХреЗ рдирдХреНрд╢реЗ рд╕реЗ рдореВрд▓реНрдп рд╕реЗ рдХрдо рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡реЗрдХреНрдЯрд░  рд░рдВрдЧрднреВрд░рд╛ рдмрд╛рд░рдкреА рдЗрд╕ рдкрд░рдд рдХреА рд╕рддрд╣ рдХреЗ рдКрдкрд░ рд╕реНрдерд┐рдд рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрдм рддрдХ рджреЛрд╣рд░рд╛рдИ рдЬрд╛рддреА рд╣реИ рдЬрдм рддрдХ рдкрд░рдд рдХреА рдЧрд╣рд░рд╛рдИ рдЧрд╣рд░рд╛рдИ рдХреЗ рдирдХреНрд╢реЗ рд╕реЗ рдЪрдпрди рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреА рд╣реИ: рдЗрд╕ рд╕рдордп, рд╡реЗрдХреНрдЯрд░  рд░рдВрдЧрднреВрд░рд╛ рдмрд╛рд░рдкреА рдирдХрд▓реА рд╕рддрд╣ рд╕реНрдерд▓рд╛рдХреГрддрд┐ рдХреЗ рдиреАрдЪреЗ рдПрдХ рдмрд┐рдВрджреБ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рджреВрд╕рд░реА рдкрд░рдд рдкрд░ рдЧрд╣рд░рд╛рдИ рдХреЗ рдирдХреНрд╢реЗ рд╕реЗ рдЪрдпрди ( D(2)=0.73 ) рдЕрдм рднреА 0.4 рдХреЗ рдмрд░рд╛рдмрд░ рджреВрд╕рд░реА рдкрд░рдд рдХреА рдЧрд╣рд░рд╛рдИ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ "рдЧрд╣рд░рд╛" рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЦреЛрдЬ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд╛рд░реА рд╣реИред рдЕрдЧрд▓реЗ рдкрд╛рд╕ рдореЗрдВ, реж. of рдХреА рдкрд░рдд рдЧрд╣рд░рд╛рдИ рдЕрдВрдд рдореЗрдВ рдЧрд╣рд░рд╛рдИ рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рдирдореВрдиреЗ рдХрд╛ рдореВрд▓реНрдп "рдКрдкрд░" рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ ( D(3)=0.37 )ред рдпрд╣рд╛рдВ рд╕реЗ рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗрдХреНрдЯрд░  рд░рдВрдЧрднреВрд░рд╛ рдмрд╛рд░рдкреА рддреАрд╕рд░реА рдкрд░рдд рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рд╡рд┐рдХреГрдд рд╕рддрд╣ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕реНрдерд┐рддрд┐ рд╣реИред рдЖрдк рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ T3 рд╡реЗрдХреНрдЯрд░ рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди  рд░рдВрдЧрднреВрд░рд╛ рдмрд╛рд░рдкреА , рд╡рд░реНрддрдорд╛рди рдЯреБрдХрдбрд╝реЗ рдХреЗ рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдСрдлрд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╡рд┐рдзрд┐ рдХреА рд╕рдЯреАрдХрддрд╛ рдкрд░рддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдмрдврд╝рддреА рд╣реИред

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

 vec2 ParallaxMapping(vec2 texCoords, vec3 viewDir) { //    const float numLayers = 10; //    float layerDepth = 1.0 / numLayers; //    float currentLayerDepth = 0.0; //         //     P vec2 P = viewDir.xy * height_scale; vec2 deltaTexCoords = P / numLayers; [...] } 

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

рдЕрдЧрд▓рд╛ рдкрд░рддреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдорд╛рд░реНрдЧ рд╣реИ, рдКрдкрд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЧрд╣рд░рд╛рдИ рдХреЗ рдирдХреНрд╢реЗ рд╕реЗ рдПрдХ рдЪрдпрди рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдкрд░рдд рдХреА рдЧрд╣рд░рд╛рдИ рдореВрд▓реНрдп "рдКрдкрд░" рд╣реИ:

 //   vec2 currentTexCoords = texCoords; float currentDepthMapValue = texture(depthMap, currentTexCoords).r; while(currentLayerDepth < currentDepthMapValue) { //      P currentTexCoords -= deltaTexCoords; //          currentDepthMapValue = texture(depthMap, currentTexCoords).r; //     currentLayerDepth += layerDepth; } return currentTexCoords; 

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

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


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

 const float minLayers = 8.0; const float maxLayers = 32.0; float numLayers = mix(maxLayers, minLayers, abs(dot(vec3(0.0, 0.0, 1.0), viewDir))); 

рд╕рджрд┐рд╢ рджреГрд╢реНрдп рдХреЗ рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдФрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЕрд░реНрдз-рдЕрдХреНрд╖ Z рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдкрд░рддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ [ minSamples , maxSamples ], рдЕрд░реНрдерд╛рдд рдЯрдХрдЯрдХреА рдХреА рджрд┐рд╢рд╛ рдкреНрд░рднрд╛рд╡ рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ (рд╕реНрдкрд░реНрд╢ рд╕реНрдерд╛рди рдореЗрдВ, рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЕрд░реНрдз-рдЕрдХреНрд╖ Z рд╕рддрд╣ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ)ред рдпрджрд┐ рд╣рдо рд╕рддрд╣ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рджрд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рднрд╛рд╡ рд╕рднреА 32 рдкрд░рддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

рд╕рдВрд╢реЛрдзрд┐рдд рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдБ рд╣реИ ред рдореИрдВ рдПрдХ рд▓рдХрдбрд╝реА рдХреЗ рдЦрд┐рд▓реМрдиреЗ рдХреА рдмрдирд╛рд╡рдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рднреА рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ: рдлреИрд▓рд╛рдирд╛ , рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢рд╛, рдЧрд╣рд░рд╛рдИ рдХрд╛ рдирдХреНрд╢рд╛ ред

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


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

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

рд▓рдВрдмрди рд╕рдорд╛рд╡реЗрд╢рди рдорд╛рдирдЪрд┐рддреНрд░рдг


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


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

рд▓рдВрдмрди рдЖрд╡рд░реНрдзрди рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЛрдб, рдЦрдбрд╝реА рдкреАрдПрдо рдХреЛрдб рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИ рдФрд░ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ:

 [...] // ,    Steep PM //       , // ..  " " vec2 prevTexCoords = currentTexCoords + deltaTexCoords; //         //      float afterDepth = currentDepthMapValue - currentLayerDepth; float beforeDepth = texture(depthMap, prevTexCoords).r - currentLayerDepth + layerDepth; //    float weight = afterDepth / (afterDepth - beforeDepth); vec2 finalTexCoords = prevTexCoords * weight + currentTexCoords * (1.0 - weight); return finalTexCoords; 

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

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


рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдпрд╣рд╛рдБ рд╣реИ ред

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

рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рдмреЛрдирд╕:


рд░рд╛рд╣рдд рд▓рдВрдмрди рдореИрдкрд┐рдВрдЧ


рдЪреВрдВрдХрд┐ рд▓реЗрдЦрдХ рдиреЗ рд╕реНрдЯреАрдк рдкреАрдПрдо рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рджреВрд╕рд░реЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред

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

рд╢реЛрдзрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрджрдо:

  • рдЦрдбрд╝реА рдкреАрдПрдо рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ T2 рдФрд░ T3 - рдЗрд╕ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдмрд┐рдВрджреБ рдирд┐рд╣рд┐рдд рд╣реИ  рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ рдВ рдЧ рд╣ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ рд╛ рдм рд╛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ рд╡реА  рд╕рддрд╣ рд╕реНрдерд▓рд╛рдХреГрддрд┐ рдХреЗ рд╕рд╛рдеред рд╕рд╣реА рдЪреМрд░рд╛рд╣реЗ рдХреЛ рд▓рд╛рд▓ рдХреНрд░реЙрд╕ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  • рдмрдирд╛рд╡рдЯ рдХреЗ рдСрдлрд╕реЗрдЯ рдФрд░ рдЧрд╣рд░рд╛рдИ рдкрд░рдд рдХреА рдКрдВрдЪрд╛рдИ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВред
  • рдЪрд╛рд▓ рдмрдирд╛рд╡рдЯ рдмрд┐рдВрджреБ рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЯреА 3 рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ  рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ рдВ рдЧ рд╣ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ рд╛ рдм рд╛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ рд╡реА  рд╡рд┐рд╕реНрдерд╛рдкрди рдХреА рдорд╛рддреНрд░рд╛ рд╕реЗред рд╡рд░реНрддрдорд╛рди рдкрд░рдд рдЖрдХрд╛рд░ рдорд╛рди рджреНрд╡рд╛рд░рд╛ рдкрд░рдд рдХреА рдЧрд╣рд░рд╛рдИ рдХрдо рдХрд░реЗрдВред
  • рд╕реАрдзреЗ рдмрд╛рдЗрдирд░реА рдЦреЛрдЬред рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рджреЛрд╣рд░рд╛рдИ рдЧрдИ рд╣реИ:
    1. рдЧрд╣рд░рд╛рдИ рдХреЗ рдирдХреНрд╢реЗ рд╕реЗ рдЪрдпрди рдХрд░реЗрдВред рд╡рд░реНрддрдорд╛рди рдмрдирд╛рд╡рдЯ рдСрдлрд╕реЗрдЯ рдФрд░ рдЧрд╣рд░рд╛рдИ рдкрд░рдд рдЖрдХрд╛рд░ рдХреЛ рджреЛ рд╡рд░реНрддрдорд╛рди рдорд╛рдиреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВред
    2. рдпрджрд┐ рдирдореВрдирд╛ рдЖрдХрд╛рд░ рд╡рд░реНрддрдорд╛рди рдкрд░рдд рдХреА рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рдкрд░рдд рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдкрд░рдд рдХреА рдЧрд╣рд░рд╛рдИ рдмрдврд╝рд╛рдПрдВ, рдФрд░ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдмрдирд╛рд╡рдЯ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдмрджрд▓реЗрдВ  рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ рдВ рдЧ рд╣ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ рд╛ рдм рд╛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ рд╡реА  рд╡рд░реНрддрдорд╛рди рдСрдлрд╕реЗрдЯ рдХреЗ рд▓рд┐рдПред
    3. рдпрджрд┐ рдирдореВрдирд╛ рдЖрдХрд╛рд░ рд╡рд░реНрддрдорд╛рди рдкрд░рдд рдХреА рдЧрд╣рд░рд╛рдИ рд╕реЗ рдХрдо рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рдкрд░рдд рдЖрдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдкрд░рдд рдХреА рдЧрд╣рд░рд╛рдИ рдХреЛ рдХрдо рдХрд░реЗрдВ, рдФрд░ рдЙрд▓рдЯрд╛ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдмрдирд╛рд╡рдЯ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдмрджрд▓реЗрдВ  рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ рдВ рдЧ рд╣ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ рд╛ рдм рд╛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ рд╡реА  рд╡рд░реНрддрдорд╛рди рдСрдлрд╕реЗрдЯ рдХреЗ рд▓рд┐рдПред

  • рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рдЕрдВрддрд┐рдо рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреАрдПрдо рд░рд╛рд╣рдд рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВред

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

рд╢реЗрдбрд░ рдХреЛрдб:

 //  : inTexCoords -   , // inViewDir -      - //  : lastDepthValue тАУ      //      vec2 reliefPM(vec2 inTexCoords, vec3 inViewDir, out float lastDepthValue) { // ====== // ,   Steep PM // ====== const float _minLayers = 2.; const float _maxLayers = 32.; float _numLayers = mix(_maxLayers, _minLayers, abs(dot(vec3(0., 0., 1.), inViewDir))); float deltaDepth = 1./_numLayers; // uDepthScale тАУ     PM vec2 deltaTexcoord = uDepthScale * inViewDir.xy/(inViewDir.z * _numLayers); vec2 currentTexCoords = inTexCoords; float currentLayerDepth = 0.; float currentDepthValue = depthValue(currentTexCoords); while (currentDepthValue > currentLayerDepth) { currentLayerDepth += deltaDepth; currentTexCoords -= deltaTexcoord; currentDepthValue = depthValue(currentTexCoords); } // ====== //   Relief PM // ====== //         deltaTexcoord *= 0.5; deltaDepth *= 0.5; //      ,   Steep PM currentTexCoords += deltaTexcoord; currentLayerDepth -= deltaDepth; //    тАж const int _reliefSteps = 5; int currentStep = _reliefSteps; while (currentStep > 0) { currentDepthValue = depthValue(currentTexCoords); deltaTexcoord *= 0.5; deltaDepth *= 0.5; //       , //       if (currentDepthValue > currentLayerDepth) { currentTexCoords -= deltaTexcoord; currentLayerDepth += deltaDepth; } //       else { currentTexCoords += deltaTexcoord; currentLayerDepth -= deltaDepth; } currentStep--; } lastDepthValue = currentDepthValue; return currentTexCoords; } 

рд╕реНрд╡рдпрдВ рдЫрд╛рдпрд╛


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

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

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

рдкреА рдПрд╕ рдПрдл рдореИрдВ = ( рдПрд▓ рдПрдХ y рдИ рдЖрд░ рдПрдЪ рдИ рдореИрдВ рдЫ рдЬ рдЯреА рдореИрдВ - рдПрдЪ рдИ рдореИрдВ рдЫ рдЬ рдЯреА рдПрдл рдЖрд░ рдУ рдПрдо рдЯреА рдИ рдПрдХреНрд╕ рдЯреА рдпреВ рдЖрд░ рдИ рдореИрдВ ) * ( 1.0 - рдореИрдВn рдпреВ рдПрдо рдПрд╕ рдЯреА рдИ рдкреА рдПрд╕ )


рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рд╕рднреА рдЖрдВрд╢рд┐рдХ рдХрд╛ рдЕрдзрд┐рдХрддрдо рдкреНрд░рдХрд╛рд╢ рдХрд╛рд░рдХ рд╣реИ:

S F = m a x ( P S F i )


рд╡рд┐рдзрд┐ рдХреА рдпреЛрдЬрдирд╛:

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рддреАрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреА рдкреНрд░рдЧрддрд┐:

  • рд╣рдо рдХреБрд▓ рдкреНрд░рдХрд╛рд╢ рдХрд╛рд░рдХ рдХреЛ рд╢реВрдиреНрдп рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
  • рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдХрджрдо рдЙрдард╛рдПрдВ ╦Й L , рдмрд┐рдВрджреБ рдкрд░ рдкрд╣реБрдВрдЪрдирд╛рдЬ рдП ред рдмрд┐рдВрджреБ рдХреА рдЧрд╣рд░рд╛рдИ рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рдЪрдпрди рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрдо рд╣реИред рдПрдЪ ( рдЯреА рдПрд▓ 1 ) - рдпрд╣ рд╕рддрд╣ рдХреЗ рдиреАрдЪреЗ рд╣реИред рдпрд╣рд╛рдВ рд╣рдордиреЗ рдкрд╣рд▓рд╛ рдЪреЗрдХ рдмрдирд╛рдпрд╛ рдФрд░, рдЪреЗрдХ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдкрд╣рд▓реЗ рдЖрдВрд╢рд┐рдХ рдкреНрд░рдХрд╛рд╢ рдХрд╛рд░рдХ рдХреЛ рдЦреЛрдЬрддреЗ рд╣реИрдВ рдФрд░ рдмрдЪрд╛рддреЗ рд╣реИрдВ: (1.0 - 1.0 / 3.0)ред
  • рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдХрджрдо рдЙрдард╛рдПрдВ ╦Й L , рдмрд┐рдВрджреБ рдкрд░ рдкрд╣реБрдВрдЪрдирд╛рдПрдЪред рдмреА ред рдмрд┐рдВрджреБ рдХреА рдЧрд╣рд░рд╛рдИ рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рдЪрдпрди рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрдо рд╣реИред рдПрдЪ ( рдЯреА рдПрд▓ 2 ) - рдпрд╣ рд╕рддрд╣ рдХреЗ рдиреАрдЪреЗ рд╣реИред рджреВрд╕рд░рд╛ рдЪреЗрдХ рдФрд░ рджреВрд╕рд░рд╛ рдЖрдВрд╢рд┐рдХ рдЧреБрдгрд╛рдВрдХ: (1.0 - 2.0 / 3.0)ред
  • рд╣рдо рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдХрджрдо рдЙрдард╛рддреЗ рд╣реИрдВ рдФрд░ 0. рдХреА рдиреНрдпреВрдирддрдо рдЧрд╣рд░рд╛рдИ рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╣реИрдВред
  • рдкрд░рд┐рдгрд╛рдо рдХреА рдкрд░рд┐рднрд╛рд╖рд╛: рдпрджрд┐ рд╕рддрд╣ рдХреЗ рдиреАрдЪреЗ рдХреЛрдИ рдЕрдВрдХ рдирд╣реАрдВ рдорд┐рд▓рд╛, рддреЛ рд╣рдо 1 (рдХреЛрдИ рдЫрд╛рдпрд╛рдВрдХрди) рдХреЗ рдмрд░рд╛рдмрд░ рдЧреБрдгрд╛рдВрдХ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдкрд░рд┐рдгрд╛рдореА рдЧреБрдгрд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдЖрдВрд╢рд┐рдХ рд╡рд╛рд▓реЗ рдХреА рдЕрдзрд┐рдХрддрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред рдкреНрд░рдХрд╛рд╢ рдЧрдгрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рдореВрд▓реНрдп рдХреЛ рдПрдХрддрд╛ рд╕реЗ рдШрдЯрд╛рддреЗ рд╣реИрдВред

рд╢реЗрдбрд░ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг:

 //  : inTexCoords -   , // inLightDir -       - //  : inLastDepth тАУ    , //      PM //       //    float getParallaxSelfShadow(vec2 inTexCoords, vec3 inLightDir, float inLastDepth) { float shadowMultiplier = 0.; //      , //    float alignFactor = dot(vec3(0., 0., 1.), inLightDir); if (alignFactor > 0.) { //   :  ,  //  ,     const float _minLayers = 16.; const float _maxLayers = 32.; float _numLayers = mix(_maxLayers, _minLayers, abs(alignFactor)); float _dDepth = inLastDepth/_numLayers; vec2 _dtex = uDepthScale * inLightDir.xy/(inLightDir.z * _numLayers); //  ,    int numSamplesUnderSurface = 0; //       //     L float currentLayerDepth = inLastDepth - _dDepth; vec2 currentTexCoords = inTexCoords + _dtex; float currentDepthValue = depthValue(currentTexCoords); //    float stepIndex = 1.; // ,       тАж while (currentLayerDepth > 0.) { //     ,     //       if (currentDepthValue < currentLayerDepth) { numSamplesUnderSurface++; float currentShadowMultiplier = (currentLayerDepth - currentDepthValue)*(1. - stepIndex/_numLayers); shadowMultiplier = max(shadowMultiplier, currentShadowMultiplier); } stepIndex++; currentLayerDepth -= _dDepth; currentTexCoords += _dtex; currentDepthValue = depthValue(currentTexCoords); } //      ,   //      1 if (numSamplesUnderSurface < 1) shadowMultiplier = 1.; else shadowMultiplier = 1. - shadowMultiplier; } return shadowMultiplier; } 

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

 [...] //      vec3 fullColorADS = ambientTerm + attenuation * (diffuseTerm + specularTerm); //     -  fullColorADS *= pmShadowMultiplier; return fullColorADS; 

рд╕рднреА рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдПрдХ рдорд╣рд╛рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ, 3MB рдХреА рдорд╛рддреНрд░рд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рд╡реАрдбрд┐рдпреЛ рддреБрд▓рдирд╛:


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




рдкреБрдирд╢реНрдЪ : рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддрдмрд╛рджрд▓реЛрдВ рдХреЗ рд╕рдордиреНрд╡рдп рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд░ рд╣реИ ред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рдЧрдВрднреАрд░ рдЗрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

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


All Articles