Pixi.js: рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд╛рда рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реБрдП рдФрд░ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реБрдП рдЙрдЪреНрдЪ рдПрдлрдкреАрдПрд╕ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рд╕рд┐рддре░ 2020  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pixijs/pixi.js

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

рд▓рдХреНрд╖реНрдп

1500 рдкрд╛рда рд▓реЗрдмрд▓
60 рд╕реНрдерд┐рддрд┐ рдЕрдкрдбреЗрдЯ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб
60 рдПрдлрдкреАрдПрд╕

рдкрд┐рдХреНрд╕реА рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди

рдореИрдВрдиреЗ рдореИрдХрдмреБрдХ рдкреНрд░реЛ рдкрд░ ~ 28 FPS рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк BitMapText рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рд╣реИред
https://www.pixiplayground.com/#/edit/rLbAN_xrw7yUU_cg_c8Xv

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реБрдзрд╛рд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ? рдЖрдкрдХрд╛ рдЕрдЧреНрд░рд┐рдо рд░реВрдк рд╕реЗ рдмреЛрд╣реЛрдд рдзрдиреНрдпрд╡рд╛рдж!

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

рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдкрд╛рда рд╕реЗ рдПрдХ рдмрдирд╛рд╡рдЯ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ред ЁЯШД

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдм 60FPS рдХреЗ рд╕рд╛рде рд╣рд░ рдлреНрд░реЗрдо рдореЗрдВ рд╕рднреА 1500 рд▓реЗрдмрд▓ рдкрджреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рд░ рджреВрд╕рд░реЗ рдкрд╛рда рдХреА рд╕рд╛рдордЧреНрд░реА рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдЪрд▓рддреЗ рд╣рд░ рд╕реЗрдХрдВрдб рдореЗрдВ рдереЛрдбрд╝реА рдардВрдб рдкрдбрд╝рддреА рд╣реИред рддреЛ рдЕрдЧрд▓рд╛ рдХрджрдо рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд╡реЗрдм рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рдЙрди рдкрд╛рда рдЕрдкрдбреЗрдЯ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ ImageBitmap рдФрд░ OffscreenCanvas рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреА рдкреНрд░рдЧрддрд┐ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ред

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

рдХреНрдпрд╛ рдЖрдк _sure_ рд╣реИрдВ, рдЖрдкрдХреЛ _all_ рдмрд╛рд░ рд╕реНрдХреНрд░реАрди рдкрд░ 1500 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдСрдлрд╝рд╕реНрдХреНрд░реАрди рд▓реЗрдмрд▓ рдЦреАрдВрдЪрдиреЗ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реЗрдЧреАред рдкрд┐рдХреНрд╕реА рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдкреНрд▓рдЧрдЗрдиреНрд╕ (рдЬреИрд╕реЗ, @pixi-essentials/cull @SukantPal рджреНрд╡рд╛рд░рд╛) рд╣реИрдВ рдЬреЛ рдпрд╣рд╛рдВ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

@ChristophWalter рдЖрдкрдиреЗ рдЬреЛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдпрд╛ рд╣реИ, рд╡рд╣ рд╕рдВрднрд╡рддрдГ @bigtimebuddy рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рд╕реЗ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 112 рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рд╕рд╛рде 1500 рд▓реЗрдмрд▓ _a lot_ рд╣реИред рдРрд╕реЗ рдХрд╛рд░рдг рд╣реИрдВ рдХрд┐ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрд╛рда рдЬреНрдпрд╛рджрд╛рддрд░ рдЕрддрд┐рд╡реНрдпрд╛рдкреА рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬрдВрдмрд▓реНрдб рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ рдЬреЛ рдЗрддрдирд╛ рдШрдирд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

MESH.BATCHABLE_SIZE рдХреЛ 200 рдЬреИрд╕реЗ рдЙрдЪреНрдЪ рдореВрд▓реНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИред рдореИрдВ рдЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрднреА рднреА рдореЗрд░реЗ iMac рдкрд░ рдПрдХ 6x CPU рдордВрджреА рдХреЗ рдмрд╛рдж 45 FPS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢рдХреНрддрд┐рдпреЛрдВред

рдореИрдВрдиреЗ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджрд┐рдП рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдпрд╣ GPU-рдкрдХреНрд╖ рдХреА рдЕрдбрд╝рдЪрди рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдЖрдЙрдЯ-рдСрдл-рдСрд░реНрдбрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдЕрдХреНрд╖рд░ (рд╕рднреА As, рдлрд┐рд░ рд╕рднреА Bs, рд╕рднреА Cs, рдЖрджрд┐) рдХреЛ рдПрдХ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдмрдирд╛рд╡рдЯ рд╕реНрдерд╛рдиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЯрд╛рдЗрд▓-рдЗрдВрдЬрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдФрд░ / рдпрд╛ рдПрдХ рдЕрд▓рдЧ-рд░реЗ-рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рдЬреЛ рд╕реНрдХреНрд░реАрди рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ _changed_ рд╣реИ (рдпрд╛рдиреА 1500 рд▓реЗрдмрд▓реЛрдВ рдореЗрдВ рд╕реЗ 60 рдЕрдкрдбреЗрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░)ред рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдФрд░ рдЗрдиреНрд╣реЗрдВ рдРрд╕реЗ рд╣реА рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрдкрдХреЗ рд╕рд╣рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

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

рд▓реЗрдмрд▓ рдЕрдиреВрдареЗ рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рд╡реЗ рдЕрдХреНрд╕рд░ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдкрд╛рда рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреА рдХреБрдЫ рдХреНрд╖рдорддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдкрджреЛрдВ ( рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди ) рдХреЛ рдЕрджреНрдпрддрди рдирд╣реАрдВ рдХрд░рддрд╛ рддреЛ рднреА рдПрдлрдкреАрдПрд╕ рдПрдХ рд╕рдорд╛рди рд░рд╣рддрд╛ рд╣реИред рдХреНрдпрд╛ рдХреЗрд╡рд▓ рдЧреНрд░рдВрдереЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЬрдм рд╡реЗ рдмрджрд▓рддреЗ рд╣реИрдВ?

MESH.BATCHABLE_SIZE рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдореЗрд░реА рдУрд░ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рдЧрдпрд╛ред рдореИрдВ рдЖрдкрдХреЗ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реВрдБрдЧрд╛ рдпрд╛ iMacs рдЦрд░реАрджрдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░реВрдБрдЧрд╛ at рдореИрдВ рдкреНрд░рддрд┐рдкрд╛рджрди рдореЗрдВ рдЙрддрдирд╛ рдирд╣реАрдВ рд╣реВрдБ, рдЗрд╕рд▓рд┐рдП рдпреЗ рд╡рд┐рдЪрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░рддреЗ рд╣реИрдВ!

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

рдпрд╣ рджреЛ рдкреНрд░рдореБрдЦ рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

  • рдпрд╣ рдмреИрдЪ рд░реЗрдВрдбрд░рд░ рдХреЗ рдмрдлрд░рд┐рдВрдЧ рдЪрд░рдг рдХреЗ рдУрд╡рд░рд╣реЗрдб рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдЧрд╛ред
  • рд╢реАрд░реНрд╖рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ 112x (4 / рд╡рд░реНрдг рдХреЗ рдмрдЬрд╛рдп 4 / рдкрд╛рда) рдХреА рдХрдЯреМрддреА рдХреА рдЬрд╛рдПрдЧреАред рдпрд╣ рд╕рд┐рд░реНрдл 6K рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдХреЛрдиреЗ рд▓рд╛рддрд╛ рд╣реИред
  • рджреГрд╢реНрдп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ DisplayObjectред

рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

  1. BitmapText рдХреЛ рдПрдХ RenderTexture рдореЗрдВ рд░реЗрдВрдбрд░ рдХрд░реЗрдВ
  2. 1500 * 4 рдХреЛрдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдореЗрд╖ рдмрдирд╛рдПрдБред
  3. рд╕реАрдзреЗ рдХреЛрдиреЗ рдЪреЗрддрдиред рдЖрдкрдХреЛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐ рдЙрджрд╛рд╣рд░рдг рдЪрд╛рд░ рдЖрдпрддреЗрдВ рд╣реИрдВ (рдпрд╛рдиреА рдЖрдпрддреЗрдВ)ред рддреЛ рдЖрдк рдкрд╣рд▓реЗ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗред рдлрд┐рд░ рдЕрдиреНрдп рддреАрди (x + рдЪреМрдбрд╝рд╛рдИ, рдКрдВрдЪрд╛рдИ), (x + рдЪреМрдбрд╝рд╛рдИ, y + рдКрдВрдЪрд╛рдИ), (x, y + рдКрдВрдЪрд╛рдИ) рд╣реЛрдВрдЧреЗред

рдпрд╣ рдПрдХ рд╕реАрдзреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЬрд╛рддрд╛ рд╣реИ!

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

const bitmapFontText = new PIXI.BitmapText(
    'Lorem ipsum dolor\nsit amet consetetur\nsadipscing elitr sed', 
    { font: '55px Desyrel', align: 'left' }
);

const texture =  PIXI.RenderTexture.create({ width: 800, height: 600 });
app.renderer.render(bitmapFontText, texture);

const vertices = [
    -0.5, -0.5,
    0.5, -0.5,
    0.5, 0.5,
    -0.5, 0.5
];
const uvs = [
    0, 0,
    1, 0,
    1, 1,
    0, 1,
];
const indices = [0, 1, 2, 0, 2, 3];
const geometry = new PIXI.MeshGeometry(vertices, uvs, indices);
const shader = new PIXI.MeshMaterial(texture);

const mesh = new PIXI.Mesh(geometry, shader);
app.stage.addChild(mesh);

https://www.pixiplayground.com/#/edit/7RHqFti0tdSzw -6iOtylk

-
_Edit_: рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ред рдХреЛрдиреЗ рдХреЛ рдкрд┐рдХреНрд╕реЗрд▓ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред _Next step_: рдореЗрд╖ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

const vertices = [
    0, 0,
    500, 0,
    500, 500,
    0, 500
];

-
_Edit 2_: рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрдм рд╕рднреА рд▓реЗрдмрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдЧрд▓рдд рдмрддрд╛рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдмрд▓ рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╕рд╛рдордЧреНрд░реА рд╣рд░ рдлреНрд░реЗрдо рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓реЗрдЧреАред

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдкрджреЛрдВ ( рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди ) рдХреЛ рдЕрджреНрдпрддрди рдирд╣реАрдВ рдХрд░рддрд╛ рддреЛ рднреА рдПрдлрдкреАрдПрд╕ рдПрдХ рд╕рдорд╛рди рд░рд╣рддрд╛ рд╣реИред рдХреНрдпрд╛ рдХреЗрд╡рд▓ рдЧреНрд░рдВрдереЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЬрдм рд╡реЗ рдмрджрд▓рддреЗ рд╣реИрдВ?

рдХреНрдпрд╛ рдЗрд╕рд╕реЗ PIXI.Mesh рдорджрдж рдХрд░реЗрдЧрд╛? рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рднреА рд╕рдВрд╕рд╛рдзрди рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдореИрдВ PixiJS рдХреА рдкреНрд░рддрд┐рдкрд╛рджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реВрдБ?

@ChristophWalter рдЖрдк рдПрдХ рд░реЗрдВрдбрд░рд░ рдЦреБрдж рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп), рдПрдХ рдЯрд┐рдХрд░ рд▓реВрдк рд╕реЗрдЯрдЕрдк рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреЗ рджреГрд╢реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдкрд░ Renderer.render _only_ рдХреЙрд▓ рдХрд░реЗред

рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ autoStart: false рднреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ app.render() рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╣реА рддрд░рд╣ рдХрд╛ред

рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдкрд╛рда рд╕реЗ рдПрдХ рдмрдирд╛рд╡рдЯ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ред ЁЯШД

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдм 60FPS рдХреЗ рд╕рд╛рде рд╣рд░ рдлреНрд░реЗрдо рдореЗрдВ рд╕рднреА 1500 рд▓реЗрдмрд▓ рдкрджреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рд░ рджреВрд╕рд░реЗ рдкрд╛рда рдХреА рд╕рд╛рдордЧреНрд░реА рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдЪрд▓рддреЗ рд╣рд░ рд╕реЗрдХрдВрдб рдореЗрдВ рдереЛрдбрд╝реА рдардВрдб рдкрдбрд╝рддреА рд╣реИред рддреЛ рдЕрдЧрд▓рд╛ рдХрджрдо рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд╡реЗрдм рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рдЙрди рдкрд╛рда рдЕрдкрдбреЗрдЯ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ ImageBitmap рдФрд░ OffscreenCanvas рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреА рдкреНрд░рдЧрддрд┐ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ред

рд▓рдШреБ рдЕрджреНрдпрддрди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдкреНрддрд╛рд╣ рдкрд╣рд▓реЗ рдЬрд╛рдВрдЪ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдерд╛
рдореИрдВрдиреЗ рдПрдХ рд╡реЗрдм рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рдкрд╛рда рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд┐рдпрд╛ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рд╕реАрдзреЗ рдЖрдЧреЗ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛:

// render-text-worker.js
onmessage = function(event) {
    const textLines = event.data.text.split(/\n/);
    const index = event.data.index;
    const offscreen = new OffscreenCanvas(150,45);
    const ctx = offscreen.getContext("2d");
    ctx.font = "15px monospace";
    textLines.forEach((text, index) => {
        ctx.fillText(text, 0, 15 + index * 15)
    })
    const imageBitmap = offscreen.transferToImageBitmap();
    postMessage({imageBitmap, index});
};
// index.js
const worker = new Worker("render-text-worker.js");
const callbacks ={}
function getLabelTexture(index, text, callback) {
  callbacks[index] = callback
  worker.postMessage({ index, text });
}
worker.onmessage = function({ data }) {
  const callback = callbacks[data.index]
  callback(PIXI.Texture.from(data.imageBitmap));
}

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

рд╣рдорд╛рд░реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдмрд▓ рдХреА рдкрд╛рда рд▓рдВрдмрд╛рдИ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред

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

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

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

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

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

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

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