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

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

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

рдкреНрд░рджрд░реНрд╢рди рдХреА рдмрд╣реБрдд рдорд╛рдореВрд▓реА рд▓рд╛рдЧрдд рдХреЗ рдХрд╛рд░рдг рдЖрдк рджреГрд╢реНрдп рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╡реГрджреНрдзрд┐ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдо рдкреНрд░рдХрд╛рд╢ рдореЙрдбрд▓ рдореЗрдВ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЗрд╡рд▓ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╕рд╛рдорд╛рдиреНрдп рдХреА рдЖрдкреВрд░реНрддрд┐ рдореЗрдВ рд╣реИрдВ, рддреЛ рдХреЛрдИ рдЧрдгрдирд╛ рд╕реВрддреНрд░ рдирд╣реАрдВ рдмрджрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рдкрд░, рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рдмрдЬрд╛рдп, рд╡рд░реНрддрдорд╛рди рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рддрд╣ рдкрд░ рдЖрддрд╛ рд╣реИред рд╕рднреА рд╕рдорд╛рди рдкреНрд░рдХрд╛рд╢ рд╕рдореАрдХрд░рдг рд░рд╛рд╣рдд рдХрд╛ рднреНрд░рдо рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдХреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░рдг
рддреЛ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рд╣рдореЗрдВ рдорд╛рдирдХ рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд╢ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╣реИрдВред рд╣рдо рд╡рд┐рд╕рд░рд┐рдд рдФрд░ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдкрд░рд╛рд╡рд░реНрддрди рдмрдирд╛рд╡рдЯ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕рддрд╣ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп 2D рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рди рд╣реЛрдВ, рд╕рд╛рдорд╛рдиреНрдп рд╡реИрдХреНрдЯрд░ рдХреЛ рд╕рдВрдЪрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рд╡рдЯ рднреА рдорд╣рд╛рди рд╣реИрдВред рдлрд┐рд░ рд╣рдореЗрдВ рдмрд╕ рдмрдирд╛рд╡рдЯ рд╕реЗ рдЪрдпрди рдХрд░рдирд╛ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИ рдФрд░ рдкреНрд░рдХрд╛рд╢ рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╣реИред
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡реЗрдХреНрдЯрд░ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рдмрдирд╛рд╡рдЯ рдореЗрдВ рдХреИрд╕реЗ рдмрдЪрд╛рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рд░рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рд╕реЛрдЪреЗрдВ: рдЖрд░рдЬреАрдмреА рд░рдВрдЧ рддреНрд░рдп рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рддреАрди рдЖрдпрд╛рдореА рд╡реЗрдХреНрдЯрд░ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдЖрдк XYZ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд░рдВрдЧ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рдХреЗ рдШрдЯрдХреЛрдВ рдХрд╛ рдорд╛рди рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ [-1, 1] рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ [0, 1]:
vec3 rgb_normal = normal * 0.5 + 0.5;
рдЖрд░рдЬреАрдмреА рд░рдВрдЧ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рдХреА рдРрд╕реА рдХрдореА рд╣рдореЗрдВ рдмрдирд╛рд╡рдЯ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬреЛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░рд╛рд╣рдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╣реИред рдРрд╕реА рдмрдирд╛рд╡рдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг - рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ - рдПрдХ рд╣реА рдИрдВрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП:

рдЗрд╕ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдХреЗ рдиреАрд▓реЗ рд░рдВрдЧ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ (рд▓рдЧрднрдЧ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд░рдВрдЧ рд╣реЛрддрд╛ рд╣реИ)ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдорд╛рдирджрдВрдб рдУрдЬреЗрдб рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рдЙрдиреНрдореБрдЦ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рд╕рдордиреНрд╡рдп рдЯреНрд░рд┐рдкрд▓ (0, 0, 1) рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдПрдХ рд░рдВрдЧ рддреНрд░рдп рдХреЗ рд░реВрдк рдореЗрдВ - рд╢реБрджреНрдз рдиреАрд▓рд╛ред рд╣реНрдпреВ рдореЗрдВ рдЫреЛрдЯреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреБрдЫ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЕрд░реНрдз-рдЕрдХреНрд╖ рдУрдЬреЗрдб рд╕реЗ рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдПрдХ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдЬреЛ рдЕрд╕рдорд╛рди рдЗрд▓рд╛рдХреЗ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рддреЛ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдИрдВрдЯ рдХреЗ рдКрдкрд░реА рдХрд┐рдирд╛рд░реЛрдВ рдкрд░, рдмрдирд╛рд╡рдЯ рд╣рд░реЗ рд░рдВрдЧ рдХреА рд╣реЛ рдЬрд╛рддреА рд╣реИред рдФрд░ рдпрд╣ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ: рдИрдВрдЯ рдХреЗ рдКрдкрд░реА рдЪреЗрд╣рд░реЛрдВ рдкрд░, рдорд╛рдирджрдВрдб рдХреЛ рдУрд╡рд╛рдИ (0, 1, 0) рдЕрдХреНрд╖ рдХреА рдУрд░ рдЕрдзрд┐рдХ рдЙрдиреНрдореБрдЦ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╣рд░реЗ рд░рдВрдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред
рдкрд░реАрдХреНрд╖рдг рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рдорд╛рди рдХреЛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЕрд░реНрдз-рдЕрдХреНрд╖ рдУрдЬреЗрдб рдХреА рдУрд░ рдЙрдиреНрдореБрдЦ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди
рдлреИрд▓рд╛рдирд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдФрд░
рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд▓рд┐рдВрдХ рдкрд░ рдФрд░ рдКрдкрд░ рдХреЗ рдЪрд┐рддреНрд░ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВред рд▓реЗрдЦ рдореЗрдВ, рд▓реЗрдЦрдХ рдиреЗ рдорддрднреЗрджреЛрдВ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХрд╛ рдмрд╣реБрдд рд╣реА рдЖрдХрд╕реНрдорд┐рдХ рд░реВрдк рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рд░реЗ рд░рдВрдЧ рдХрд╛ рдШрдЯрдХ рдмрдирд╛рд╡рдЯ рд╡рд┐рдорд╛рди рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ "рдЕрдк" рдХреЗ рдмрдЬрд╛рдп "рдбрд╛рдЙрди" рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рджреЛ рдХрд╛рд░рдХ рдпрд╣рд╛рдВ рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВ:
- рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЯреЗрдХреНрд╕рд▓реНрд╕ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдореЛрд░реА рдФрд░ рдУрдкрдирдЧреНрд▓ рдЯреЗрдХреНрд╕рдЪрд░ рдореЗрдореЛрд░реА рдореЗрдВ рдХреИрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рджреЛ рд╕рдВрдХреЗрддрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ред рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ, рджреЛ рд╢рд┐рд╡рд┐рд░: DirectX- рд╢реИрд▓реА рдФрд░ OpenGL- рд╢реИрд▓реА
рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рд╕рдВрдХреЗрддрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рджреЛ рд╢рд┐рд╡рд┐рд░ рд╣реИрдВ: DirectX рдФрд░ OpenGLред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╡реЗ рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рдереЛрдбрд╝реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде, рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдХреЛ рдмрд╛рдПрдВ рд╣рд╛рде рдХрд╛ рдФрд░ рдУрдкрдирдЬреАрдПрд▓ рдХреЛ рджрд╛рдПрдВ рд╣рд╛рде рдХрд╛ рдорд╛рдирддрд╛ рд╣реИред рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ X рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдХреЛ рдлрд┐рд╕рд▓рдиреЗ рд╕реЗ рдЧрд▓рдд рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рд╣реЛрдЧреА, рдФрд░ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЧрд▓рдд рд╣реИред рд╕рдмрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдУрдкрдирдЬреАрдПрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЙрднрд╛рд░ рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреЗ рд▓рд┐рдП рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдмрди рдЬрд╛рддреЗ рд╣реИрдВред
рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рдмрдирд╛рд╡рдЯ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдирд╛, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓рд╛ рдЯреЗрдХреНрд╕рд▓ рдЫрд╡рд┐ рдХреЗ рдКрдкрд░реА рдмрд╛рдПрдВ рдЯреЗрдХреНрд╕рд▓ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдореЛрд░реА рдореЗрдВ рдмрдирд╛рд╡рдЯ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рд╕рдЪ рд╣реИред рд▓реЗрдХрд┐рди рдУрдкрдирдЬреАрдПрд▓ рдПрдХ рдЕрд▓рдЧ рдмрдирд╛рд╡рдЯ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: рдЗрд╕рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓рд╛ рдЯреЗрдХреНрд╕рд▓ рдиреАрдЪреЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рд╣реА рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП, рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЫрд╡рд┐ рдлрд╝рд╛рдЗрд▓ рд▓реЛрдбрд░ рдХреЗ рдХреЛрдб рдореЗрдВ Y рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдлрд╝реНрд▓рд┐рдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╛рдареЛрдВ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд Stb_image рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
stbi_set_flip_vertically_on_load(1);
рдордЬрд╝реЗрджрд╛рд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд╢ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ: рд╡рд╛рдИ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рд╕рд╛рде рдУрдкрдирдЬреАрдПрд▓ рдиреЛрдЯреЗрд╢рди рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢рд╛ рдЪрд╛рд▓реВ рд╣реБрдЖ рдпрд╛ рдбрд╛рдпрд░реЗрдХреНрдЯ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдореЗрдВ рд╡рд╛рдИ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢рд╛ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ред рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдмрдирд╛рд╡рдЯ рдХреЗ рд╡реНрдпреБрддреНрдХреНрд░рдо рдореЗрдВ рд░рд╣реЗрдЧрд╛ред рд╡рд╛рдИ
рд▓рдЧрднрдЧред рдкреНрд░рддрд┐ред
рддреЛ, рджреЛрдиреЛрдВ рдмрдирд╛рд╡рдЯреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░реЗрдВ, рдмрдирд╛рд╡рдЯ рдмреНрд▓реЙрдХреЛрдВ рд╕реЗ рдмрд╛рдВрдзреЗрдВ рдФрд░ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╡рд┐рдорд╛рди рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ, рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП:
uniform sampler2D normalMap; void main() {
рдпрд╣рд╛рдВ рд╣рдо рдЖрд░рдЬреАрдмреА рдореВрд▓реНрдп рд╕реНрдерд╛рди рд╕реЗ рдПрдХ рдкреВрд░реНрдг рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдЙрд▓рдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдмреНрд▓рд┐рди-рдлреЛрдВрдЧ рдкреНрд░рдХрд╛рд╢ рдореЙрдбрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм, рдпрджрд┐ рдЖрдк рдзреАрд░реЗ-рдзреАрд░реЗ рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕рддрд╣ рд░рд╛рд╣рдд рдХрд╛ рднреНрд░рдо рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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

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

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

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

рдПрдХ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдХрд┐рдирд╛рд░реЗ рдХреЗ рд╕рд╛рде рдмрдирд╛рд╡рдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ
рдИ реи рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд
D e l t a U 2 рдФрд░
D e l t a V 2 рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╡реИрдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛
рдЯреА рдФрд░ рджреНрд╡рд┐-рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛
рдм ред рдЗрд╕ рддрдереНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рдПрдХ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдИ рез рдФрд░
рдИ реи рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдФрд░ рджреНрд╡рд┐-рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╡реИрдХреНрдЯрд░ рдХреЗ рд░реИрдЦрд┐рдХ рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ:
E 1 = D e l t a U 1 T + D e l t a V 1 B
E 2 = D e l t a U 2 T + D e l t a V 2 B
рдПрдХ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдмрджрд▓рдирд╛ рдЬреЛ рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
(E1x,E1y,E1z)= DeltaU1(Tx,Ty,Tz)+ DeltaV1(Bx,By,Bz)
(E2x,E2y,E2z)= DeltaU2(Tx,Ty,Tz)+ DeltaV2(Bx,By,Bz)
рдИ рджреЛ рд╡реИрдХреНрдЯрд░ рдХреЗ рдЕрдВрддрд░ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░
DeltaU рдФрд░
DeltaV рдмрдирд╛рд╡рдЯ рдореЗрдВ рдЕрдВрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХред рдпрд╣ рджреЛ рд╕рдореАрдХрд░рдгреЛрдВ рдореЗрдВ рджреЛ рдЕрдЬреНрдЮрд╛рдд рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ: рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛
T рдФрд░ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣
рдм ред рдпрджрд┐ рдЖрдк рдмреАрдЬрдЧрдгрд┐рдд рдХреЗ рдкрд╛рдареЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддреА рд╣реИрдВ
T рдФрд░ рдХреЗ рд▓рд┐рдП
рдм ред
рд╕рдореАрдХрд░рдгреЛрдВ рдХрд╛ рдЕрдВрддрд┐рдо рд░реВрдк рд╣рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
\ start {bmatrix} E_ {1x} & E_ {1y} & E_ {1z} \\ E_ {2x} & E_ {2y} & E_ {2z} \ end {bmatrix} \ start {bmatrix} \ Delta U_1 & \ Delta V_1 \\ \ Delta U_2 рдФрд░ \ Delta V_2 \ end {bmatrix} \ start {bmatrix} T_x & T_y & T_z \\ B_x & B_y & B_z \ end / bmatrix}
\ start {bmatrix} E_ {1x} & E_ {1y} & E_ {1z} \\ E_ {2x} & E_ {2y} & E_ {2z} \ end {bmatrix} \ start {bmatrix} \ Delta U_1 & \ Delta V_1 \\ \ Delta U_2 рдФрд░ \ Delta V_2 \ end {bmatrix} \ start {bmatrix} T_x & T_y & T_z \\ B_x & B_y & B_z \ end / bmatrix}
рд░рд┐рдХреЙрд░реНрдб рд╕рд╣реА рд╣реИ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдореИрдЯреНрд░рд┐рдХреНрд╕ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рд▓рд┐рдЦрдирд╛, рдЦреЛрдЬрдиреЗ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ
T рдФрд░
рдм ред рдХреЗ рд╡реНрдпреБрддреНрдХреНрд░рдо рд╕реЗ рд╕рдореАрдХрд░рдг рдХреЗ рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ рдХреЛ рдЧреБрдгрд╛ рдХрд░реЗрдВ
DeltaU DeltaV :
\ start {bmatrix} \ Delta U_1 & \ Delta V_1 \\ U Delta &_2_ Delta V_2 \ end {bmatrix} ^ {- 1} \ start {bmatrix} E_ {1x} & E_ / 1y} & E_ {1z } \\ E_ {2x} & E_ {2y} & E_ {2z} \ end {bmatrix} = \ _ {bmatrix} T_x & T_y & T_z \\ B_x & B_z & B_z \ end {bmatrix}
\ start {bmatrix} \ Delta U_1 & \ Delta V_1 \\ U Delta &_2_ Delta V_2 \ end {bmatrix} ^ {- 1} \ start {bmatrix} E_ {1x} & E_ / 1y} & E_ {1z } \\ E_ {2x} & E_ {2y} & E_ {2z} \ end {bmatrix} = \ _ {bmatrix} T_x & T_y & T_z \\ B_x & B_z & B_z \ end {bmatrix}
рд╣рдореЗрдВ рдПрдХ рдирд┐рд░реНрдгрдп рдорд┐рд▓рддрд╛ рд╣реИ
T рдФрд░
рдм , рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╡реНрдпреБрддреНрдХреНрд░рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЧрдгрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рд╡реНрдпреБрддреНрдХреНрд░рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗ - рдЙрд▓рдЯрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореВрд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рд╕рд╣рд╛рдпрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдирд┐рд░реНрдзрд╛рд░рдХ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЙрддреНрдкрд╛рдж рдХреА рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
\ start {bmatrix} T_x & T_y & T_z \\ B_x & B_y & B_z \ end {bmatrix} = \ frac {1} {\ Delta U_1 \ Delta V_2 - рдбреЗрд▓реНрдЯрд╛ U_2 \ Delta V_1} \ start {bmatrix} \ n Delta V_2 & - \ Delta V_1 \\ - \ Delta U_2 & \ Delta U_1 \ end {bmatrix} \ start {bmatrix} E_ {1x} & E_ {1y} & E_ {1z} \\ E_ {2x} & E_ { 2y} & E_ {2z} \ end {bmatrix}
\ start {bmatrix} T_x & T_y & T_z \\ B_x & B_y & B_z \ end {bmatrix} = \ frac {1} {\ Delta U_1 \ Delta V_2 - рдбреЗрд▓реНрдЯрд╛ U_2 \ Delta V_1} \ start {bmatrix} \ n Delta V_2 & - \ Delta V_1 \\ - \ Delta U_2 & \ Delta U_1 \ end {bmatrix} \ start {bmatrix} E_ {1x} & E_ {1y} & E_ {1z} \\ E_ {2x} & E_ { 2y} & E_ {2z} \ end {bmatrix}
рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╡реЗрдХреНрдЯрд░ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╕реВрддреНрд░ рд╣реИ
T рдФрд░ рджреНрд╡рд┐-рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛
рдм рддреНрд░рд┐рднреБрдЬ рдХреЗ рдЪреЗрд╣рд░реЛрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдФрд░ рд╕рдВрдЧрдд рдмрдирд╛рд╡рдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХред
рдпрджрд┐ рдЙрдкрд░реЛрдХреНрдд рдЧрдгрд┐рддреАрдп рдЧрдгрдирд╛рдУрдВ рдХрд╛ рд╕рд╛рд░ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рддреНрд░рд┐рднреБрдЬ рдХреЗ рдХреЛрдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдФрд░ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рд╕реНрдкрд░реНрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреА рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (рдЪреВрдВрдХрд┐ рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рднреА рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ) - рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдзреА рд▓рдбрд╝рд╛рдИ рд╣реИред
рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдФрд░ рдмреАрдЯрдВрдЧреЗрдВрдЯ рдХреА рдЧрдгрдирд╛
рдЗрд╕ рдкрд╛рда рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдорд╛рди рдХреЛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЕрд░реНрдз-рдЕрдХреНрд╖ рдУрдЬреЗрдб рдХреА рдУрд░ рджреЗрдЦрд╛ред рдЕрдм рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░рдг рдкреНрд░рднрд╛рд╡ рдХреЛ рдирд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдЬреИрд╕реЗ рд╣реА рд╣рдо рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╡рд┐рдорд╛рди рдХреЛ рдЙрдиреНрдореБрдЦ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдЙрдкрд░реЛрдХреНрдд рдЧрдгрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рддрд╣рдд рд╕рддрд╣ рдкрд░ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдФрд░ рджреНрд╡рд┐-рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдкрд╛рддреЗ рд╣реИрдВред
рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдорд╛рди рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рде рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдиреЗ рд╕реЗ рдмрдирд╛ рд╣реИ (рджреЛ рддреНрд░рд┐рдХреЛрдг 1, 2, 3 рдФрд░ 1, 3, 4 рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рд╣реИрдВ):
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рддреНрд░рд┐рдХреЛрдг рдХреЗ рдЪреЗрд╣рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реИрдХреНрдЯрд░реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдмрдирд╛рд╡рдЯ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рднреА рджреЗрддреЗ рд╣реИрдВ:
glm::vec3 edge1 = pos2 - pos1; glm::vec3 edge2 = pos3 - pos1; glm::vec2 deltaUV1 = uv2 - uv1; glm::vec2 deltaUV2 = uv3 - uv1;
рд╣рд╛рде рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рд╕реВрддреНрд░реЛрдВ рд╕реЗ рд╕реАрдзреЗ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдФрд░ рджреНрд╡рд┐-рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдХреА рдЧрдгрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
float f = 1.0f / (deltaUV1.x * deltaUV2.y - deltaUV2.x * deltaUV1.y); tangent1.x = f * (deltaUV2.y * edge1.x - deltaUV1.y * edge2.x); tangent1.y = f * (deltaUV2.y * edge1.y - deltaUV1.y * edge2.y); tangent1.z = f * (deltaUV2.y * edge1.z - deltaUV1.y * edge2.z); tangent1 = glm::normalize(tangent1); bitangent1.x = f * (-deltaUV2.x * edge1.x + deltaUV1.x * edge2.x); bitangent1.y = f * (-deltaUV2.x * edge1.y + deltaUV1.x * edge2.y); bitangent1.z = f * (-deltaUV2.x * edge1.z + deltaUV1.x * edge2.z); bitangent1 = glm::normalize(bitangent1); [...]
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдЕрд▓рдЧ рдЪрд░
рдПрдл рдореЗрдВ рдЕрдВрддрд┐рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЕрдВрд╢ рдХреЛ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред рдлрд┐рд░, рд╡реИрдХреНрдЯрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП, рд╣рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрд╛ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рднрд╛рдЧ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░
рдПрдл рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЕрдВрддрд┐рдо рдЧрдгрдирд╛ рд╕реВрддреНрд░ рдХреЗ рд╕рд╛рде рдЗрд╕ рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЗрд╕рдХреА рд╢рд╛рдмреНрджрд┐рдХ рд╡реНрдпрд╡рд╕реНрдерд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛, рддрд╛рдХрд┐ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡реИрдХреНрдЯрд░ рдпреВрдирд┐рдЯ рд╣реЛрдВред
рдЪреВрдВрдХрд┐ рддреНрд░рд┐рднреБрдЬ рдПрдХ рд╕рдкрд╛рдЯ рдЖрдХреГрддрд┐ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдФрд░ рджреНрд╡рд┐-рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдХреА рдЧрдгрдирд╛ рдкреНрд░рддрд┐ рддреНрд░рд┐рдХреЛрдг рдореЗрдВ рдПрдХ рдмрд╛рд░ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ - рд╡реЗ рд╕рднреА рдХреЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реЛрдВрдЧреЗред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдореЙрдбрд▓ (рдЬреИрд╕реЗ рд▓реЛрдбрд░ рдпрд╛ рд▓реИрдВрдбрд╕реНрдХреЗрдк рдЬрдирд░реЗрдЯрд░) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддреНрд░рд┐рдХреЛрдг рдХреЗ рдРрд╕реЗ рд╕рдВрдЧрдарди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╡реЗ рдЕрдиреНрдп рддреНрд░рд┐рдХреЛрдгреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЯрд┐рдХрд▓ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЪрд┐рдХрдиреА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рд╡реИрдХреНрдЯрд░ рдЬреИрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╡реИрдХреНрдЯрд░, рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдФрд░ рджреНрд╡рд┐-рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдкрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдФрд╕рдд рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд╡рд┐рдорд╛рди рдХреЛ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рддреНрд░рд┐рдХреЛрдг рднреА рдХрдИ рдХреЛрдиреЗ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рд╡реЗ рджреЛрдиреЛрдВ рдПрдХ рд╣реА рд╡рд┐рдорд╛рди рдореЗрдВ рдЭреВрда рдмреЛрд▓рддреЗ рд╣реИрдВ, рддрдм рдФрд╕рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдлрд┐рд░ рднреА, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИред
рдкрд░рд┐рдгрд╛рдореА рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдФрд░ рджреНрд╡рд┐-рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╡реИрдХреНрдЯрд░ рдореЗрдВ рдХреНрд░рдорд╢рдГ рдорд╛рди (1, 0, 0) рдФрд░ (0, 1, 0) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ (0, 0, 1) рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдСрд░реНрдереЛрдЧреЛрдирд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ TBN рдмрдирд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╡рд┐рдорд╛рди рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдореА рдЖрдзрд╛рд░ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрди рдЫрд╡рд┐ рдорд┐рд▓рддреА рд╣реИ:
рдЕрдм, рдкрд░рд┐рдХрд▓рд┐рдд рд╡реИрдХреНрдЯрд░ рд╣реЛрдиреЗ рдкрд░, рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЗ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░рдг
рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╢реЗрдбреНрд╕ рдореЗрдВ TBN рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдФрд░ рджреНрд╡рд┐-рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╡рд╛рд▓реЗ рд╡реИрдХреНрдЯрд░ рдХреЛ рд╢реАрд░реНрд╖ рд╢реАрд░реНрд╖ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╢реЗрд░реБрдХрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ:
#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;
рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд░ рдХреЛрдб рдореЗрдВ, рд╣рдо рд╕реАрдзреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ:
void main() { [...] vec3 T = normalize(vec3(model * vec4(aTangent, 0.0))); vec3 B = normalize(vec3(model * vec4(aBitangent, 0.0))); vec3 N = normalize(vec3(model * vec4(aNormal, 0.0))); mat3 TBN = mat3(T, B, N) }
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд╕рднреА рд╡реИрдХреНрдЯрд░ рдХреЛ рдПрдХ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рдЬ рд╣реЛрддреЗ рд╣реИрдВ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╡рд┐рд╢реНрд╡ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдФрд░ рд╣рдо рдореЙрдбрд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕
рдореЙрдбрд▓ рджреНрд╡рд╛рд░рд╛ рд╡реИрдХреНрдЯрд░ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЯрд╛рдЗрдк
3 рдХреЗ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рддреАрди рд╕рдВрдмрдВрдзрд┐рдд рд╡реИрдХреНрдЯрд░ рдкрд╛рд╕ рдХрд░рдХреЗ TBN рдореИрдЯреНрд░рд┐рдХреНрд╕
рдмрдирд╛рддреЗ рд╣реИрдВ ред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрджреЗрд╢ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реИрдХреНрдЯрд░ рдХреЛ рдореЙрдбрд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рд╡реИрдХреНрдЯрд░ рдХреЗ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рд╡рд┐рд╕реНрдерд╛рдкрди рдпрд╛ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдирд╣реАрдВред
рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рджреНрд╡рд┐-рд╕реНрдкрд░реНрд╢реАрдп рд╡реЗрдХреНрдЯрд░ рдХреЛ shader рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред
рдЪреВрдВрдХрд┐ рдЯреАрдмреАрдПрди рд╡реИрдХреНрдЯрд░ рдХреЗ рдЯреНрд░рд┐рдкрд▓ рдкрд░рд╕реНрдкрд░ рд▓рдВрдмрд╡рдд рд╣реИрдВ, рджреНрд╡рд┐-рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдХреЛ рд╡реЗрдХреНрдЯрд░ рдЧреБрдгрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЫрд╛рдпрд╛ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
vec3 B = cross(N, T)
рддреЛ, TBN рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рдореИрдкрд┐рдВрдЧ рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВ:
- рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╡реИрдХреНрдЯрд░реЛрдВ рдХреЛ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реЗ рд╡рд┐рд╢реНрд╡ рд╕реНрдерд╛рди рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП TBN рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЯреБрдХрдбрд╝реЗ рдХреА рдЫрд╛рдпрд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, рдЬрд╣рд╛рдВ, рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рд╡рд┐рд╢реНрд╡ рд╕реНрдерд╛рди рдкрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВред рдирддреАрдЬрддрди, рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рд╕рднреА рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред
- рдЙрд▓рдЯрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ TBN рдкрд░ рд▓реЗ рдЬрд╛рдПрдВ рдФрд░ рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдВрддрд░рд┐рдХреНрд╖ рд╕реЗ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рддрдХ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╡реИрдХреНрдЯрд░ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВред рдпрд╛рдиреА рдЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдХрд╛рд╢ рдЧрдгрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╡реИрдХреНрдЯрд░ рдХреЛ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рднреА рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рдЕрдиреНрдп рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рди рд╕реНрдерд╛рди рдкрд░ рд░рд╣рддрд╛ рд╣реИред
рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдЗрд╕реА рдмрдирд╛рд╡рдЯ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдкреНрд░рдХрд╛рд╢ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рд╡реИрдХреНрдЯрд░ рдХреЛ рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред TBN рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдкрд╛рд╕ рдХрд░рдХреЗ, рд╣рдо рдмрдирд╛рд╡рдЯ рд╕реЗ рдЕрдВрддрд░рд┐рдХреНрд╖ рд╕реЗ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рдХрд╛рд╢ рдЧрдгрдирд╛ рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреА рдПрдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рднреА рдЧрдгрдирд╛ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрдХреЗрд▓рд░ рд╡реЗрдХреНрдЯрд░ рдЧреБрдгрди) рд╕рд╣реА рд╣реЛрдЧреАред
TBN рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
out VS_OUT { vec3 FragPos; vec2 TexCoords; mat3 TBN; } vs_out; void main() { [...] vs_out.TBN = mat3(T, B, N); }
рдХреНрд░рдорд╢рдГ рдЯреБрдХрдбрд╝рд╛ shader рдХреЛрдб рдореЗрдВ, рд╣рдо рдЯрд╛рдЗрдк mat3 рдХрд╛ рдПрдХ рдЗрдирдкреБрдЯ рдЪрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:
in VS_OUT { vec3 FragPos; vec2 TexCoords; mat3 TBN; } fs_in;
рд╣рд╛рде рдкрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЖрдк рдЕрдиреБрд╡рд╛рдж рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рд╕реНрдкрд░реНрд╢ рдХреЛ рд╡рд┐рд╢реНрд╡ рд╕реНрдерд╛рди рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
normal = texture(normalMap, fs_in.TexCoords).rgb; normal = normalize(normal * 2.0 - 1.0); normal = normalize(fs_in.TBN * normal);
рдЪреВрдВрдХрд┐ рдкрд░рд┐рдгрд╛рдореА рд╕рд╛рдорд╛рдиреНрдп рдЕрдм рд╡рд┐рд╢реНрд╡ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╕реЗрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП shader рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдФрд░ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкреНрд░рдХрд╛рд╢ рдЧрдгрдирд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рджреБрдирд┐рдпрд╛ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рджрд┐рдП рдЧрдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рдХреЛ рдорд╛рдирддреЗ рд╣реИрдВред
рджреВрд╕рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рднреА рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред TBN, , , , , тАУ . TBN , :
vs_out.TBN = transpose(mat3(T, B, N));
,
transpose() inverse() . , ( ) . , , , .
, ,
lightDir viewDir . , тАУ .
void main() { vec3 normal = texture(normalMap, fs_in.TexCoords).rgb; normal = normalize(normal * 2.0 - 1.0); vec3 lightDir = fs_in.TBN * normalize(lightPos - fs_in.FragPos); vec3 viewDir = fs_in.TBN * normalize(viewPos - fs_in.FragPos); [...] }
рджреВрд╕рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдлреНрд░реИрдХреНрдЪрд░ рд╢реИрдбрд░ рдореЗрдВ рдЕрдзрд┐рдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ)ред рд╣рдо рднреА рдЗрд╕реЗ рдЕрд▓рдЧ рдХреНрдпреЛрдВ рдХрд░рдиреЗ рд▓рдЧреЗ?рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рджреБрдирд┐рдпрд╛ рдХреЗ рд╡реИрдХреНрдЯрд░ рд╕реЗ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛рдУрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рдорд┐рд▓рддрд╛ рд╣реИ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рд╕рдВрдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рдХреЛрдб рдХреЛ рдЯреБрдХрдбрд╝реЗ рд╕реЗ рд╡рд░реНрдЯреЗрдХрд░ рд╢реЗрдбрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ lightPos рдФрд░ viewPos рдЕрдВрд╢ рд╕реЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдорд╛рди fs_in.ForPos рд╣реИ , . , , тАУ .
TBN , . , , . .
out VS_OUT { vec3 FragPos; vec2 TexCoords; vec3 TangentLightPos; vec3 TangentViewPos; vec3 TangentFragPos; } vs_out; uniform vec3 lightPos; uniform vec3 viewPos; [...] void main() { [...] mat3 TBN = transpose(mat3(T, B, N)); vs_out.TangentLightPos = TBN * lightPos; vs_out.TangentViewPos = TBN * viewPos; vs_out.TangentFragPos = TBN * vec3(model * vec4(aPos, 0.0));
рдЯреБрдХрдбрд╝рд╛ shader рдореЗрдВ, рд╣рдо рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рдЧрдгрдирд╛ рдореЗрдВ рдирдП рдЗрдирдкреБрдЯ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдорд╛рдирджрдВрдб рдЗрд╕ рд╕реНрдерд╛рди рдореЗрдВ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ, рд╕рднреА рдЧрдгрдирд╛ рд╕рд╣реА рд░рд╣рддреА рд╣реИрдВредрдЕрдм рдЬрдм рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рдореИрдкрд┐рдВрдЧ рдЧрдгрдирд╛ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рд╣рдо рдкрд░реАрдХреНрд╖рдг рд╕рддрд╣ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рдХрд╛рд╢ рд╕рд╣реА рд░рд╣реЗрдЧрд╛: glm::mat4 model(1.0f); model = glm::rotate(model, (float)glfwGetTime() * -10.0f, glm::normalize(glm::vec3(1.0, 0.0, 1.0))); shader.setMat4("model", model); RenderQuad();
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рджрд┐рдЦрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╣рд╛рдБ редрдЬрдЯрд┐рд▓ рд╡рд╕реНрддреБрдУрдВ
, , normal mapping . , : - . ,
Assimp .
Assimp :
aiProcess_CalcTangentSpace .
ReadFile() тАУ .
const aiScene *scene = importer.ReadFile( path, aiProcess_Triangulate | aiProcess_FlipUVs | aiProcess_CalcTangentSpace );
:
vector.x = mesh->mTangents[i].x; vector.y = mesh->mTangents[i].y; vector.z = mesh->mTangents[i].z; vertex.Tangent = vector;
, . Wavefront Object (.obj) , Assimp
aiTextureType_NORMAL ,
aiTextureType_HEIGHT . , , :
vector<Texture> normalMaps = loadMaterialTextures(material, aiTextureType_HEIGHT, "texture_normal");
, . ,
aiProcess_CalcTangentSpace . , , , , . , . , . Assimp . , .
рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдирдХреНрд╢реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╣реА рдмрдирд╛рд╡рдЯ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде, рдкрд░реАрдХреНрд╖рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ:рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдПрдХ рдареЛрд╕ рд╡реГрджреНрдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдЧрдд рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд╕реНрддрд╛ рд╣реИредрдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рджреГрд╢реНрдп рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛, рдореЙрдбрд▓ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдмрд╣реБрднреБрдЬ рдЬрд╛рд▓, рдЬрд╛рд▓ рдХреЗ рдШрдирддреНрд╡ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╡ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рддрдХрдиреАрдХ рдЖрдкрдХреЛ рдХрдо-рдкреЙрд▓реА рдореЗрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╕реНрддрд░ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдиреАрдЪреЗ рдЖрдк рдЗрди рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
рд╣рд╛рдИ-рдкреЙрд▓реА рдореЙрдбрд▓ рдФрд░ рд▓реЛ-рдкреЙрд▓реА рдореЙрдбрд▓ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдореИрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рд╕реНрддрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкреНрд░рднреЗрджреНрдп рд╣реИред рддреЛ рдпрд╣ рддрдХрдиреАрдХ рджреГрд╢реНрдп рдореЗрдВ рдЙрдЪреНрдЪ-рдкрд╛рд▓реА рдореЙрдбрд▓ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИредрдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА
рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдПрдХ рдФрд░ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рд╣реИ, рдЬреЛ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдпрд╛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЧрдд рдХреЗ рд╕реБрдзрд╛рд░рддрд╛ рд╣реИредрдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрдИ рддреНрд░рд┐рднреБрдЬреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдЦреНрдпрд╛рдУрдВ рд╡рд╛рд▓реЗ рдмрдбрд╝реЗ рдФрд░ рдЬрдЯрд┐рд▓ рдЬрд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХреА рдЬрд╛рддреА рд╣реИ, рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╡рд╛рд▓реЗ рд╡реИрдХреНрдЯрд░реЛрдВ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЪрд┐рдХрдиреА рдФрд░ рдиреЗрддреНрд░рд╣реАрди рдЕрдЪреНрдЫрд╛ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░рдг рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ: рдФрд╕рдд рдХреЗ рдмрд╛рдж, рдЯреАрдмреАрдПрди рд╡реИрдХреНрдЯрд░ рдХреЗ рдЯреНрд░рд┐рдкрд▓ рдкрд░рд╕реНрдкрд░ рд▓рдВрдмрди рдЦреЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рдЯреАрдмреАрдПрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдСрд░реНрдереЛрдЧреЛрдирд▓рд┐рдЯреА рдХрд╛ рдиреБрдХрд╕рд╛рди рднреА рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдЧреИрд░-рдСрд░реНрдереЛрдЧреЛрдирд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рд╛рдкреНрдд рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗрд╡рд▓ рдереЛрдбрд╝рд╛ рдЧрд▓рдд рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рднреА рдЗрд╕реЗ рд╕реБрдзрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВредрдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рд╕рд░рд▓ рдЧрдгрд┐рддреАрдп рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:рдЧреНрд░рд╛рдо-рд╢реНрдорд┐рдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрд╛ рдЯреАрдмреАрдПрди рд╡реИрдХреНрдЯрд░ рдХреЗ рд╣рдорд╛рд░реЗ рдЯреНрд░рд┐рдкрд▓ рдХреЗ рдкреБрди: orthogonalizationред рд╢реАрд░реНрд╖ shader рдХреЛрдб рдореЗрдВ: vec3 T = normalize(vec3(model * vec4(aTangent, 0.0))); vec3 N = normalize(vec3(model * vec4(aNormal, 0.0)));
рдпрд╣, рдпрджреНрдпрдкрд┐ рдЫреЛрдЯрд╛, рд╕рдВрд╢реЛрдзрди рд╕рд╛рдорд╛рдиреНрдп рдУрд╡рд░рд╣реЗрдбреНрд╕ рдХреЗ рдмрджрд▓реЗ рд╕рд╛рдорд╛рдиреНрдп рдореИрдкрд┐рдВрдЧ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рдореИрдкрд┐рдВрдЧ рдЧрдгрд┐рдд рд╡реАрдбрд┐рдпреЛ рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рд▓рд┐рдВрдХ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИредрдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрди
рдкреБрдирд╢реНрдЪ : рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддрдмрд╛рджрд▓реЛрдВ рдХреЗ рд╕рдордиреНрд╡рдп рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд░ рд╣реИ ред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рдЧрдВрднреАрд░ рдЗрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!