Three.js: GLTFLoader: рд╕рд╛рдорд╛рдиреНрдп-рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдкрд░реАрдХреНрд╖рдг рдореЙрдбрд▓ рдкрд░рд┐рдгрд╛рдо рдЧрд▓рдд рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдЬреВрди 2017  ┬╖  30рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mrdoob/three.js

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг

рдореИрдВрдиреЗ рдиреЙрд░реНрдорд▓-рдЯреИрдВрдЧреЗрдВрдЯ рдЯреЗрд╕реНрдЯ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреНрд░рджрд░реНрд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рдЦреНрд░реЛрдиреНрд╕ рдХреЗ рдирдореВрдиреЗ рд╕реЗ рднрд┐рдиреНрди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рддреАрди.js + рд╕рд╛рдорд╛рдиреНрдп-рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдкрд░реАрдХреНрд╖рдг рдореЙрдбрд▓ рдкрд░рд┐рдгрд╛рдо:
image

рдЦреНрд░реЛрдиреЛрдВ рдирдореВрдирд╛ рд▓реЛрдбрд░ + рд╕рд╛рдорд╛рдиреНрдп-рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдкрд░реАрдХреНрд╖рдг рдореЙрдбрд▓ рдкрд░рд┐рдгрд╛рдо:
image

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реИрдВрдкрд▓ рдореЙрдбрд▓ рдХреЗ рд╕рдорд╛рди рдмрд╛рдПрдБ рдФрд░ рджрд╛рдПрдБ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред

рд╕рдВрдмрдВрдзрд┐рдд: https://emackey.github.io/testing-pbr/normal-tangent-readme.html

/ cc @emackey

рддреАрди.рдЬреЗрдПрд╕ рд╕рдВрд╕реНрдХрд░рдг
  • [x] рджреЗрд╡
  • [] r85
  • [] ...
рдмреНрд░рд╛рдЙрдЬрд╝рд░
  • [x] рдЙрди рд╕рднреА рдХреЛ
  • [] рдХреНрд░реЛрдо
  • [] рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕
  • [ ] рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕реНрдкреНрд▓реЛрд░рд░
рдУрдПрд╕
  • [x] рдЙрди рд╕рднреА рдХреЛ
  • [ ] рдЦрд┐рдбрд╝рдХрд┐рдпрд╛рдБ
  • [ ] рдореИрдХ рдУ рдПрд╕
  • [] рд▓рд┐рдирдХреНрд╕
  • [ ] рдПрдВрдбреНрд░реЙрдпрдб
  • [] рдЖрдИрдУрдПрд╕
рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ (рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛рд░реНрдб, рд╡реАрдЖрд░ рдбрд┐рд╡рд╛рдЗрд╕, ...)

рдерд┐рдВрдХрдкреИрдб X260 + рд╡рд┐рдВрдбреЛрдЬ 10 + рдЗрдВрдЯреЗрд▓ рдПрдЪрдбреА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ 520

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдкрд░ glTF рдХрд▓реНрдкрдирд╛ рд╕реЗ рдПрдХ рд╡рд╛рдХреНрдп рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

рд╕рд╛рдорд╛рдиреНрдп рд╡реИрдХреНрдЯрд░ OpenGL рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ + X рд╕рд╣реА рд╣реИ рдФрд░ + Y рдКрдкрд░ рд╣реИред + Z рджрд░реНрд╢рдХ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИред

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

рдЖрдЗрдП рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рдПрдХ рдкреЗрдВрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рдЪрдВрдЪрд▓ рдКрдВрдЪрд╛рдИ рдХрд╛ рдирдХреНрд╢рд╛ (рдЯрдХреНрдХрд░ рдХрд╛ рдирдХреНрд╢рд╛) рдмрдирд╛рдпрд╛ рд╣реИред

TestHeightMap

рдЖрдЗрдП рдЗрд╕ рдКрдВрдЪрд╛рдИ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдПрдХ рдмрд╛рд╣рд░реА рдЙрдЫрд╛рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдЬрд╣рд╛рдВ рд╕рдлреЗрдж рдкрд┐рдХреНрд╕реЗрд▓ рджрд░реНрд╢рдХ рдХреЗ рдХрд░реАрдм рд╣реИрдВ, рдФрд░ рдХрд╛рд▓реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдЖрдЧреЗ рджреВрд░ рд╣реИрдВред

рдПрдХ рдСрдирд▓рд╛рдЗрди рдХрдирд╡рд░реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рд╕рдВрджрд┐рдЧреНрдз рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдкрд▓ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ), рдореИрдВрдиреЗ рдЗрд╕реЗ рдКрдВрдЪрд╛рдИ рдХреЗ рдирдХреНрд╢реЗ рд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ 3D рдореЙрдбрд▓ рдирд╣реАрдВ рд╣реИ, рдХреЛрдИ UV рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдпрд╛ рдорд┐рдХрдХрд╕реНрдкреЗрд╕ рдЧрдгрдирд╛ рдпрд╛ рдХреЛрдИ рдЬреНрдпрд╛рдорд┐рддрд┐ рдирд╣реАрдВ рд╣реИред рдмрд╕ рдПрдХ рдКрдВрдЪрд╛рдИ рдХрд╛ рдирдХреНрд╢рд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ред рдореБрдЭреЗ glTF рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдСрдирд▓рд╛рдЗрди рдХрдиреНрд╡рд░реНрдЯрд░ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдерд╛, рдЬреИрд╕реЗ рдХрд┐ X рд╕рд╣реА рд╣реИ, Y рдКрдкрд░ рд╣реИ, рдФрд░ Z рджрд░реНрд╢рдХ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдкрд░рд┐рдгрд╛рдо рд╣реИ:

TestNormalMap

рдЪрд▓реЛ рдПрдХ рдкреЗрдВрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛рдПрдВ рдФрд░ рд░рдВрдЧ рдЪреИрдирд▓реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдХрд┐ рдпреЗ рд╡реИрдХреНрдЯрд░ рдХрд╣рд╛рдВ рд╣реИрдВред рдиреАрдЪреЗ, рдкреНрд░рддреНрдпреЗрдХ рд░рдВрдЧ рдЪреИрдирд▓ рдХреЛ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдПрдХ рдЧреНрд░реЗрд╕реНрдХреЗрд▓ рдЫрд╡рд┐ рдореЗрдВ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЗрдирдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдХреА рдЬрд╛рдПрдЧреА рдХрд┐ рдХрд╛рд▓реЗ рдХрд╛ рдЕрд░реНрде -1.0 , рдордзреНрдп рдЧреНрд░реЗ рдХрд╛ рдЕрд░реНрде 0.0 , рдФрд░ рд╕рдлрд╝реЗрдж рдХрд╛ рдЕрд░реНрде +1.0 ред

TestNormalMap-Decomposed

рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдСрдирд▓рд╛рдЗрди рдХрдиреНрд╡рд░реНрдЯрд░ рдиреЗ рд╡рд╣реА рдХрд┐рдпрд╛ рдЬреЛ glTF рдиреЗ рдкреВрдЫрд╛, рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рджред рд▓рд╛рд▓ (X) рдЫрд╡рд┐ рдореЗрдВ, рд╣рдо рджрд╛рдИрдВ рдУрд░ рдврд▓рд╛рди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рдлреЗрдж рдкрд┐рдХреНрд╕реЗрд▓ (+1.0) рд╣реИ, рдЫрд╡рд┐ рдХреЗ рджрд╛рд╣рд┐рдиреЗ рдХрд┐рдирд╛рд░реЗ рдкрд░ X рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓рд╛рд▓ рдЫрд╡рд┐ рдХреЗ рдмрд╛рдИрдВ рдУрд░, рдХрд╛рд▓реЗ рдкрд┐рдХреНрд╕реЗрд▓ (-1.0) рдЫрд╡рд┐ рдХреЗ рдмрд╛рдИрдВ рдУрд░ X рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЧреНрд░реАрди (рд╡рд╛рдИ) рдЫрд╡рд┐ рдореЗрдВ, рдмрдВрдк рдХреЗ рд╢реАрд░реНрд╖ рдврд▓рд╛рди рдХреЗ рд╕рд╛рде рд╕рдлреЗрдж рдкрд┐рдХреНрд╕реЗрд▓ рдЫрд╡рд┐ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╡рд╛рдИ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред Z рдорд╛рди рдХрдо рд╕реЗ рдХрдо рд╕рд╣рдЬ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЯрдХреНрдХрд░ рдХреА рдиреЛрдХ рдФрд░ рдкрд┐рдЫрд▓реА рдкреНрд▓реЗрдЯ рджреЛрдиреЛрдВ рд╣реА рджрд░реНрд╢рдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕рднреА рддрд░рдл рдврд▓рд╛рди рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЧрд╣рд░реЗ рд╣реИрдВред

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдмреНрд▓реЗрдВрдбрд░ рдИрд╡реЗ рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ (рд╕рд┐рд░реНрдл glTF рдХреА рддрд░рд╣) рдУрдкрдирдЬреАрдПрд▓-рд╢реИрд▓реА рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ? рдпрджрд┐ рдпреВрд╡реА рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдШреБрдорд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдЙрд▓рдЯрд╛ рд╣реЛрдиреЗ рдкрд░ рднреА рд╕реНрдХреЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?

NormalSpinTest

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

рд▓реЗрдХрд┐рди, рд╕рднреА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ OpenGL рдХрдиреНрд╡реЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХреБрдЫ рдПрдХ рдЕрд▓рдЧ рд╕рдореНрдореЗрд▓рди (рдЬрд┐рд╕реЗ рдХрднреА-рдХрднреА рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕ рдХрдиреНрд╡реЗрдВрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╡рд╛рдИ рд╡реИрдХреНрдЯрд░ рд╢реАрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп рдЫрд╡рд┐ рдХреЗ рдиреАрдЪреЗ рд╕реНрдерд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕ рд░реВрдк рдореЗрдВ рдореЗрд░реА рдЫрд╡рд┐ рдХрд╛ рд╡рд┐рдШрдЯрд┐рдд Y рдЪреИрдирд▓ рд╣реИред рд▓рд╛рдЗрдЯрд░ рдкрд┐рдХреНрд╕реЗрд▓ рдЫрд╡рд┐ рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реЛрддреЗ рд╣реИрдВред

TestNormalMap_DirectX-Green

рдЕрдЧрд░ рдореИрдВ рдЗрди рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕-рд╢реИрд▓реА рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдмреНрд▓реЗрдВрдбрд░ рдИрд╡реЗ рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдХреНрдпрд╛ рдореИрдВ рдЕрднреА рднреА рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

NormalSpinTest_DirectX_v3

рдирдВрдмрд░ рдмреНрд▓реЗрдВрдбрд░ + рд╡рд╛рдИ рдЕрдк рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЧрдгрд┐рдд рдЧрд▓рдд рд╣реИ, рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХреНрд╖рд┐рддрд┐рдЬ рд░реЗрдЦрд╛ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдорддреА рд╣реИред
рдпрджрд┐ рдЖрдк рдПрдХ OpenGL- рд╢реИрд▓реА рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдХреЛ рдЙрд╕ рдЗрдВрдЬрди рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ + Y рдбрд╛рдЙрди рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рд╡рд╣реА рд╣реЛрддрд╛ рд╣реИред

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

рд╕рднреА 30 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ @ cx20 рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдмрд╕ рдЕрдзрд┐рдХ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рдХреБрдЫ рд╕рдВрдмрдВрдзрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдореБрджреНрджреЗ рд╣реИрдВ:

  • рдореИрдВрдиреЗ @donmccurdy рдХреЗ рдереНрд░реАрдЬреЗрдПрд╕ рдЧреНрд▓рдЯрдл рджрд░реНрд╢рдХ, рдбреЛрдирдордХреБрд░реНрдбреА / рдереНрд░реА-рдЧреНрд▓реНрдЯрдл-рджрд░реНрд╢рдХ # 10 рдкрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреА рд╕реВрдЪрдирд╛ рджреАред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдереНрд░реА рдЬреЗрдПрд╕ рдХреЗ рдЧреНрд▓реИрдЯреАрдПрдл рд▓реЛрдбрд░ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ, рджрд░реНрд╢рдХ рдореЗрдВ рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдирдпрд╛ рдореБрджреНрджрд╛ рдореЗрд░реЗ рдкреБрд░рд╛рдиреЗ рдореБрджреНрджреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИред

  • рдЙрдкрд░реЛрдХреНрдд рдкреБрд░рд╛рдиреЗ рдореБрджреНрджреЗ рдореЗрдВ, рдореЙрдбрд▓ рдЖрдХрд╛рд╢ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреНрд╖рд┐рддрд┐рдЬ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШреБрдорд╛рдпрд╛ред рдЗрд╕рд╕реЗ рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╕рд╣реА рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреНрд╖рд┐рддрд┐рдЬ рдХреНрд░реЗрдЬрд╝реАрд▓реА рдШреВрдорддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

  • рдЦреНрд░реЛрдиреЛрд╕рдЧреНрд░реБрдк / glTF # 952 рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░рдХреЗ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧ рдХреА рдкреБрд╖реНрдЯрд┐ рд╕рд╣реА рдереАред

  • # 11315 рдореЗрдВ рдереНрд░реА рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреА рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдкрд░ рд╕рд╡рд╛рд▓ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

  • рдмрд╛рдмреБрд▓рдЬреЗрдПрд╕рдПрд╕ рдХреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдереА, рдпрд╣рд╛рдВ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЧрдИ рдФрд░ рдмрд╛рдмреБрд▓рдЬреЗрдПрд╕рдПрд╕ рдХреЗ glTF 2.0 рд▓реЛрдбрд░ рдХреЗ рдПрдХ

рдЕрдЪреНрдЫрд╛ рд░рд╛рдЗрдЯрдЕрдк, рдзрдиреНрдпрд╡рд╛рдж!

рдореЙрдбрд▓ рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ:

materialParams.normalScale = new THREE.Vector2(-1, 1);

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕рдордЭрддрд╛ рд╣реВрдВред # 11315 рдХреЛ рд╕рдордЭрдиреЗ рд╕реЗ рдпрд╣рд╛рдВ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИред

@donmccurdy рдЖрдкрдХреА рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ рдХрд┐ normalScale рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ glTF рдореЙрдбрд▓ рд╕рд╣реА рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ glTF рд▓реЛрдбрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

@ cx20 рдиреЗ рд╕рд╣рдорддрд┐ рд╡реНрдпрдХреНрдд рдХреА, рдпрд╣ рддрдп рдЕрдм THREE.GLTF2Loader рдореЗрдВ рд╡рд┐рд▓рдп рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдореИрдВрдиреЗ рдкреБрд╖реНрдЯрд┐ рдХреА рд╣реИ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рддреАрди.js + рд╕рд╛рдорд╛рдиреНрдп-рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдкрд░реАрдХреНрд╖рдг рдореЙрдбрд▓ рдкрд░рд┐рдгрд╛рдо:
image

рдЗрд╕рдиреЗ рдкреБрди: рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реИ, рдХреБрдЫ рд╕рдордп рдХреЗ рдмреАрдЪ r101 рдФрд░ r104:
Screenshot from 2019-06-11 16-38-27

Https://github.com/mrdoob/three.js/pull/15749 рджреЗрдЦреЗрдВ - рдкреНрд░рддрд┐рдЧрдорди рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИ, рдФрд░ рдореЙрдбрд▓ рдореЗрдВ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛рдУрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдХреЗ рдЗрд╕рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рдореБрдЭреЗ рдЕрдм рддрдХ # 15749 рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдереАред рдореИрдВ рдЗрд╕ рдкрд░ рдкрд╣рд░рд╛ рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рд╣рдордиреЗ glTF рдореЗрдВ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХрдо рд╕реЗ рдХрдо рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реЛ рд╕рдХреЗрдВред

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

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

рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ ЁЯШЕ

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдиреЗ рдереНрд░реАрдЬреЗрдПрд╕ рдореЗрдВ рдмрд╣реБрд╕рдВрдЦреНрдпрдХ glTF рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдореИрдкрд┐рдВрдЧ рдХреЛ рддреЛрдбрд╝рд╛ рд╣реИред

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рднреА рдЧрдВрднреАрд░ рд╣реИ - рд╣рдордиреЗ рд╣рдореЗрд╢рд╛ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдХреЗ рд╕рд╛рде shader рдореЗрдВ tangents realtime рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЕрднреА рднреА рдХрд░рддреЗ рд╣реИрдВред рд╣рдордиреЗ рдкрд╣рд▓реЗ рдПрдХ рд╣реИрдХ ( normalScale.y *= -1 ) рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдерд╛ рдЬреЛ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░реАрдХреНрд╖рдг рдореЙрдбрд▓ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдЖ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╣реБрдЖред рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдмрд╛рдд рдХреА рдХреЛрдИ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдорджрдж рдХрдм рдХреА рдЧрдИ, рдпрд╛ рдирд╣реАрдВ рдХреА рдЧрдИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рд╕рдВрдЧреНрд░рд╣реАрдд рд╕реНрдкрд░реНрд╢рдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реИрдХ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ - рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧрд▓рдд рд╣реЛрдЧрд╛ред рдЕрдм рдЬреЛ рдореЙрдбрд▓ рд╣реИрдХ рдкрд░ рдирд┐рд░реНрднрд░ рдереЗ (рдФрд░ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ) рдЯреВрдЯ рдЧрдП рд╣реИрдВ, рдФрд░ рдореЙрдбрд▓ рдЬреЛ рд╣реИрдХ рд╕реЗ рдЯреВрдЯ рдЧрдП рдереЗ (рдФрд░ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ) рддрдп рд╣реЛ рдЧрдП рд╣реИрдВред

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

рдКрдкрд░ рджреЗрдЦреЛред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╣рдо рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдХреЗ рдмрд┐рдирд╛ рдореЙрдбрд▓ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо glTF рдХрд▓реНрдкрдирд╛ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдорд┐рдХреНрдХрдЯрд╕реНрдкреЗрд╕ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдореЗрд░реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрд╕рдХрд╛ рдХреЛрдИ JS рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдорд╛рд░рд╛ рд╡реНрдпреБрддреНрдкрдиреНрди-рдЖрдзрд╛рд░рд┐рдд shader рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ "рдЬреНрдпрд╛рджрд╛рддрд░ рдЕрдЪреНрдЫрд╛ рдкрд░реНрдпрд╛рдкреНрдд" рд╕рдиреНрдирд┐рдХрдЯрди рд╣реИред рдпрд╣ рдирдореВрдирд╛ рдореЙрдбрд▓ рдПрдХ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЪрд░рдо рдорд╛рдорд▓рд╛ рд╣реИ рдЬреЛ рдЙрд╕ рд╕рдиреНрдирд┐рдХрдЯрди рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

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

рд╣рдордиреЗ рдкрд╣рд▓реЗ рдПрдХ рд╣реИрдХ ( normalScale.y *= -1 ) рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдерд╛ рдЬреЛ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░реАрдХреНрд╖рдг рдореЙрдбрд▓ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдЖ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╣реБрдЖ

рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдиреНрдп glTF рдореЙрдбрд▓ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ, рдпрд╛ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ рдЙрджрд╛рд╣рд░рдг?

рдЬрдВрдЧрд▓реА рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛-рд╕реНрдерд╛рди рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рд╣реИрдВред рдкрджрд╛рд░реНрде рдкреЗрдВрдЯрд░ рдЗрди "рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕ рдиреЙрд░реНрдорд▓реНрд╕" рдФрд░ "рдУрдкрдирдЬреАрдПрд▓ рдиреЙрд░реНрдорд▓" рдХрд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИред рдЕрдВрддрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ y рдЪреИрдирд▓ рдХрд╛ рдЙрд▓рдЯрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдмрдирд╛рд╡рдЯ рдореЗрдВ рд╣рд░реЗ рдЪреИрдирд▓ рдорд╛рди рдЙрд▓рдЯреЗ рд╣реИрдВред y *= -1 рдХреЛ рдПрдХ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред рддрдерд╛рдХрдерд┐рдд "рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕ рдиреЙрд░реНрдорд▓реНрд╕" рдПрдХ рдмрд╛рдПрдВ рд╣рд╛рде рдХреЗ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ glTF рд╕рд╛рдорд╛рдиреНрдп / рд╕реНрдкрд░реНрд╢ / рдХрдбрд╝рд╡рд╛рд╣рдЯ рдХреЗ рд▓рд┐рдП рджрд╛рдПрдВ рд╣рд╛рде рдХреЗ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

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

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

(рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдЦрд░реЛрдирд╛рдЧреНрд░реБрдк / glTF- рдирдореВрдирд╛-рдореЙрдбрд▓ # 174 рдореЗрдВ рдЗрд╕ рдкрд░ рдХреБрдЫ рдЪрд░реНрдЪрд╛ рднреА рд╣реБрдИ)

рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдкрд░ glTF рдХрд▓реНрдкрдирд╛ рд╕реЗ рдПрдХ рд╡рд╛рдХреНрдп рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

рд╕рд╛рдорд╛рдиреНрдп рд╡реИрдХреНрдЯрд░ OpenGL рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ + X рд╕рд╣реА рд╣реИ рдФрд░ + Y рдКрдкрд░ рд╣реИред + Z рджрд░реНрд╢рдХ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИред

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

рдЖрдЗрдП рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рдПрдХ рдкреЗрдВрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рдЪрдВрдЪрд▓ рдКрдВрдЪрд╛рдИ рдХрд╛ рдирдХреНрд╢рд╛ (рдЯрдХреНрдХрд░ рдХрд╛ рдирдХреНрд╢рд╛) рдмрдирд╛рдпрд╛ рд╣реИред

TestHeightMap

рдЖрдЗрдП рдЗрд╕ рдКрдВрдЪрд╛рдИ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдПрдХ рдмрд╛рд╣рд░реА рдЙрдЫрд╛рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдЬрд╣рд╛рдВ рд╕рдлреЗрдж рдкрд┐рдХреНрд╕реЗрд▓ рджрд░реНрд╢рдХ рдХреЗ рдХрд░реАрдм рд╣реИрдВ, рдФрд░ рдХрд╛рд▓реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдЖрдЧреЗ рджреВрд░ рд╣реИрдВред

рдПрдХ рдСрдирд▓рд╛рдЗрди рдХрдирд╡рд░реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рд╕рдВрджрд┐рдЧреНрдз рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдкрд▓ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ), рдореИрдВрдиреЗ рдЗрд╕реЗ рдКрдВрдЪрд╛рдИ рдХреЗ рдирдХреНрд╢реЗ рд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ 3D рдореЙрдбрд▓ рдирд╣реАрдВ рд╣реИ, рдХреЛрдИ UV рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдпрд╛ рдорд┐рдХрдХрд╕реНрдкреЗрд╕ рдЧрдгрдирд╛ рдпрд╛ рдХреЛрдИ рдЬреНрдпрд╛рдорд┐рддрд┐ рдирд╣реАрдВ рд╣реИред рдмрд╕ рдПрдХ рдКрдВрдЪрд╛рдИ рдХрд╛ рдирдХреНрд╢рд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ред рдореБрдЭреЗ glTF рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдСрдирд▓рд╛рдЗрди рдХрдиреНрд╡рд░реНрдЯрд░ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдерд╛, рдЬреИрд╕реЗ рдХрд┐ X рд╕рд╣реА рд╣реИ, Y рдКрдкрд░ рд╣реИ, рдФрд░ Z рджрд░реНрд╢рдХ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдкрд░рд┐рдгрд╛рдо рд╣реИ:

TestNormalMap

рдЪрд▓реЛ рдПрдХ рдкреЗрдВрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛рдПрдВ рдФрд░ рд░рдВрдЧ рдЪреИрдирд▓реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдХрд┐ рдпреЗ рд╡реИрдХреНрдЯрд░ рдХрд╣рд╛рдВ рд╣реИрдВред рдиреАрдЪреЗ, рдкреНрд░рддреНрдпреЗрдХ рд░рдВрдЧ рдЪреИрдирд▓ рдХреЛ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдПрдХ рдЧреНрд░реЗрд╕реНрдХреЗрд▓ рдЫрд╡рд┐ рдореЗрдВ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЗрдирдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдХреА рдЬрд╛рдПрдЧреА рдХрд┐ рдХрд╛рд▓реЗ рдХрд╛ рдЕрд░реНрде -1.0 , рдордзреНрдп рдЧреНрд░реЗ рдХрд╛ рдЕрд░реНрде 0.0 , рдФрд░ рд╕рдлрд╝реЗрдж рдХрд╛ рдЕрд░реНрде +1.0 ред

TestNormalMap-Decomposed

рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдСрдирд▓рд╛рдЗрди рдХрдиреНрд╡рд░реНрдЯрд░ рдиреЗ рд╡рд╣реА рдХрд┐рдпрд╛ рдЬреЛ glTF рдиреЗ рдкреВрдЫрд╛, рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рджред рд▓рд╛рд▓ (X) рдЫрд╡рд┐ рдореЗрдВ, рд╣рдо рджрд╛рдИрдВ рдУрд░ рдврд▓рд╛рди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рдлреЗрдж рдкрд┐рдХреНрд╕реЗрд▓ (+1.0) рд╣реИ, рдЫрд╡рд┐ рдХреЗ рджрд╛рд╣рд┐рдиреЗ рдХрд┐рдирд╛рд░реЗ рдкрд░ X рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓рд╛рд▓ рдЫрд╡рд┐ рдХреЗ рдмрд╛рдИрдВ рдУрд░, рдХрд╛рд▓реЗ рдкрд┐рдХреНрд╕реЗрд▓ (-1.0) рдЫрд╡рд┐ рдХреЗ рдмрд╛рдИрдВ рдУрд░ X рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЧреНрд░реАрди (рд╡рд╛рдИ) рдЫрд╡рд┐ рдореЗрдВ, рдмрдВрдк рдХреЗ рд╢реАрд░реНрд╖ рдврд▓рд╛рди рдХреЗ рд╕рд╛рде рд╕рдлреЗрдж рдкрд┐рдХреНрд╕реЗрд▓ рдЫрд╡рд┐ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╡рд╛рдИ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред Z рдорд╛рди рдХрдо рд╕реЗ рдХрдо рд╕рд╣рдЬ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЯрдХреНрдХрд░ рдХреА рдиреЛрдХ рдФрд░ рдкрд┐рдЫрд▓реА рдкреНрд▓реЗрдЯ рджреЛрдиреЛрдВ рд╣реА рджрд░реНрд╢рдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕рднреА рддрд░рдл рдврд▓рд╛рди рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЧрд╣рд░реЗ рд╣реИрдВред

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдмреНрд▓реЗрдВрдбрд░ рдИрд╡реЗ рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ (рд╕рд┐рд░реНрдл glTF рдХреА рддрд░рд╣) рдУрдкрдирдЬреАрдПрд▓-рд╢реИрд▓реА рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ? рдпрджрд┐ рдпреВрд╡реА рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдШреБрдорд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдЙрд▓рдЯрд╛ рд╣реЛрдиреЗ рдкрд░ рднреА рд╕реНрдХреЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?

NormalSpinTest

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

рд▓реЗрдХрд┐рди, рд╕рднреА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ OpenGL рдХрдиреНрд╡реЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХреБрдЫ рдПрдХ рдЕрд▓рдЧ рд╕рдореНрдореЗрд▓рди (рдЬрд┐рд╕реЗ рдХрднреА-рдХрднреА рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕ рдХрдиреНрд╡реЗрдВрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╡рд╛рдИ рд╡реИрдХреНрдЯрд░ рд╢реАрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп рдЫрд╡рд┐ рдХреЗ рдиреАрдЪреЗ рд╕реНрдерд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕ рд░реВрдк рдореЗрдВ рдореЗрд░реА рдЫрд╡рд┐ рдХрд╛ рд╡рд┐рдШрдЯрд┐рдд Y рдЪреИрдирд▓ рд╣реИред рд▓рд╛рдЗрдЯрд░ рдкрд┐рдХреНрд╕реЗрд▓ рдЫрд╡рд┐ рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реЛрддреЗ рд╣реИрдВред

TestNormalMap_DirectX-Green

рдЕрдЧрд░ рдореИрдВ рдЗрди рдбрд╛рдпрд░реЗрдХреНрдЯрдПрдХреНрд╕-рд╢реИрд▓реА рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдмреНрд▓реЗрдВрдбрд░ рдИрд╡реЗ рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдХреНрдпрд╛ рдореИрдВ рдЕрднреА рднреА рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

NormalSpinTest_DirectX_v3

рдирдВрдмрд░ рдмреНрд▓реЗрдВрдбрд░ + рд╡рд╛рдИ рдЕрдк рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЧрдгрд┐рдд рдЧрд▓рдд рд╣реИ, рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХреНрд╖рд┐рддрд┐рдЬ рд░реЗрдЦрд╛ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдорддреА рд╣реИред
рдпрджрд┐ рдЖрдк рдПрдХ OpenGL- рд╢реИрд▓реА рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдХреЛ рдЙрд╕ рдЗрдВрдЬрди рдореЗрдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ + Y рдбрд╛рдЙрди рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рд╡рд╣реА рд╣реЛрддрд╛ рд╣реИред

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

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

рдЗрд╕ рд╕рдордп рдореИрдВ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдирдореВрдиреЗ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рдХрддреНрд╕реЗрд╕реНрдкреЗрд╕ рд╕реЗ рдЯреИрдВрдЧреЗрдВрдЯрд╡реНрд▓ рдлрд╝реНрд▓рд┐рдк рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣реА рдерд╛ рдЬреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдЖ рдерд╛ред

рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдиреНрдп glTF рдореЙрдбрд▓ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ, рдпрд╛ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ рдЙрджрд╛рд╣рд░рдг?

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

рдЕрдВрддрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ y рдЪреИрдирд▓ рдЙрд▓рдЯрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдмрдирд╛рд╡рдЯ рдореЗрдВ рд╣рд░реЗ рдЪреИрдирд▓ рдорд╛рди рдЙрд▓реНрдЯреЗ рд╣реИрдВред Y * = -1 рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛ рдПрдХ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж, рдЬрдм рд╣рдордиреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдерд╛, рддреЛ рдпрд╣ рд╣рдорд╛рд░реЗ "рд╣реИрдХ" рдХрд╛ рдЕрдзрд┐рдХ рдмреЗрд╣рддрд░ рдФрдЪрд┐рддреНрдп рд╣реИред ЁЯШЗ

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

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

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

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдорд┐рдХрдХрд╕реНрдкреЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдПрдХ рдЕрд╕рддрдд рдлрд╛рд░реНрдореВрд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИ ... рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╣рд┐рдд рдореИрдХреНрдХрдЯрд╕реНрдкреЗрд╕ рдХреЛрдб рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ? рдпрд╛ рдорд┐рдХрдХрд╕реНрдкреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдкрд░реЗ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА? @ рд╢реЗрдорд┐рд╕реНрдЯрд░


рдореВрд▓ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХрд╣реАрдВ рди рдХрд╣реАрдВ normal.y *= -1 рдЧреБрдгрдХ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрдерд╛рди рд╣реИрдВ:

  • (рдП) GLTFLoader рдореЗрдВ, рдЙрди рдореЗрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдирд╣реАрдВ рд╣реИ
  • (рдмреА) GLTFLoader рдореЗрдВ, рд╕рднреА рдореЗрд╢ рдХреЗ рд▓рд┐рдП
  • (c) рд╕рднреА рдЬрд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, WebGLRenderer рдореЗрдВ

рдпрджрд┐ рддреАрдиj рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ DirectX рд╕рдореНрдореЗрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмреНрд▓реЗрдВрдбрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ (c) рдХреЗ рд▓рд┐рдП рдорд╛рдорд▓рд╛ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ред рдПрдХ рддреНрд╡рд░рд┐рдд рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд╣рд┐рдд рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ (рдП) рдХреЗ рд╕рд╛рде рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫреБрдХ рд╣реВрдВред

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

рдирд╣реАрдВ, рддреАрдиред Js рдпрд╣ рдирд╣реАрдВ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ ...

рддреАрди .js рдорд╛рди рд▓реЗрддрд╛ рд╣реИ + Y рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП "рдЕрдк" рд╣реИ, рдФрд░ рдмрдврд╝рддреА-рд╡реА uv рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЗ рд▓рд┐рдП "рдЕрдк" рд╣реИред

рдпрд╣реА рд╣реИ, рддреАрди .js рдорд╛рди рд▓реЗрддрд╛ рд╣реИ uv (0, 0) рдмрдирд╛рд╡рдЯ рдХреЗ рдирд┐рдЪрд▓реЗ-рдмрд╛рдПрдБ рдХреЛрдиреЗ рдореЗрдВ рд╣реИ, рдЬрдмрдХрд┐ glTF рдХрд▓реНрдкрдирд╛ рдКрдкрд░реА-рдмрд╛рдПрдБ рдХреЛ рдорд╛рдирддреА рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ GLTFLoader texture.flipY рд╕реЗ false ред (рддреАрди.js рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ texture.flipY рд╕реЗ true ред)

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

рдареАрдХ рд╕реЗ рд▓реЗрдЦрдХ glTF рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдзрд╛рд░рдгрд╛ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП normalScale.y = - 1 рд╕реЗрдЯ рдХрд░рдХреЗ рдХреНрд╖рддрд┐рдкреВрд░реНрддрд┐ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ _properly glTF spec_ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рднреА рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдо flipY рдЭрдВрдбреЗ рдХреЛ рд╕рдореНрдорд╛рди рджреЗрдХрд░ рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдЧрд░ normalScale.y рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ, рддреЛ рдХреБрдЫ рдФрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдЗрд╕ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рднреА рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдо flipY рдЭрдВрдбреЗ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рдВ, рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЬрд╣рд╛рдВ glTF рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╡реИрдХреНрдЯрд░ рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рддрд╛ рд╣реИ, рд╣реИ рдирд╛? рдореИрдВ flipY рдкрд░реАрдХреНрд╖рдг рдФрд░ y рдЗрд╕реА рдирд┐рд╖реЗрдз рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдСрдЯреЛ-рдЧрдгрдирд╛ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛рдУрдВ рдХреА рдЙрдореНрдореАрдж рдХрд░реВрдВрдЧрд╛ред

рдпрджрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ ... рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдореЗрд░реЗ NormalTangentMirrorTest рдореЙрдбрд▓ рдореЗрдВ рдЧрд▓рдд рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛рдПрдВ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдмреНрд▓реЗрдВрдбрд░ glTF рдирд┐рд░реНрдпрд╛рддрдХ рд╕реНрд╡рдпрдВ рдЧрд▓рдд рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛рдУрдВ рдХреЛ glTF рдореЙрдбрд▓ рдореЗрдВ рдбрд╛рд▓ рд░рд╣рд╛ рд╣реИред

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

рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╣реА рдХрд╛рд░реНрд░рд╡рд╛рдИ normalScale.y рдлреНрд▓рд┐рдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрдм рдСрдЯреЛ-рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ (рдЖрдкреВрд░реНрддрд┐ рдХрд┐рдП рдЧрдП рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдирд╣реАрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ flipY рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╡рд┐рдЪрд╛рд░?

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

рдореИрдВрдиреЗ рдпрд╣ рднреА рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рд╣рдо flipY рдЭрдВрдбреЗ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдпрд╣ рдирд╣реАрдВ рдХрд╣рд╛ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ normalScale.y рдлрд╝реНрд▓рд┐рдк рдХрд░реЗрдВрдЧреЗред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХрд┐рд╕реА рднреА рдШрдЯрдирд╛ рдореЗрдВ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЙрд╕ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдиреАрдЪреЗ рдЬрд╛рдПрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд░реВрд░реА рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ:

[Y] ou рдХрд┐рд╕реА рднреА рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП normalScale.y = - рез рд╕реЗрдЯ рдХрд░рдХреЗ рдХреНрд╖рддрд┐рдкреВрд░реНрддрд┐ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХрд┐ glTF рдпреБрдХреНрддрд┐ рдХрд╛ рдареАрдХ рд╕реЗ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рд░ рдЙрд╕ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рдВ, рдХреНрд╖рдорд╛рдпрд╛рдЪрдирд╛, рдореЗрд░рд╛ рдЗрд░рд╛рджрд╛ рдЙрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд╣реАрдВ рдерд╛ред рдореИрдВ рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╕реНрдХреНрд░реАрди-рд╕реНрдкреЗрд╕ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдкреАрдврд╝реА рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ flipY flag_ рдХрд╛ рдЕрд░реНрде рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХреА рдЧрд▓рддрдлрд╣рдореА рдирд╣реАрдВ рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рд░ рдЙрд╕ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ? https://github.com/KhronosGroup/glTF-Sample-Models/issues/174

@WestLangley рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рдЕрдм рддрдХ рдХреНрдпрд╛ рдкрд╛рдпрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, khronos-NormalTangentTest (рдХреЛрдИ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ) рдЧрд▓рдд рджрд┐рдЦрддрд╛ рд╣реИ:
NormalTangentTest
рдпрджрд┐ рдореИрдВрдиреЗ normalScale.y = -1 рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрднреА рднреА рдЧрд▓рдд рд╣реИ:
NormalTangentTestNegY
рдЕрдЧрд░ рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп normalScale.x = -1 рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИ:
NormalTangentTestNegX
рд╕рдВрднрд╡ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХрд┐ рдкреНрд░рддрд┐рдкрд╛рджрди рдереЛрдбрд╝рд╛ рдкрд┐рдХреНрд╕реЗрд▓рд┐рдд рджрд┐рдЦрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЧреЛрд▓реНрдб рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдкрд░ред рдХреНрдпрд╛ рдпрд╣ рд╕реНрдХреНрд░реАрди-рд╕реНрдкреЗрд╕ рд╕рдиреНрдирд┐рдХрдЯрди рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдмрдЧ рдХреЗ рд╕рдВрдХреЗрддрдХ рдХреЗ рд╕рд╛рде рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ?

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

@ рд▓реАрд▓рд╛рд╢ рдЙрд╕ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╢рд╛рдпрдж рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рддреЛ ... рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред

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

BTW, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ VertexTangentHelper (# 3511) рд╣реБрдЖ рдХрд░рддрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдмрдлрд░ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред

@WestLangley рдХрд╛рд╢ рдореБрдЭреЗ рдкрддрд╛ рд╣реЛрддрд╛ рдХрд┐ рдореИрдВ NormalTangentTest рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред рдпрд╣ рдХреБрдЫ рднреА рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдмрд╕ рдкреНрд░рддреНрдпреЗрдХ рдирдореВрдиреЗ рдХреЗ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ (рдпреВрд╡реА рд╕реНрдерд╛рди рдореЗрдВ) рдХреЛ рдШреБрдорд╛рддрд╛ рд╣реИред рддреАрдиреЛрдВ рд╕реНрддрдВрдн рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ, рд╕реНрд╡рд░реНрдг рд╕реНрддрдВрдн рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдореЙрдбрд▓ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрднреА рднреА рдЗрди рд╡рд┐рднрд┐рдиреНрди рдпреВрд╡реА рдЭреБрдХрд╛рд╡ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

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

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

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

@WestLangley рдореБрдЭреЗ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдкрд╕рдВрдж

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд▓реЙрдЯ рдореЛрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ: рдореВрд▓ рдкрд░реАрдХреНрд╖рдг рдПрдХ рджреЛ рддрд░рдлрд╛ рд╕рд╛рдордЧреНрд░реА рд╣реИред # 17804 рдХреЗ рдХрд╛рд░рдг, рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХрд▓-рдкрдХреНрд╖реАрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЬрд╝рдорд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрднреА рднреА рдЧрд▓рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ normalScale.y = -1 рд╕реЗрдЯ рдХрд┐рдпрд╛ рддреЛ рдореБрдЭреЗ рд╕рд╣реА рдЙрддреНрддрд░ рдорд┐рд▓ рдЧрдпрд╛:
NormalTangentTestFrontNegY
рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрджрд▓рддреЗ рдбрдмрд▓ рд╕рд╛рдЗрдб рдХреЛ рд╕рд╛рдордиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд░реЗрдВрдбрд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

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

@emackey рдЗрд╕ рдкрд░ рдЖрдкрдХреЗ рд╕рднреА рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЗрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдЙрди рд╕рднреА рд╡рд┐рднрд┐рдиреНрди рдореБрджреНрджреЛрдВ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рдЬреЛ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ - рдФрд░ рдРрд╕реЗ рдореБрджреНрджреЗ рдЬрд┐рдиреНрд╣реЗрдВ рджреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╢рд╛рдпрдж рдЖрдк @elalish рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░

@elalish рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЗрди рдореБрджреНрджреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдПрдХ рд╕рдордп рдореИрдВ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд рдерд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ рд╣реИ, рддреЛ рдореИрдВ bisect рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдЪреАрдЬреЗрдВ рдХрд╣рд╛рдВ рдЯреВрдЯ рдЧрдИрдВред

рд╡реЗрд▓реНрдбреЗрдб рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЪрдордХрджрд╛рд░ рдШрди рдФрд░ рдЧреЛрд▓ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рдШрди рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рд╕рдорд╛рди рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢рд╛ред

рд╣реЛ рдЧрдпрд╛: normal_map_flat.zip рдореИрдВрдиреЗ рдбреНрд░реЗрдХреЛ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рдд рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдпрд╛, рдФрд░ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдпрд╛ред

рдПрдХ рд╕рдордп рдореИрдВ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд рдерд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд╣реБрдВрдЪ рдЧрдП рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ _if_ рдореЙрдбрд▓ рдореЗрдВ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЪреАрдЬреЗрдВ рдЖрдорддреМрд░ рдкрд░ рдареАрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпреВрд╡реА рд╕реАрдо рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреБрдЫ рдХрд┐рдирд╛рд░реЗ рдорд╛рдорд▓реЗ рд╕рдВрднрд╡ рд╣реИрдВред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрдВрдЧреЗред рдпрд╛, https://github.com/mrdoob/three.js/issues/11438#issuecomment -507027586 рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд @emackey рдХреЗ рд░реВрдк рдореЗрдВ, рд╢рд╛рдпрдж рд╣рдореЗрдВ GLTFLoader рдореЗрдВ normalScale.y *= -1 рдлреНрд▓рд┐рдк рдмрд╣рд╛рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреЗрд╡рд▓ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдореЗрд╖ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдХреЛ рдЫреЛрдбрд╝рддрд╛ рд╣реИред

@donmccurdy рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЖрдЬ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╕реЗ рдмрд╛рд╣рд░ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдлреНрд▓реИрдЯ рдХреНрдпреВрдм рдкрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрджрд┐ рдЖрдк рдПрдХ рдЪрдордХрджрд╛рд░ рд╕рддрд╣ ( metallicFactor: 1, roughnessFactor: 0.1 ) рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреНрдпреВрдм рддреИрд░рддреЗ рд╣реБрдП рдкрдХреНрд╖реЛрдВ рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд╡реИрдХреНрдЯрд░ (рдпрд╛ рдЯреАрдмреАрдПрди рд╕реНрдкреЗрд╕) рдХреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдПрдХ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдЪреЗрд╣рд░реЗ рдХреЗ рдмреАрдЪ рд╡рд░реНрдЯрд┐рдХрд▓ рдХреЗ рдмреАрдЪ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдПрд╕рдкреА рдмрдирд╛рдо рдмреНрд▓реЗрдВрдбрд░ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡реЗрдмрд▓реЙрдЧ рдЗрдВрдЬрди рдореЗрдВред рдореИрдВрдиреЗ Gimp рдХрд╛ рдЙрдкрдпреЛрдЧ SP рдмреЗрдХ рдмрдирд╛рдо рдмреНрд▓реЗрдВрдбрд░ рдмреЗрдХ рдХреЗ "рдЕрдВрддрд░" рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдкрд░ рдХрд╛рд▓рд╛ (рд╕рдорд╛рди RGB рдорд╛рди) рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рдХреЛрдиреЗ рдХреЗ рдмреАрдЪ рдХреА рдЬрдЧрд╣ рдмрд╣реБрдд рдлреАрдХреА рддреАрд╡реНрд░рддрд╛ рдХреЗ рдШреВрдорддрд╛ рдЕрдВрддрд░ рджрд┐рдЦрд╛рддреА рд╣реИред

рдореИрдВ рд╕реВрдХреНрд╖реНрдо рдлрд╝рди-рд╣рд╛рдЙрд╕ рдЗрдлрд╝реЗрдХреНрдЯреНрд╕ рдХреА рдЙрдореНрдореАрдж рдХрд░реВрдБрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореБрдЭреЗ рдЬреЛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ (рдХреЛрдИ рд╕реНрдкрд░реНрд╢ рд╕рдВрд╕реНрдХрд░рдг):
image
рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡реИрдз glTF рд╣реИ:
image
@emackey рдХреНрдпрд╛ рдЖрдк рд╣рдореЗрдВ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпреЛрдЧреНрдп рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╛ рддреЛ рдпреЗ рджреЛрдиреЛрдВ рдореЙрдбрд▓ @donmccurdy рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реИрдз glTF рд╣реИрдВ? рдпрджрд┐ рд╡реЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдШрди рдРрд╕рд╛ рдЪрд░рдо рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреНрдпрд╛ рдХрд╣рдирд╛ рд╣реИ, рдпрд╛ рдХреНрдпрд╛ рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдХ рдЙрдЪрд┐рдд рдЙрдореНрдореАрдж рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдзрдХреНрдХреЛрдВ рдФрд░ рдбреЗрдВрдЯ рдЬреИрд╕реЗ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддреЗ рд╣реИрдВ, рди рдХрд┐ рдореЗрд╖ рдХреА рдкреВрд░реА рд╕рддрд╣ рдХреЛ рдЦрд╝рд░рд╛рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛рдУрдВ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкрдврд╝рд╛ рдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ normalScale.y *= -1 рдкрд░рд┐рд╡рд░реНрддрди рдХрднреА рднреА рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛; рдпрд╣ рдЙрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдерд╛ рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред

рдмрд╛рдмреБрд▓ рдореЗрдВ рднреА рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЬрдВрдЧрд▓реА рджрд┐рдЦрддреЗ рд╣реИрдВ:
Screen Shot 2019-10-23 at 4 00 02 PM

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

рдореИрдВ рдЕрднреА рднреА normalScale.y *= -1 рдЧреБрдгрдХ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдХрдореА рдПрдХ рд╕рдВрдХреЗрдд рдХреА рддрд░рд╣ рд▓рдЧрддреА рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдорд╛рдореВрд▓реА рд╣реИ, рдмрдЬрд╛рдп рдПрдХ рд╕рдВрдХреЗрдд рдХреЗ рдХрд┐ рд╣рдореЗрдВ рдРрд╕реЗ рдЪрд░рдо рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

рд╕реБрдзрд╛рд░: https://github.com/mrdoob/three.js/issues/17804 рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рддрд░рдлрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЖрдЧреЗ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд╛рдпрдХ рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд╛рджрдЧреА рдФрд░ рдкрд╡рд┐рддреНрд░рддрд╛ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рд╣рдореЗрдВ рд╢рд╛рдкрд┐рдд рдХреНрдпреВрдм рдХреЛ рдЕрдм рдХреЗ рд▓рд┐рдП рдЕрдХреЗрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред ЁЯШЗ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

konijn picture konijn  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jlaquinte picture jlaquinte  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

fuzihaofzh picture fuzihaofzh  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jens-duttke picture jens-duttke  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

scrubs picture scrubs  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ