Three.js: рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рд╕рдВрдкрддреНрддрд┐ рд▓реЛрдбрд░

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

рдЬреИрд╕рд╛ рдХрд┐ https://github.com/mrdoob/three.js/issues/11301 рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рд╡реЗрдмрд╡реАрдЖрд░ рдореЗрдВ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЧреИрд░-рд╡реАрдЖрд░ рдЕрдиреБрднрд╡реЛрдВ рдореЗрдВ рднреА рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ, рд╕рдВрдкрддреНрддрд┐ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░ рд░рд╣рд╛ рд╣реИред

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

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо OBJ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

  • (1) obj рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдмрд╡рд░реНрдХрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдбреЗрдЯрд╛ рдХреЛ рдореБрдЦреНрдп рдереНрд░реЗрдб WWOBJLoader рдкрд░ рд╡рд╛рдкрд╕ рдХрд░рдирд╛:
    рдпрд╣рд╛рдВ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рдорд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЦреНрдп рджреЛрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рддреАрди рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрд▓реЛрдб рдХреЛ рдореЗрдирдереНрд░реЗрдб рдкрд░ рд╡рд╛рдкрд╕ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рдореБрдЦреНрдп рдереНрд░реЗрдб рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
    https://github.com/kaisalmen/WWOBJLoader/blob/master/src/loaders/WWOBJLoader2.js#L312 -L423
  • (2) рд╕реЗрдЯрдЯрд╛рдЗрдордСрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕реНрдердЧрд┐рдд рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдореЗрдирдереНрд░реЗрдб рд╡рд╛рджрд╛: рдУрдХреБрд▓рд╕ рд░рд┐рдПрдХреНрдЯрд╡реАрдЖрд░ : рдпрд╣ рд▓реЛрдбрд░ https://github.com/facebook/react-vr/blob/master /ReactVR/js/Loaders/WavefrontOBJ/OBJParser.js#L281 -L298
    рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд▓реЛрдбрд┐рдВрдЧ рдзреАрдореА рд╣реЛ рдЬрд╛рдПрдЧреА рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЯрд╛рдЗрдо рд╕реНрд▓реЙрдЯ рдкрд░ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкреВрд░реА рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдУрд╡рд░рд╣реЗрдб рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреАрди рдСрдмреНрдЬреЗрдХреНрдЯ рддреИрдпрд╛рд░ рд╣реЛрдВрдЧреЗред

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

рдХреЛрдИ рд╕реБрдЭрд╛рд╡?

/cc @mikearmstrong001 @kaisalmen @delapuente @spite

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

рддреАрди рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЬрд╛рд░реАред

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

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

рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд╛рджрд╛ + рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ + рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдЖрдзрд╛рд░рд┐рдд рд▓реЛрдбрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рджреЛрдиреЛрдВ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдорд┐рд╢реНрд░рдг рдХреА рддрд░рд╣ рдереЛрдбрд╝рд╛ рд╕рд╛)

рд╕реНрд░реЛрдд URL рдХреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ, рд╕рдВрд╕рд╛рдзрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЖрд╡рд╢реНрдпрдХ рдмрдлрд╝рд░реНрд╕, рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ ImageBitmaps рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрд╛рдВрддрд░рдгреАрдп рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд▓реМрдЯрд╛рдПрдВ; рдпрд╣ рдЗрддрдирд╛ рд╕реАрдзрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдУрд╡рд░рд╣реЗрдб рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рддреАрди.рдЬреЗрдПрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред

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

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

рд╣рд╛рдп рд╕рдм, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЙрдкрд▓рдмреНрдз рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрдкрдХреА рд░реБрдЪрд┐ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдЦрд╛ рджреЗрдЦреЗрдВ:
https://github.com/kaisalmen/WWOBJLoader/tree/Commons
рдпрд╣рд╛рдБ рдХреЗ рдореЗрд╢ рдкреНрд░реЛрд╡рд┐рдЬрд╝рдирд┐рдВрдЧ рднрд╛рдЧ рдХреЛ WWOBJLoader2 рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
https://github.com/kaisalmen/WWOBJLoader/blob/Commons/src/loaders/WWLoaderCommons.js

WWLoaderCommons рдЕрдиреНрдп рдЬрд╛рд▓ рдкреНрд░рджрд╛рддрд╛рдУрдВ (рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк рд▓реЛрдбрд░) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ, рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рд╡реЗрдм рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рд▓ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рджреГрд╢реНрдп рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд/рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рд╣реИред рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рддреНрд░рд┐рднреБрдЬ рдЬрдВрдХ рдкреНрд░рджрд╛рддрд╛ рджреЗрдЦреЗрдВ рдЬреЛ рдПрдХ рддрдХрдиреАрдХреА рдкреНрд░рджрд░реНрд╢рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:
https://github.com/kaisalmen/WWOBJLoader/tree/Commons/test/meshspray
https://kaisalmen.de/proto/test/meshspray/main.src.html

рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рднреА WWOBJLoader2 рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕реЗ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рддрдХ Mesh рд▓рд┐рдП рдХрдЪреНрдЪрд╛ BufferedGeometry рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╕реНрддрд╛рдВрддрд░рдгреАрдп рд╡рд╕реНрддреБрдУрдВ (ArrayBuffers/ByteBuffers) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд╕рдордп-рд╕рдордп рдкрд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдмрд╛рдЗрдЯрдмрдлрд╝рд░реНрд╕ рд╕реЗ Mesh рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирдЧрдгреНрдп рд╣реИред рдЬрдм рднреА рджреГрд╢реНрдп рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рдЬрд╛рд▓ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдкреНрд░рддрд┐рдкрд╛рджрди рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИ (рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдпрд╛рдВ, рджреГрд╢реНрдп рдЧреНрд░рд╛рдл рд╕рдорд╛рдпреЛрдЬрди ...!?)ред рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реНрд░реЛрдд рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдорд╛рдорд▓рд╛ рд╣реЛрддрд╛ рд╣реИ (рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ)ред
WWOBJLoader2 рдХрд╛ "рд╕реНрдЯреНрд░реАрдо" рдореЛрдб рдЗрди рд╕реНрдЯрд╛рд▓реЛрдВ рдХреЛ рд╕реБрдЪрд╛рд░реВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЗ OBJ рдореЙрдбрд▓ рдХреЗ рдПрдХ рдЬрд╛рд▓ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рд╡рдЬрди 0.5 рдорд┐рд▓рд┐рдпрди рд╡рд░реНрдЯрд┐рд╕ рд╣реИ, рддреЛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░реБрдХреЗрдЧрд╛ред

рдореИрдВрдиреЗ рдмреАрд╕реНрдкреЛрдХ рд╢рд╛рдЦрд╛ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдХреНрдпреЛрдВ: рдореИрдВрдиреЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓рд╛ рд╣реИ:
https://github.com/kaisalmen/WWOBJLoader/issues/11
рдореБрджреНрджрд╛ рдЕрднреА рднреА рдПрдХ рдЖрдзрд╛рд░ рд╣реИ рдФрд░ рд╡рд┐рд╡рд░рдг рдЬрд▓реНрдж рд╣реА рдЖрдПрдЧрд╛ред

рдХреБрдЫ рдирдВрдмрд░реЛрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ https://threejs.org/examples/webgl_loader_gltf2.html рдХреА рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 2048x2048 рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде 13MB рдореЙрдбрд▓ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИред

screen shot 2017-07-11 at 10 11 42 pm

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

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

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

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

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

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

@kaisalmen рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

Elation Engine / JanusWeb рдореЗрдВ, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд░реНрдХрд░ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕рднреА рдореЙрдбрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ object.toJSON() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд░рдордмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ postMessage() рд╕рд╛рде рдореБрдЦреНрдп рдереНрд░реЗрдб рдкрд░ рднреЗрдЬрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ ObjectLoader.parse() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд▓реЛрдбрд░ рдХреЛрдб рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрд╡рд░реБрджреНрдз рднрд╛рдЧреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ - рдЕрднреА рднреА ObjectLoader.parse() рдореЗрдВ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╢рд╛рдпрдж рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдордЧреНрд░ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдФрд░ рд▓реЛрдб рдЧрддрд┐ рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдо рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рдПрдХ рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрдИ рдореЙрдбрд▓реЛрдВ рдХреЛ рднреА рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЬрдЯрд┐рд▓ рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдЬреАрдд рд╣реИред

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

рдореБрдЭреЗ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рд╕рд╣рдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд▓рд╛рдн рд╣реЛрдЧрд╛ рдЬреЛ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рддреАрди.рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ texSubImage2D рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХреНрдпреЛрдВ WebGL рдмрдирд╛рд╡рдЯ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдУрдкрдирдЬреАрдПрд▓ рдФрд░ рдЕрдиреНрдп libs рдХреА рдПрдХ рд╣реА рд╕реАрдорд╛ рд╣реИ?

рдФрд░ рдПрдХ рдФрд░ рдЪреАрдЬ рдЬреЛ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ рдЬреАрдПрд▓рдПрд╕рдПрд▓ рд╕рдВрдХрд▓рдиред
рдХреНрдпрд╛ рдпрд╣ рдлреНрд░реЗрдо рдЧрд┐рд░рд╛ рджреЗрдЧрд╛? рдпрд╛ рдХрд╛рдлреА рддреЗрдЬреА рд╕реЗ рдФрд░ рд╣рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ?

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

рдпрджрд┐ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдирдП ImageBitmap API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрдирд╛рд╡рдЯ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрдо рд╣реЛрдЧреАред https://youtu.be/wkDd-x0EkFU?t=82 рджреЗрдЦреЗрдВред

BTW: @spite рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ ImageBitmapLoader рд╣реИред

@ Mugen87 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Elation Engine/JanusWeb рдореЗрдВ ImageBitmap рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕рднреА рдмрдирд╛рд╡рдЯ рднрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ - рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рддреАрди.рдЬреЗрдПрд╕ рдХреЛрд░ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗрдмрдЬреАрдПрд▓ рдореЗрдВ рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рджреЛ рдореБрдЦреНрдп рдЦрд░реНрдЪ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - рдЫрд╡рд┐ рдбрд┐рдХреЛрдб рд╕рдордп , рдФрд░ рдЫрд╡рд┐ рдЕрдкрд▓реЛрдб рд╕рдордп - ImageBitmap рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ CPU рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдореЗрдВ рд▓рдЧрднрдЧ 50% рдХреА рдХрдЯреМрддреА рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди GPU рдкрд░ рдмрдбрд╝реЗ рдЯреЗрдХреНрд╕рдЪрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ 2048x2048 рдФрд░ рдКрдкрд░, рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗ рд╕рдХрддрд╛ рд╣реИред

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

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

requestIdleCallback рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ WebVR рд╕рддреНрд░реЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ

@ рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж рдореИрдВ рдЖрдкрдХреА рд╕рдЬрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ, рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?

рдореЗрд░реЗ рдкрд╛рд╕ texSubImage2D рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рд╡рдЯ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ THREE.UpdatableTexture рд╣реИ, рд▓реЗрдХрд┐рди рддреАрди.js рдХреЗ рдереЛрдбрд╝реЗ рд╕реЗ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред

requestIdleCallback (рдЖрд░рдЖрдИрд╕реА) рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ:

  • рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХреНрд░реЛрдо рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдкрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдФрд░ рдпрджреНрдпрдкрд┐ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкреЙрд▓реАрдлрд╝рд┐рд▓реНрдб рд╕рдВрд╕реНрдХрд░рдг рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдереЛрдбрд╝рд╛ рд╡рд┐рдлрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

  • рджреВрд╕рд░рд╛: рдЙрд╕реА рддрд░рд╣ vrDisplay.requestAnimationFrame (rAF) рдХреЛ рдкреЗрд╢ рдХрд░рддреЗ рд╕рдордп window.rAF рдХреЗ рдмрдЬрд╛рдп рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╡рд╣реА rIC рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ crbug рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд▓реЛрдбрд░ рдХреЛ рд╣рд░ рд╕рдордп рд╡рд░реНрддрдорд╛рди рд╕рдХреНрд░рд┐рдп рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЬреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рдлрд╛рдпрд░рд┐рдВрдЧ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ред рдпрд╣ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рд▓реЛрдбрд░ рдХреА рддрд╛рд░реЛрдВ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рдЬреЛ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрддрд┐ рд╕реНрдерд┐рддрд┐ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдереНрд░реАрдЬреЗ рдореЗрдВ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд░рдЦрдирд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдореЗрдВ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдХрд╛рд░реНрдп рдЪрд▓рд╛рддрд╛ рд╣реИ; рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдереНрд░реАрдЬреЗ рдореЗрдВ рд╡реАрдЖрд░ рдореЗрдВ рдирд╡реАрдирддрдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдм рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

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

@ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ, рдореИрдВрдиреЗ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╕рдордп рдЖрд░рдЖрдИрд╕реА рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдкрд╣рд▓реЗ рддреЛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рд╣рдореЗрдВ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЖрд░рдЖрдИрд╕реА рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ .rIC рдХреЛ рд╡рд┐рдВрдбреЛ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЬрдм рд╡рд┐рдВрдбреЛ рдпрд╛ рдбрд┐рд╕реНрдкреНрд▓реЗ рд╣реЛ рджреЛрдиреЛрдВ рдмреЗрдХрд╛рд░ред
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдореИрдВрдиреЗ webvr рд╕реНрдкреЗрдХреНрд╕ рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ рдЗрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИ @kearwood рдХреЗ рдкрд╛рд╕ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдореБрджреНрджрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдкрдиреЗ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рд╡рдЯ рдкреАрдЖрд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реИрдВ! :) рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдбрдмреНрд▓реНрдпреВрдЖрдИрдкреА рд╣реИ рддреЛ рд╣рдо рдХреБрдЫ рдЪрд░реНрдЪрд╛рдУрдВ рдХреЛ рд╡рд╣рд╛рдВ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЛрдбрд░ рдХреБрдЫ рдРрд╕рд╛ рдмрди рдЬрд╛рдП...

THREE.MyLoader = ( function () {

    // parse file and output js object
    function parser( text ) {
        return { 'vertices': new Float32Array() }
    }

    // convert js object to THREE objects.
    function builder( data ) {
        var geometry = new THREE.BufferGeometry();
        geometry.addAttribute( new THREE.BufferAttribute( data.vertices, 3 );
        return geometry;
    }

    function MyLoader( manager ) {}
    MyLoader.prototype = {
        constructor: MyLoader,
        load: function ( url, onLoad, onProgress, onError  ) {},
        parse: function ( text ) {
            return builder( parser( text ) );
        },
        parseAsync: function ( text, onParse ) {
            var code = parser.toString() + '\nonmessage = function ( e ) { postMessage( parser( e.data ) ); }';
            var blob = new Blob( [ code ], { type: 'text/plain' } );
            var worker = new Worker( window.URL.createObjectURL( blob ) );
            worker.addEventListener( 'message', function ( e ) {
                onParse( builder( e.data ) );
            } );
            worker.postMessage( text );
        }
    }
} )();

рддреАрди рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЬрд╛рд░реАред

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

@mrdoob рдореИрдВ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдареАрдХ рдЙрд╕реА рдХреЛрдб рдХреЛ рдкрд╛рдЗрдк рдХрд░рдиреЗ рдкрд░ рдпреЛрдЧреНрдпрддрд╛ рджреЗрдЦрддрд╛

рд╕рд╛рде рд╣реА, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рд╕реНрд╡рдпрдВ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рд╣реЛрдЧреАред рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкрд╛рд░реНрд╕рд░() рд╡рд┐рдзрд┐ рдХреЛ рддреАрди.рдЬреЗрдПрд╕ рдХреЗ рдЖрдпрд╛рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд▓реЗрдХрд┐рди рд╕рд┐рдВрдХ/рдПрд╕рд┐рдВрдХ рд▓реЛрдбрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рдВрджреБ рдХрд┐рдХ-рдЧрдзрд╛ рд╣реЛрдЧрд╛!

@mrdoob builder рдлрд╝рдВрдХреНрд╢рди рд╕рднреА рд▓реЛрдбрд░ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (WIP: https://github.com/kaisalmen/WWOBJLoader/blob/Commons/src/loaders/support/WWMeshProvider.js#LL215- LL367; рдЕрджреНрдпрддрди: рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрднреА рддрдХ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдпрджрд┐ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХрд┐рд╕реА рднреА THREE рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд┐рдирд╛ рд╢реБрджреНрдз рдЬреЗрдПрд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рддрдХ рд╕реАрдорд┐рдд рд╣реИ (рдпрд╣реА рдЖрдкрдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рд╣реИ, рд╣реИ рдирд╛?) рд╣рдо рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рдЖрдпрд╛рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдХреНрд░рдорд┐рдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛрдб рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдХреНрдпрд╛ WWOBJLoader рдХрд░рддрд╛ рд╣реИ)ред рдпрд╣ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдордЧреНрд░реА/рд╢реЗрдбрд░реНрд╕ (рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХреЛ рдХреЗрд╡рд▓ рдмрд┐рд▓реНрдбрд░ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ parser рд╕реЗ рдкрд╣рд▓реЗ JSON рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рд╣рд░ рдирдП рдЬрд╛рд▓ рдФрд░ рдЙрд╕рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

// parse file and output js object
function parser( text, onMeshLoaded, onComplete ) {
    ....
}
parse: function ( text ) {
    var node = new THREE.Object3d();
    var onMeshLoaded = function ( data ) {
        node.add( builder( data ) );
    };

    // onComplete as second callbackonly provided in async case
    parser( text, onMeshLoaded ) );
    return node;
},

рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╣рд╛рдпрдХ рд╣реИ + рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЪрд╛рд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЬреЛ рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЦрдВрдбрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреБрдЫ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред WWOBJLoader рд╡рд┐рдХрд╛рд╕ рдкрд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐: https://github.com/kaisalmen/WWOBJLoader/blob/Commons/src/loaders/support/WWMeshProvider.js#LL40 -LL133, рдЬрдмрдХрд┐ рдлреНрд░рдВрдЯ-рдПрдВрдб рдХреЙрд▓ рд░рд┐рдкреЛрд░реНрдЯ_рдкреНрд░рдЧрддрд┐, рдореЗрд╢рдбреЗрдЯрд╛ рдФрд░ рдкреВрд░реНрдг рд╣реИрдВред

рдЕрджреНрдпрддрди2:

  • рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рд░реНрд╕рд░ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ builder рд▓рд┐рдП рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди parser рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рдгреАрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
  • рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рд░рди рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд░рд╣ рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рджреЗрд╢рдХ рддрдм рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рд▓реЛрдбрд░ рдХреЛ рдЦрд┐рд▓рд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рдЕрдм WWOBJLoader рдХреА bespoke Commons рд╢рд╛рдЦрд╛ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, btw)
  • рдЪрд▓ рд░рд╣реЗ рджреЗрд╡: WWOBJLoader2 рдЕрдм OBJLoader рдФрд░ рдпрд╣ рдкрд╛рд░реНрд╕ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИред рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛрдиреЛрдВ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреИрдк рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧреЛрдВ рдореЗрдВред рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдХрд░реАрдм рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рддрдХ рд▓рд╛рдЗрди рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рдкрд╛рд░реНрд╕рд░ рдХреЛрдб рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЕрдВрддрддрдГ рджреЛрдиреЛрдВ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЖрдкрд╕ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ

рдЕрднреА рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ

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

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

рдЗрд╕ рд╕рд░рд▓реАрдХреГрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдореИрдВ рдЬреЛ рджреЛ рдбрд╛рдЙрдирд╕рд╛рдЗрдб рджреЗрдЦрддрд╛ рд╣реВрдВ рд╡реЗ рд╣реИрдВ:

  • рдореМрдЬреВрджрд╛ рдореЙрдбрд▓ рд▓реЛрдбрд░ рдХреЗ рдкреБрдирд░реНрд▓реЗрдЦрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрдИ рд▓реЛрдбрд░ рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдЯ-рдЗрди рддреАрди рдирд╛рдорд╛рдВрдХрд┐рдд рд╡рд░реНрдЧреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╢рд╛рдпрдж рддреАрди.рдЬреЗрдПрд╕ рдХреЛрдб рдХреЗ рдХреБрдЫ рдиреНрдпреВрдирддрдо рд╕реЗрдЯ рдХреЛ рдЦреАрдВрдЪрдирд╛ рд╣реЛрдЧрд╛ - рдФрд░ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
  • рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдкреНрд░рд╛рд░реВрдк рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрджрд╛рдиреБрдХреНрд░рдо, рд╕рд╛рде рд╣реА рд╡рд┐рднрд┐рдиреНрди рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ (рдореЗрд╖, рд╕реНрдХрд┐рдирдбрдореЗрд╢, рд▓рд╛рдЗрдЯ, рдХреИрдорд░рд╛, рдСрдмреНрдЬреЗрдХреНрдЯ 3 рдбреА, рд▓рд╛рдЗрди, рдЖрджрд┐) рдХреЛ рдареАрдХ рд╕реЗ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ "рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдХреА

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

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

https://baicoianu.com/~bai/three.js/examples/webgl_texture_framebuffer.html

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

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

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

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

@jbaicoianu re: рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХрд╛ createImageBitmap, рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рд╢рдмреНрджрдХреЛрд╢ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЫрд╡рд┐ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдпрд╛ рд░рдВрдЧ рд╕реНрдерд╛рди рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдкреАрдЖрдИ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрд╣реБрдд рдмреЗрдХрд╛рд░ рдмрдирд╛ рджреЗрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рджреЛ рдмрдЧ рджрд░реНрдЬ рдХрд┐рдП: https://bugzilla.mozilla.org/show_bug.cgi?id=1367251 рдФрд░ https://bugzilla.mozilla.org/show_bug.cgi?id=1335594

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

Argument 4 of Window.createImageBitmap '1024' is not a valid value for enumeration ImageBitmapFormat.

рдЬреЛ рднреНрд░рд╛рдордХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдХрд▓реНрдкрдирд╛ рдореЗрдВ createImageBitmap рдХрд╛ рдХреЛрдИ рднреА рд╕рдВрд╕реНрдХрд░рдг рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ ImageBitmapFormat рд▓реЗрддрд╛ рд╣реИред

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

@jbaicoianu THREE.WebGLRenderTarget рдПрдХ рдлреНрд░реЗрдордмрдлрд░, рдПрдХ рдмрдирд╛рд╡рдЯ рдФрд░ рдПрдХ рд░реЗрдВрдбрд░ рдмрдлрд░ рд░рдЦрддрд╛ рд╣реИред рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрдирд╛рд╡рдЯ рдЗрдХрдЯреНрдареА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЖрдк рдлреНрд░реЗрдордмрдлрд░ рдФрд░ рд░реЗрдВрдбрд░ рдмрдлрд░ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдмрдирд╛рд╡рдЯ рдХреЛ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛):

texture = target.texture;
target.texture = null; // so the webgl texture is not deleted by dispose()
target.dispose();

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

@mrdoob рдФрд░ @jbaicoianu рдореИрдВ рдпрд╣ рдмрддрд╛рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдХрд┐ рдореБрдЭреЗ рднреА рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред рдореИрдВ
рдореИрдВрдиреЗ OBJLoader рдФрд░ WWOBJLoader рдФрд░ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ ( code ) рдХреЗ
рдирд┐рд░реНрджреЗрд╢рд┐рдд WWOBJLoader2 рдкрд░реАрдХреНрд╖рдг:
https://kaisalmen.de/proto/test/wwparallels/main.src.html
рдЬреЗрдиреЗрд░рд┐рдХ рдХрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ WorkerSupport :
https://kaisalmen.de/proto/test/meshspray/main.src.html
рдмрдбрд╝рд╛ рдЬрд╝рд┐рдкрд┐рдд OBJ рдлрд╝рд╛рдЗрд▓ рдкрд░реАрдХреНрд╖рдг:
https://kaisalmen.de/proto/test/wwobjloader2stage/main.src.html

рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдирдП рдХреЛрдб рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд░ рджреВрдВрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдмрддрд╛ рджреВрдВрдЧрд╛ред
рдЕрджреНрдпрддрди 2017-07-30: OBJLoader2 рдФрд░ WWOBJLoader2 рдЕрдм рд╕рдорд╛рди рдкрд╛рд░реНрд╕рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╡реЗ рд╕реАрдзреЗ рдпрд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕реЗ рдЖрдо рдмрд┐рд▓реНрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рдЕрджреНрдпрддрди 2017-07-31: WWOBJLoader2 рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реИред OBJLoader2 рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ parse рдФрд░ parseAsync , load рдФрд░ run ( LoaderDirector рдпрд╛ рдореИрдиреНрдпреБрдЕрд▓ рджреНрд╡рд╛рд░рд╛ рдлрд╝реАрдб)

рдЕрджреНрдпрддрди 2017-08-09:
рдЕрджреНрдпрддрди рдХреЛ рдирдИ рдкреЛрд╕реНрдЯ рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ред

OBJLoader2 OBJLoader рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рд╕рдВрдЧрдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ (рдореИрдВрдиреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдЗрд╕реЗ рддреЛрдбрд╝ рджрд┐рдпрд╛), OBJLoader2 parseAsync рдФрд░ load рд╕рд╛рде useAsync рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛
https://github.com/kaisalmen/WWOBJLoader/tree/V2.0.0-Beta/src/loaders

рдореИрдВрдиреЗ рд▓реЛрдбрд░ рд╕рдкреЛрд░реНрдЯ рдХреНрд▓рд╛рд╕реЗрд╕ (рдУрдмреАрдЬреЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░) рдирд┐рдХрд╛рд▓реА рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╕рдорд░реНрдерди рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдиреНрдп рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЖрдзрд╛рд░рд┐рдд рд▓реЛрдбрд░ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рднреА рдХреЛрдб рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдореЗрд░реЗ рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ рд░рдЦрд╛ THREE.LoaderSupport рд╕реЗ рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ OBJLoader2 :

  • Builder : рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рд▓ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП
  • WorkerDirector : рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдбрд░ рдмрдирд╛рддрд╛ рд╣реИ, PrepData рдХреЛ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рд░рд╛рд╢рд┐ рдХреЗ рд╕рд╛рде рдХрддрд╛рд░ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реЛрдбрд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреБрдХреНрдд (MeshSpray рдФрд░ Parallels рдбреЗрдореЛ)
  • WorkerSupport : рдореМрдЬреВрджрд╛ рдХреЛрдб рд╕реЗ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдПрдХ рд╕рд░рд▓ рд╕рдВрдЪрд╛рд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд░реНрдЧ
  • PrepData + ResourceDescriptor : рдСрдЯреЛрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рдпрд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХреАрдХреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд┐рд╡рд░рдг
  • Commons : рд▓реЛрдбрд░ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдЖрдзрд╛рд░ рд╡рд░реНрдЧ (рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИ)
  • Callbacks : (onProgress, onMeshAlter, onLoad) рд╕реНрд╡рдЪрд╛рд▓рди рдФрд░ рджрд┐рд╢рд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ LoadedMeshUserOverride рдХрд╛ рдЙрдкрдпреЛрдЧ onMeshAlter рд╕реЗ рд╡рд╛рдкрд╕ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдиреАрдЪреЗ objloader2 рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЬреЛрдбрд╝)
  • Validator : рд╢реВрдиреНрдп/рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд░ рдЬрд╛рдВрдЪ

@mrdoob @jbaicoianu OBJLoader2 рдЕрдм рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдкрд╛рд░реНрд╕рд░ рд▓рдкреЗрдЯрддрд╛ рд╣реИ (рдЗрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрддрд░ рдкрд░ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП PrepData рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред Builder рдкреНрд░рддреНрдпреЗрдХ рдХрдЪреНрдЪреЗ рдЬрд╛рд▓ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╛рд░реНрд╕рд░ рдмреЗрд╕ рдиреЛрдб рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдмреНрд▓реВрдкреНрд░рд┐рдВрдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рдкрд╛рд░реНрд╕рд░ рдХреЗ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП OBJLoader2 рдореЗрдВ рдЕрднреА рднреА рдХреБрдЫ рд╕рд╣рд╛рдпрдХ рдХреЛрдб рд╣реИрдВ рдЬрд┐рдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдмрд┐рд▓реНрдбрд░ рдХреЛ рд╕рдлрд╛рдИ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ buildMeshes рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдмрдВрдз/рдкреИрд░рд╛рдореАрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрднреА рднреА рдУрдмреАрдЬреЗ рд▓реЛрдбрд┐рдВрдЧ рд╕реЗ рдХрд╛рдлреА рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрднреА рднреА рдирд┐рд░реНрдорд╛рдгрд╛рдзреАрди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреЛрдб рдХреЛ рдХреБрдЫ рдЪрдордХрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рдЪрд░реНрдЪрд╛, рдЖрд▓реЛрдЪрдирд╛ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ...

рдЙрджрд╛рд╣рд░рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг

рд░рди рдФрд░ рд▓реЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдУрдмреАрдЬреЗ рд▓реЛрдбрд░:
https://kaisalmen.de/proto/test/objloader2/main.src.html
OBJ рд▓реЛрдбрд░ async рдФрд░ parseAsync рдЪрд▓рд╛рдПрдБ:
https://kaisalmen.de/proto/test/wwobjloader2/main.src.html
рд░рди async OBJLoader2 рдХрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдЙрдкрдпреЛрдЧ:
https://kaisalmen.de/proto/test/wwparallels/main.src.html
рдЬреЗрдиреЗрд░рд┐рдХ рд╡рд░реНрдХрд░ рд╕рдкреЛрд░реНрдЯ рдХрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдЙрдкрдпреЛрдЧ:
https://kaisalmen.de/proto/test/meshspray/main.src.html
рдмрдбрд╝рд╛ рдЬрд╝рд┐рдкрд┐рдд OBJ рдлрд╝рд╛рдЗрд▓ рдкрд░реАрдХреНрд╖рдг:
https://kaisalmen.de/proto/test/wwobjloader2stage/main.src.html

рдЬрдВрдЪ рд░рд╣реЗ рд╣реЛ! рдХреНрдпрд╛ рдЖрдк OBJLoader рдореЗрдВ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЕрд╡рдЧрдд рд╣реИрдВ? #11871 565c6fd0f3d9b146b9434e5fccfa2345a90a3842

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

@mrdoob рдФрд░ https://github.com/mrdoob/three.js/pull/11928 n-gon рд╕рдкреЛрд░реНрдЯ

рд╕реНрдерд┐рддрд┐ рдЕрджреНрдпрддрди ( рдХреЛрдб ):
рдмрдирд╛рдП рдЧрдП рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЕрдм рдХрд┐рд╕реА рд╕рдВрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдЕрдВрджрд░ рдХрд┐рд╕реА рднреА рдкрд╛рд░реНрд╕рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред WorkerSupport рдПрдХ рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдзрд╛рд╡рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ( рдХреЛрдб ) рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдпрд╛ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреЛрдб рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореЗрдВ рдкрджрд╡реНрдпрд╛рдЦреНрдпрд╛рдпрд┐рддреНрд░ рдЪрд▓реЗрдВрдЧреЗ run рдХреА рд╡рд┐рдзрд┐ WorkerRunnerRefImpl ( Parser рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рджрд╛рдпрд░реЗ рдХреЗ рдЕрдВрджрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ; this.applyProperties рдХреЙрд▓ setters рдпрд╛ рдХреЗ рдЧреБрдгреЛрдВ рдкрд╛рд░реНрд╕рд░):

WorkerRunnerRefImpl.prototype.run = function ( payload ) {
    if ( payload.cmd === 'run' ) {

        console.log( 'WorkerRunner: Starting Run...' );

        var callbacks = {
            callbackBuilder: function ( payload ) {
                self.postMessage( payload );
            },
            callbackProgress: function ( message ) {
                console.log( 'WorkerRunner: progress: ' + message );
            }
        };

        // Parser is expected to be named as such
        var parser = new Parser();
        this.applyProperties( parser, payload.params );
        this.applyProperties( parser, payload.materials );
        this.applyProperties( parser, callbacks );
        parser.parse( payload.buffers.input );

        console.log( 'WorkerRunner: Run complete!' );

        callbacks.callbackBuilder( {
            cmd: 'complete',
            msg: 'WorkerRunner completed run.'
        } );

    } else {

        console.error( 'WorkerRunner: Received unknown command: ' + payload.cmd );

    }
};

OBJLoader2.parseAsync рд╕реЗ рд╕рдВрджреЗрд╢ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

this.workerSupport.run(
    {
        cmd: 'run',
        params: {
            debug: this.debug,
            materialPerSmoothingGroup: this.materialPerSmoothingGroup
        },
        materials: {
            materialNames: this.materialNames
        },
        buffers: {
            input: content
        }
    },
    [ content.buffer ]
);

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

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

FYI рдХрд░реЗрдВ, рдпрд╣рд╛рдБ ImageBitmapLoader рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп-рдкреНрд░рдЧрддрд┐ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк, рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдХреБрдЫ рдХрдард┐рди рд╕рдВрдЦреНрдпрд╛рдПрдБ: https://github.com/mrdoob/three.js/pull/12456

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

рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИред я╕П

@mrdoob рдЖрдк рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдЬрдирд╛ рд╣реИ ImageLoader рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ImageBitmapLoader рдореЗрдВ TextureLoader рдХреНрдпреЛрдВрдХрд┐ ImageBitmap рдмрдирд╛рд╡рдЯ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо-рдЕрд╡рд░реБрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? createImageBitmap() рдЕрдЧрд░ рд╣рдо рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рддрд░реНрдХ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЕрдм рддрдХ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред (рд╢рд╛рдпрдж рд╣рдореЗрдВ TextureLoader рдорд╛рдзреНрдпрдо рд╕реЗ рджреВрд╕рд░реЗ рдФрд░ рдЕрдзрд┐рдХ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?)

return createImageBitmap( blob );

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ createImageBitmap () рд╡рд┐рдХрд▓реНрдк рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛ рдЖрдк рдЗрдореЗрдЬ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди (рдлреНрд▓рд┐рдк-рд╡рд╛рдИ) рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдкреНрд░реАрдорд▓реНрдЯреАрдкреНрд▓рд╛рдЗрдб рдЕрд▓реНрдлрд╛ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк WebGLRenderingContext.pixelStorei рд▓рд┐рдП ImageBitmap рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рд╕реЗ :

_рдЕрдЧрд░ TexImageSource рдПрдХ рдЗрдореЗрдЬ рдмрд┐рдЯрдореИрдк рд╣реИ, рддреЛ рдЗрди рддреАрди рдкреИрд░рд╛рдореАрдЯрд░ (UNPACK_FLIP_Y_WEBGL, UNPACK_PREMULTIPLY_ALPHA_WEBGL, UNPACK_COLORSPACE_CONVERSION_WEBGL) рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕рдордХрдХреНрд╖ ImageBitmapOptions рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде ImageBitmap рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред_

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ ImageBitmapLoader рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ FF рд╡рд┐рдХрд▓реНрдк рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕реЗ рдЧреБрдг Texture.premultiplyAlpha рдФрд░ Texture.flipY рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ ImageBitmap рдЕрднреАред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдиреНрд╣реЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ ImageBitmap рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдмрдирд╛рд╡рдЯ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХреБрдЫ рд╣рдж рддрдХ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИред

рдЖрд╣ рдЕрдЪреНрдЫрд╛ред рдореИрдВ рдЙрд╕ рдпреБрдХреНрддрд┐ рд╕реЗ рдЪреВрдХ рдЧрдпрд╛ рд╣реВрдВред

рд╡рд┐рдХрд▓реНрдк рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рдорд╣рддреНрд╡ рдкрд░ рднреА рдпрд╣рд╛рдБ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ:

https://bugzilla.mozilla.org/show_bug.cgi?id=1335594

рдмрдЧрдЬрд┐рд▓рд╛ (https://bugzilla.mozilla.org/show_bug.cgi?id=1367251, https://bugzilla.mozilla.org/show_bug.cgi?id=1335594) рдкрд░ рдмрдЧреНрд╕ рдХреЛ рдЕрдЫреВрддреЗ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ ... рджреЛ рдЕрдм рд╕рд╛рд▓? рдореИрдВрдиреЗ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЗрддрдирд╛ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред

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

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдорд╛рдзрд╛рди рдлреАрдЪрд░ рдбрд┐рдЯреЗрдХреНрд╢рди рдХрд░ рд░рд╣рд╛ рд╣реИ: рдлреНрд▓рд┐рдк рдлреНрд▓реИрдЧ рдХреЗ рд╕рд╛рде рд╕реАрдЖрдИрдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 2x2 рдЫрд╡рд┐ рдмрдирд╛рдПрдВ, рдФрд░ рдлрд┐рд░ рд╡рд╛рдкрд╕ рдкрдврд╝реЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдорд╛рди рд╕рд╣реА рд╣реИрдВред

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

рдмрдЧрдЬрд┐рд▓рд╛ (https://bugzilla.mozilla.org/show_bug.cgi?id=1367251, https://bugzilla.mozilla.org/show_bug.cgi?id=1335594) рдкрд░ рдмрдЧреНрд╕ рдХреЛ рдЕрдЫреВрддреЗ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ ... рджреЛ рдЕрдм рд╕рд╛рд▓? рдореИрдВрдиреЗ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЗрддрдирд╛ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред

рд╣рд╛рдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ -_-

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

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдорд╛рдзрд╛рди рдлреАрдЪрд░ рдбрд┐рдЯреЗрдХреНрд╢рди рдХрд░ рд░рд╣рд╛ рд╣реИ: рдлреНрд▓рд┐рдк рдлреНрд▓реИрдЧ рдХреЗ рд╕рд╛рде рд╕реАрдЖрдИрдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 2x2 рдЫрд╡рд┐ рдмрдирд╛рдПрдВ, рдФрд░ рдлрд┐рд░ рд╡рд╛рдкрд╕ рдкрдврд╝реЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдорд╛рди рд╕рд╣реА рд╣реИрдВред

рд╣рд╛рдВ, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рджреЛрдиреЛрдВ рд╕рдорд╛рдзрд╛рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЗрдХрд╛рд░ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдЙрдирд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдореЗрдВ рднреА рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреА рддрд░рдл рд╕реЗ рдЕрдирдмреНрд▓реЙрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдореИрдВрдиреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ImageBitmap рдмрдирд╛рдпрд╛ред рд╣рд░ 5 рд╕реЗрдХрдВрдб рдореЗрдВ рдмрдирд╛рд╡рдЯ рдЕрдкрд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЖрдк рд░реЗрдЧреБрд▓рд░ рдЗрдореЗрдЬ рдмрдирд╛рдо рдЗрдореЗрдЬ рдмрд┐рдЯрдореИрдк рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

https://rawgit.com/takahirox/three.js/ImageBitmapTest/examples/webgl_texture_upload.html (рдирд┐рдпрдорд┐рдд рдЫрд╡рд┐)
https://rawgit.com/takahirox/three.js/ImageBitmapTest/examples/webgl_texture_upload.html?imagebitmap (ImageBitmap)

рдореЗрд░реА рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдкрд░ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдБ

| рдмреНрд░рд╛рдЙрдЬрд╝рд░ | 8192x4096 рдЬреЗрдкреАрдЬреА 4.4рдПрдордмреА | 2048x2048 рдкреАрдПрдирдЬреА 4.5 рдПрдордмреА |
| ---- | ---- | ---- |
| рдХреНрд░реЛрдо рдЫрд╡рд┐ | 500ms | 140ms |
| рдХреНрд░реЛрдо рдЗрдореЗрдЬ рдмрд┐рдЯрдореИрдк | 165ms | 35ms |
| рдлрд╛рдпрд░рдлреЙрдХреНрд╕ рдЗрдореЗрдЬ | 500ms | 40ms |
| рдлрд╛рдпрд░рдлреЙрдХреНрд╕ рдЗрдореЗрдЬ рдмрд┐рдЯрдореИрдк | 500ms | 60ms |

( texture.generateMipmaps рд╣реИ true )

рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░

  1. рдХреНрд░реЛрдо рдкрд░ ImageBitmap рдХреЗ рд╕рд╛рде 3x рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рдиред рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╕реБрдзрд╛рд░ред
  2. рдлрд╝рд╛рдпрд░реНрдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдЕрдм ImageBitmap рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рднреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореЛрдмрд╛рдЗрд▓ рдкрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рднреА рд╕реНрд╡рд╛рдЧрдд рдпреЛрдЧреНрдп рд╣реИред
  3. рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ ImageBitmap рдХреЗ рд╕рд╛рде, рдмрдирд╛рд╡рдЯ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рдЕрднреА рднреА рдмрдбрд╝реА рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реБрджреНрдз рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдЖрдВрд╢рд┐рдХ рдЕрдкрд▓реЛрдбрд┐рдВрдЧ рддрдХрдиреАрдХ рдпрд╛ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ ImageBitmap рдХреЗ рд╕рд╛рде, рдмрдирд╛рд╡рдЯ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рдЕрднреА рднреА рдмрдбрд╝реА рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реБрджреНрдз рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЖрдВрд╢рд┐рдХ рдЕрдкрд▓реЛрдбрд┐рдВрдЧ рддрдХрдиреАрдХ рдпрд╛ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЪрд╛рд╣рд┐рдПред

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

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

рдпрд╛ рдЕрдиреБрд╕реВрдЪрд┐рдд/рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВIdleCallback texSubImage2D

рдЖрд░рдЖрдИрд╕реА = requestIdleCallback?

рд╣рд╛рдБ, рдореИрдВрдиреЗ рдПрдХ рдирд┐рдВрдЬрд╛ рд╕рдВрдкрд╛рджрди рдХрд┐рдпрд╛ рд╣реИ

рдареАрдХ рд╣реИред рд╣рд╛рдБ рд╕рд╣рдорддред

BTW, рдореИрдВ рдЕрднреА рддрдХ рд╕рдВрдХреБрдЪрд┐рдд рдмрдирд╛рд╡рдЯ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдБред рдореБрдЭреЗ рдЕрдкрдиреА рд╕рдордЭ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рджреЛред рд╣рдо рд╕рдВрдкреАрдбрд╝рд┐рдд рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ ImageBitmap рд╕рд╛рде рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ compressedTexImage2D ImageBitmap рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣реИ рдирд╛?

https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/compressedTexImage2D

рдореИрдВ рдЕрдкрдиреЗ рдкреБрд░рд╛рдиреЗ рдЯрд╛рдЗрд▓реЗрдбрдЯреЗрдХреНрдЪрд░ рд▓реЛрдбрд░ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЧрдпрд╛ - рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЕрдм рдореЗрд░реЗ рд╡реАрдбрд┐рдпреЛ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдХреНрд░реИрд╢ рдФрд░ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣реЗ рд╣реИрдВ :(

(рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдмрдбрд╝реА рдмрдирд╛рд╡рдЯ (16k x 16k - https://baicoianu.com/~bai/three.js/examples/textures/dotamap1_25.jpg) рдХреЛ рд╕реАрдзреЗ рдХреНрд░реЛрдо рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рдХреНрд░реИрд╢ рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рд╣реИред рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдХреНрд░реЛрдо рдХреА рдЗрдореЗрдЬ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рдХреБрдЫ рд░рд┐рдЧреНрд░реЗрд╢рди рд▓рдЧрддрд╛ рд╣реИ)

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

рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рднрдВрдбрд╛рд░ рдЕрднреА рднреА рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ https://github.com/jbaicoianu/THREE.TiledTexture/

рдореБрдЭреЗ рдЬреЛ рдкреНрд░рдпреЛрдЧ рдпрд╛рдж рд╣реИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдиреЛрдЯреНрд╕:

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

рдореЗрд░реЗ рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рдереЗ: рдЕрдкрд▓реЛрдб рдЧрддрд┐ рдФрд░ рдЬрд╛рдирджрд╛рд░реА рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдордЭреМрддрд╛ рдерд╛ред (рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдореИрдВрдиреЗ рдЗрд╕реЗ https://github.com/spite/THREE.UpdatableTexture рдмрдирд╛рдпрд╛ рд╣реИ)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП WebGL 1 рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рдмрдирд╛рд╡рдЯреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдпрд╛ рдпреВрд╡реА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рд╕рдВрд╢реЛрдзрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╡реЗрдмрдЬреАрдПрд▓ 2 рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрди рд╕реНрд░реЛрддреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдЬреЛ рд▓рдХреНрд╖реНрдп рдмрдирд╛рд╡рдЯ рд╕реЗ рднрд┐рдиреНрди рдЖрдХрд╛рд░ рдХреЗ рд╣реИрдВред

рд╣рд╛рдБ, texSubImage2D рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдлреНрд░реЗрдордмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдмрдирд╛рд╡рдЯ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдорд╛рди рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрд░реНрдереЛрдЧреНрд░рд╛рдлрд┐рдХ рдХреИрдорд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд┐рдорд╛рди рдХреЗ рдкреИрдорд╛рдиреЗ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдХрд┐ рдбреНрд░рд╛ рдХреЙрд▓ред

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

https://bugzilla.mozilla.org/show_bug.cgi?id=1486454

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

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

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

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

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

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

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

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