Three.js: рдмреЗрд╕рд┐рд╕рдЯреЗрдХреНрдЪрд░ рд▓реЛрдбрд░: рдЕрдЧрд▓реЗ рдЪрд░рдг

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдордИ 2019  ┬╖  60рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mrdoob/three.js

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

  • [x] рдХреЛрдб рдореЗрдВ рд╢реЗрд╖ TODO рдХреЛ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ
  • [x] рдПрд╕реНрд▓рд┐рдВрдЯ рдлрд┐рдХреНрд╕ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
  • [x] рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬреЛрдбрд╝реЗрдВ
  • [x] рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝реЗрдВ
  • [x] setMaxWorkers() рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ
  • [x] рдорд┐рдкрдореИрдкреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
  • [ ] рдЖрдИрдУрдПрд╕ рдореЗрдВ рдорд┐рдкрдореИрдк рд╕рдорд░реНрдерди рдХреЛ рдареАрдХ рдХрд░реЗрдВ
  • [ ] @austinEng . рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рдмреВрдЯрд╕реНрдЯреНрд░реИрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрдзрд╛рд░ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ рдХреЛ рдкреБрди: рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ
  • [] load() (рдЕрд▓реНрдлрд╛ рдХреЗ рдмрд┐рдирд╛?)
  • [ ] рдЕрд▓реНрдлрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
  • [ ] рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
  • [x] ES рдореЙрдбреНрдпреВрд▓ рдЬреЛрдбрд╝реЗрдВ
Enhancement Loaders

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

рдпрд╣ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб (рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ) рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ рдореЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЗрдПрд╕ рдореЗрдВ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:

var mipWidth = basisFile.getImageWidth( 0, mip );
var mipHeight = basisFile.getImageHeight( 0, mip );
var mipSize = basisFile.getImageTranscodedSizeInBytes( 0, mip, config.format );

if ( config.pvrtcSupported ) {

    // Basis incorrectly computes mip sizes for PVRTC, let's fix them up using the spec:
    // https://www.khronos.org/registry/OpenGL/extensions/IMG/IMG_texture_compression_pvrtc.txt
    mipSize = Math.floor((Math.max(mipWidth, 8) * Math.max(mipHeight, 8) * 4 + 7) / 8);

}

var dst = new Uint8Array( mipSize );

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

рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдХреЛрдб рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рдо рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ texture рд╕реЗ load рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреНрдп рдмрдирд╛рд╡рдЯ рд▓реЛрдбрд░ рдХрд░рддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рд╣рдо рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдмрдирд╛рд╡рдЯ рдирд╣реАрдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЙрд▓рдмреИрдХ рдореЗрдВ material.needsUpdate = true рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдиреАрдореЗрд╢рди рд▓реВрдк рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИ)ред

var material = new XXXMaterial();
textureLoader.load(..., function (texture) {
  material.map = texture;
   // .map is from null to non-null.
   // User needs to call material.needsUpdate = true here if already started animation loop
   // because whether material.map is null or not affects the final shader code.
  material.needsUpdate = true;
});

рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреА рд╣реИ рдХрд┐ рдпрд╣ THREE.CompressedTexture рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдореИрдВ

рдЕрдиреНрдп рд╕рдлрд╛рдИ: рдмрдирд╛рд╡рдЯ рдХреЛ рд╕реМрдВрдкреЗ рдЧрдП рдЧреБрдг рдереЛрдбрд╝реЗ рдордирдорд╛рдиреЗ рд╣реИрдВ (рдмреЗрд╕рд┐рд╕ рдбреЗрдореЛ рд╕реЗ рдмрдЪреЗ рд╣реБрдП), рдЬреИрд╕реЗ flipY=false ред рдФрд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рдПрдХ рдЕрдкреНрд░рдпреБрдХреНрдд startTime рдЪрд░ рд╣реИред

рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рд╣реВрдВ рддреЛ рдорд┐рдкрдореИрдкреНрд╕ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рдпрд╛ рд▓реЛрдбрд░ рдиреЗ рдЕрднреА рддрдХ рдорд┐рдкрдореИрдкреНрд╕ рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ?

рдПрдХ .basis рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдИ рдорд┐рдкрдореИрдк рд╕реНрддрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рдБред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред BasisTextureLoader рдЕрднреА рддрдХ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╣рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ рдХреЗ рдирдП/рдЫреЛрдЯреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рднреА рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: https://github.com/BinomialLLC/basis_universal/pull/7~~ рд╣реЛ рдЧрдпрд╛ред

рд╣рд╛рдБ, рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ рдХреЛ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рдорд┐рдк рд╕реНрддрд░ рдХреЛ levelIndex рд╕реЗ transcodeImage ред
https://github.com/BinomialLLC/basis_universal/blob/master/webgl/transcoder/basis_wrappers.cpp#L197

рдЖрдкрдХреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдЕрдиреНрдп рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ рд▓реЛрдбрд░ рдиреЗ рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдХреГрдкрдпрд╛ TODO рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рд╣рдо рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдорд┐рд╕рд╛рд▓ рдХрд╛рдпрдо рдХреАред #16553 рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреГрдкрдпрд╛ рдмреЗрдЭрд┐рдЭрдХ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдмрдврд╝рд╛рдПрдБ/рдмрджрд▓реЗрдВ рдпрджрд┐ рдпрд╣ рд╡рд┐рд▓рдп рд╣реЛ рдЧрдпрд╛ рд╣реИред

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

https://github.com/mrdoob/three.js/blob/dev/examples/js/loaders/BasisTextureLoader.js#L264 -L273

рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЗрди рд╕рднреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░рдирд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрднреА-рдХрднреА рдЙрд╕ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдЪрд╛рд╣рддрд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рд▓реЛрдбрд░ (рдЬреИрд╕реЗ GLTFLoader) рдмрдирд╛рд╡рдЯ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ material.map (рдЖрдзрд╛рд░ рд░рдВрдЧ) рдХреЗ рд▓рд┐рдП material.aoMap (рдкрд░рд┐рд╡реЗрд╢ рдЕрд╡рд░реЛрдз) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╕рдВрдкреАрдбрд╝рд┐рдд рдкреНрд░рд╛рд░реВрдк рдЪреБрди рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ detectSupport( renderer ) рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:

// Let loader decide, based on device capabilities:
loader.detectSupport( renderer );

// Or, choose a particular format:
loader.setFormat( THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC4 );

рдЗрд╕рдореЗрдВ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛ рд╣реИ - рдЕрдЧрд░ рдореИрдВ рдХрдИ рдмрдирд╛рд╡рдЯ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рд╣рдо рдЙрди рд╕рднреА рдХреЛ рдПрдХ рд╣реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рд╣рдо рдХрдИ рд▓реЛрдбрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореМрдЬреВрджрд╛ рд╡реЗрдм рд╡рд░реНрдХрд░реНрд╕ (рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ) рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред рд╣рдо load() рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдкреНрд░рд╛рд░реВрдк рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╣ TextureLoader рдХреЗ рд╕рд╛рде рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдирд╛ ...

loader.setFormat( THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC4 );
var fooTex = loader.load( 'foo.basis' );

loader.setFormat( THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC1 );
var barTex = loader.load( 'bar.basis' );

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

рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ: http://www.reedbeta.com/blog/understanding-bcn-texture-compression-formats/#comparison -table

рдПрдХ рдФрд░ рдиреЛрдЯ, рдЗрд╕реЗ рдХрд╣реАрдВ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: examples/js/libs/basis рдореЗрдВ рдЬреЗрдПрд╕ рд░реИрдкрд░ рдореЗрдВ рдмреЗрд╕рд┐рд╕ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓реА рдШреЛрд╖рдгрд╛ ( var Module ) рдХреЛ рдХреЗрд╡рд▓ Module рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗрдм рд╡рд░реНрдХрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрд▓рд╕реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рд╕рдВрднрд╡рддрдГ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рддреЛ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдХреЗ рдпрд╛ https://github.com/BinomialLLC/basis_universal/issues/21 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ

рдХреНрдпрд╛ BasisTextureLoader GLTF рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореИрдВрдиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рд╡рдЯ рдХреЛ .basis рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдФрд░ BasisTextureLoader рдХреЛ рдЗрд╕ рддрд░рд╣ рд▓реЛрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ:

var basisLoader = new THREE.BasisTextureLoader();
basisLoader.setTranscoderPath( 'basis/' );
basisLoader.detectSupport( renderer );

THREE.Loader.Handlers.add( /\.basis$/i, basisLoader );

рд▓реЗрдХрд┐рди рдмрдирд╛рд╡рдЯ рдареАрдХ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рдФрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:

[.WebGL-000002B68031CEF0]RENDER WARNING: texture bound to texture unit 1 is not renderable. It maybe non-power-of-2 and have incompatible texture filtering.

@zeux рд╡рд░реНрдгрди рдХреЗ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛

рдореИрдВрдиреЗ рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд┐рдпрд╛ рдФрд░ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐:

  1. glTF рд▓реЛрдбрд░ рдЖрдорддреМрд░ рдкрд░ рдореИрдЧ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЛ LinearMipMapLinearFilter рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ
  2. BasisTextureLoader mipmaps рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛
  3. рд╡реЗрдмрдЬреАрдПрд▓ рдХреЛ рдорд┐рдк рдЪреЗрди рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: - /

@zeux рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ - рдХреЛрд░ glTF рдпреБрдХреНрддрд┐ рдХреЗрд╡рд▓ JPEG рдФрд░ PNG рдмрдирд╛рд╡рдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ (KTX2 рдЖрд╡рд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рд╡рд╣ рддрдВрддреНрд░ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдкреАрдбрд╝рд┐рдд рдмрдирд╛рд╡рдЯ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдбреНрд░рд╛рдлреНрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП https://github.com/KhronasGroup/glTF/pull/1612 рджреЗрдЦреЗрдВ (рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рджреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВ) рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, BasisTextureLoader рдореЗрдВ рдорд┐рдкрдореИрдк рд╕рдорд░реНрдерди рдХреА рдХрдореА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрднреА рддрдХ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдП рд╣реИрдВред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ рдХреЛ рд╕реНрд╡рдпрдВ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдорд┐рдкрдореИрдк рд╕рдорд░реНрдерди рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрдорд┐рдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреАрдЖрд░ - рдЗрд╕рдХреЗ рд╕рд╛рде рдЬрдм рддрдХ рдЖрдк -mipmap рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдмрдирд╛рд╡рдЯ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ glTF рд▓реЛрдбрд░ рддрдм рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдЖрдк рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рд▓реЛрдбрд░ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдХрдо рд╕реЗ рдХрдо рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ред рдореИрдВ рдЗрд╕реЗ рдореЛрдмрд╛рдЗрд▓ (рдЖрдИрдлреЛрди рдпрд╛ рдПрдВрдбреНрд░реЙрдЗрдб) рдкрд░ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдХрддрд╛рдИ рдШрди рдХреЗ рд╕рд╛рде рддреАрдиjs.org рдЙрджрд╛рд╣рд░рдг рдЖрдИрдлреЛрди рдкрд░ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдореЛрдмрд╛рдЗрд▓ (рдЖрдИрдлреЛрди рдпрд╛ рдПрдВрдбреНрд░реЙрдЗрдб) рдкрд░ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛

рдЖрдзрд╛рд░ рдбреЙрдХреНрд╕ рд╕реЗ -

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, iOS рдкрд░, рдЖрдк PVRTC1 рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 2 рдмрдирд╛рд╡рдЯ рдЖрдпрд╛рдореЛрдВ рдХреА рд╡рд░реНрдЧ рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ Basis рдЖрдЬ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╕реАрдорд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред (рд╣рдо рдЬрд▓реНрдж рд╣реА 2 PVRTC1 рдмрдирд╛рд╡рдЯ рдХреА рдмрдбрд╝реА рд╢рдХреНрддрд┐ рдореЗрдВ рдЫреЛрдЯреЗ рдЧреИрд░-рдкрд╛рдЙ 2 рдмрдирд╛рд╡рдЯ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВрдЧреЗред)

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

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

https://github.com/mrdoob/three.js/pull/16675 рдкрд░ BasisTextureLoader рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЕрдкрдбреЗрдЯ рдЖ рд░рд╣реЗ рд╣реИрдВ

рд╣рдореЗрдВ рд╢рд╛рдпрдж рдпрд╣ рднреА рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрд▓реНрдлрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ... рдЖрдзрд╛рд░ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдХреБрдЫ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ (https://github.com/BinomialLLC/basis_universal/#how-to-use-the-system) рд▓реЗрдХрд┐рди рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдбрд┐рд╡рд╛рдЗрд╕ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд┐рдВрдЧ рдЖрдЙрдЯрдкреБрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

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

рдЕрдм рддрдХ рдПрдкреАрдЖрдИ TextureLoader рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ .basis рдмрдирд╛рд╡рдЯ рд╕реЗ рдХрдИ рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдХрд┐рдП рдЧрдП рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдмрджрд▓рдиреЗ (рдпрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдПрдкреАрдЖрдИ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

https://github.com/mrdoob/three.js/pull/16686 рдореЗрдВ рд╕реНрдХреНрд╡рд╛рдпрд░ рдкрд╛рд╡рд░-рдСрдл-рдЯреВ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдЖрдИрдУрдПрд╕ рдкрд░ рдбреЗрдореЛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд┐рдкрдореИрдкреНрд╕ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

INVALID_VALUE:рд╕рдВрдкреАрдбрд╝рд┐рддTexImage2D: ArrayBufferView рдХреА рд▓рдВрдмрд╛рдИ рдЖрдпрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рд╣рдореЗрдВ рдкреАрд╡реАрдЖрд░рдЯреАрд╕реА рдХреЗ рд╕рд╛рде рдорд┐рдкрдореИрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рдорд┐рдкреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рд╣реЛ рд░рд╣рд╛ рд╣реИ?

рдореИрдВрдиреЗ рдХреМрди рд╕реЗ рдорд┐рдкреНрд╕ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдбреАрдмрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐ рддреАрди рдмрд╛рд░ рдореБрджреНрд░рд┐рдд рд╣реЛрддреА рд╣реИ, рдФрд░ рдкрд┐рдЫрд▓реЗ рддреАрди рдореЗрдВ рд╕рднреА рд╕рдорд╛рди рдмрдлрд░ рдЖрдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред рдореИрдВ

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдмреЗрд╕рд┐рд╕ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рдорд┐рдкреНрд╕ рдХреЗ рдЖрдХрд╛рд░ (рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ) рдХреА рд╕рд╣реА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред PVRTC1 4bpp рдХреЗ рд▓рд┐рдП, рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдЖрдпрд╛рдо рдХреЛ 8 рддрдХ рдЧреЛрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП 4x4, 2x2 рдФрд░ 1x1 рдХрд╛ рдЖрдХрд╛рд░ 8x8 рдХреЗ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмреЗрд╕рд┐рд╕ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ рд░рд╛рдЙрдВрдб 4x4 рд╣реИред 8x8, 4x4, 2x2, 1x1 рдЖрдХрд╛рд░ рдХреА рд╕рднреА рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ 32 рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП; рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 4x4 рдФрд░ рдЙрд╕рд╕реЗ рдиреАрдЪреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╕рд┐рд╕ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл 1 4x4 рдмреНрд▓реЙрдХ рд╣реИ рдЬреЛ 8 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ рдФрд░ рдЖрдкрдХреЛ 32 рдХреЗ рдмрдЬрд╛рдп 8 рдмрд╛рдЗрдЯреНрд╕ рджреЗрддрд╛ рд╣реИред @richgel999

рдЫрд╡рд┐ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╕реВрддреНрд░ рдпрд╣рд╛рдБ рд╣реИ: https://www.khronos.org/registry/OpenGL/extensions/IMG/IMG_texture_compression_pvrtc.txt :

   For PVRTC 4BPP formats the imageSize is calculated as:
     ( max(width, 8) * max(height, 8) * 4 + 7) / 8

рдпрд╣ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб (рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ) рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ рдореЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЗрдПрд╕ рдореЗрдВ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:

var mipWidth = basisFile.getImageWidth( 0, mip );
var mipHeight = basisFile.getImageHeight( 0, mip );
var mipSize = basisFile.getImageTranscodedSizeInBytes( 0, mip, config.format );

if ( config.pvrtcSupported ) {

    // Basis incorrectly computes mip sizes for PVRTC, let's fix them up using the spec:
    // https://www.khronos.org/registry/OpenGL/extensions/IMG/IMG_texture_compression_pvrtc.txt
    mipSize = Math.floor((Math.max(mipWidth, 8) * Math.max(mipHeight, 8) * 4 + 7) / 8);

}

var dst = new Uint8Array( mipSize );

рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЗрд╕ ASAP рдХреЛ рдареАрдХ рдХрд░ рджреВрдВрдЧрд╛ред

PVRTC1 mipmap рд╕рд╛рдЗрдЬ рдмрдЧ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдордиреЗ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдЫреЛрдЯреЗ (8 рдкрд┐рдХреНрд╕реЗрд▓ рд╕реЗ рдХрдо рдЪреМрдбрд╝рд╛/рд▓рдВрдмрд╛) рдорд┐рдкреНрд╕ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░ рджреЗред рдФрд░ рд╣рдордиреЗ рд╕рд╣реА рдЖрдХрд╛рд░ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реИрдкрд░ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ред рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдареАрдХ рдХрд░ рджреВрдВрдЧрд╛ред

@donmccurdy рдХреНрдпрд╛ рдЖрдк рдЯреВрдбреВ рд╕реВрдЪреА рдореЗрдВ " texture load рд╡рд┐рдзрд┐ рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ? (рдЬреИрд╕рд╛ рдХрд┐ рддрд╛рдХрд╛рд╣рд┐рд░реЛрдХреНрд╕ рдиреЗ рдКрдкрд░ рд╕реБрдЭрд╛рдпрд╛ рд╣реИ)

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

@richgel999 рдзрдиреНрдпрд╡рд╛рдж! рдореБрдЭреЗ WASM рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ https://github.com/BinomialLLC/basis_universal/commit/ab722fa2e18536f9a1d5f33814f3088232446d52 рдХреЗрд╡рд▓ webgl/transcoder/basis_wrappers.cpp рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред MacOS рдкрд░ рд╕рдВрдХрд▓рди:

$ emcmake cmake ../
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/donmccurdy/Documents/Projects/basis_universal/webgl/transcoder/build

$ make
[ 33%] Linking CXX executable basis_transcoder.js
Traceback (most recent call last):
  File "/Users/donmccurdy/Documents/Projects/emsdk/emscripten/1.37.22/em++", line 16, in <module>
    emcc.run()
  File "/Users/donmccurdy/Documents/Projects/emsdk/emscripten/1.37.22/emcc.py", line 882, in run
    exec 'shared.Settings.' + key + ' = ' + value in globals(), locals()
  File "<string>", line 1, in <module>
NameError: name 'emmalloc' is not defined
make[2]: *** [basis_transcoder.js] Error 1
make[1]: *** [CMakeFiles/basis_transcoder.js.dir/all] Error 2
make: *** [all] Error 2

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рд╣рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд░ рдХреЛ PavingStones.basis рдмрдирд╛рд╡рдЯ рдХреЛ рдЗрд╕ рдПрдХ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдорд┐рдкрдореИрдкреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

PavingStones.basis.zip

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдУрд╣, рдпрд╣ https://github.com/BinomialLLC/basis_universal/pull/27 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

@donmccurdy рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП https://github.com/BinomialLLC/basis_universal/pull/27 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЬрд▓реНрдж рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрдкрдХрд╛ рдПрдорд╕реНрдХреНрд░рд┐рдкреНрдЯрди рд╕рдВрд╕реНрдХрд░рдг рдПрдореНрдорд╛рд▓реЛрдХ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдлрд╛рдЗрд▓реЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рддреАрди.рдЬреЗрдПрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 1.38.31 рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рд╣реБрдИ рдЬрдм рдореИрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рдЖрдзрд╛рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ:

Uncaught (in promise) DOMException: Failed to execute 'postMessage' on 'Worker': ArrayBuffer at index 0 is already neutered.

рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ load рд╡рд┐рдзрд┐ рдХреЛ 2 рдмрд╛рд░ рдХреЙрд▓ рдХрд░реЗрдВ рдЬреИрд╕реЗ:

loader.load( 'textures/compressed/PavingStones.basis');
loader.load( 'textures/compressed/PavingStones.basis');

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

loader.load( 'textures/compressed/PavingStones.basis?v=1' );
loader.load( 'textures/compressed/PavingStones.basis?v=2' );

@donmccurdy рдЕрд▓реНрдлрд╛ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдРрд╕рд╛ рдХреНрдпрд╛ рд╣реИ:

load(...) // as usual
//then :  
loader.getRGBTexture() //return by the load function as usual
loader.getAlphaTexture() //can be use as alphaMap

рдЕрд▓реНрдлрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдорд┐рдкрдореИрдк рдХреЗ рдореЙрдбрд▓ рдкрд░ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
loader.generateAlpha = true //default

@Makio64 рдРрд╕рд╛ рд╣реА рдХреБрдЫ! рдЕрдзрд┐рдХрд╛рдВрд╢ рддреАрдиj рд▓реЛрдбрд░ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдирд╣реАрдВ рд╣реИрдВ (рдПрдХ рдПрдХрд▓ рд▓реЛрдбрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрдИ рдЪреАрдЬреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ) рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

const [ map ]           = loader.loadRGB( 'foo.basis', { ...options } );
const [ map, alphaMap ] = loader.loadRGBA( 'bar.basis', { ...options } );

^ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрд▓реНрдлрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдкрд░ рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╛ рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдирдП рддрд░реАрдХреЛрдВ рдкрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

loader.loadRGBA( 'bar.basis', { ...options }, ( map, alphaMap ) => {
  // ...
} );

рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рдзрд╛рди рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдЕрдиреНрдп рддреАрдиj рдХреЗ рд▓реЛрдбрд░ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВ рдХреЗрд╡рд▓ ренремрео рдЧреБрдгрд╛ релрезреи рдпрд╛ рейреорек рдЧреБрдгрд╛ реирелрем рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдмрдирд╛рд╡рдЯ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВред рдХреЛрдИ рдЕрдиреНрдп рд╕рдВрдХрд▓реНрдк рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рддреАрди.рдЬреЗрдПрд╕ рдФрд░ рдмреЗрд╕рд┐рд╕рдЯреЗрдХреНрдЪрд░ рд▓реЛрдбрд░ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:
"рдЯреЗрдХреНрд╕рдЪрд░ рдпреВрдирд┐рдЯ 0 рд╕реЗ рдмрдВрдзреА рдмрдирд╛рд╡рдЯ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╢рд╛рдпрдж рдиреЙрди-рдкрд╛рд╡рд░-рдСрдлрд╝-2 рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЕрд╕рдВрдЧрдд рдмрдирд╛рд╡рдЯ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд╣реИред"

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

@donmccurdy рдХреНрдпрд╛ рдмреЗрд╕рд┐рд╕ рдЕрд▓реНрдлрд╛ рд╕рдкреЛрд░реНрдЯ рдЬрд▓реНрдж рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрдХ рдмрдЧ рдорд┐рд▓рд╛: рдХреЗрд╡рд▓ рдЖрдИрдУрдПрд╕ рдкрд░, рдмрдирд╛рд╡рдЯ-рдЬреНрдпрд╛рдорд┐рддрд┐ рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рдПрдХ рдЕрдЬреАрдм "рдмрдирд╛рд╡рдЯ рдЪрдордХ" рдкреНрд░рднрд╛рд╡ рд╣реИ: # 17597

рдХреНрдпрд╛ рдХрд┐рд╕реА рдФрд░ рдиреЗ рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдИрдУрдПрд╕ рдкрд░ рдпрд╣ рдкреАрд╡реАрдЖрд░рдЯреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдХреНрдпрд╛ рдпрд╣ рдХрд┐рд╕реА рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг (r108) рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ?
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк https://github.com/BinomialLLC/basis_universal рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдХреНрдпрд╛ рдпрд╣ рдХрд┐рд╕реА рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг (r108) рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ?

рдореИрдВрдиреЗ рдЬреЛ рдмрдЧ рджрд╛рдпрд░ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ r108 рдХреЗ рд▓рд┐рдП рд╣реИред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк https://github.com/BinomialLLC/basis_universal рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдмрд╕ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдерд╛: https://github.com/BinomialLLC/basis_universal/issues/78

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрдХ рдмрдЧ рдорд┐рд▓рд╛: рдХреЗрд╡рд▓ рдЖрдИрдУрдПрд╕ рдкрд░, рдмрдирд╛рд╡рдЯ-рдЬреНрдпрд╛рдорд┐рддрд┐ рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рдПрдХ рдЕрдЬреАрдм "рдмрдирд╛рд╡рдЯ рдЪрдордХ" рдкреНрд░рднрд╛рд╡ рд╣реИ: # 17597

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

рдореИрдВрдиреЗ https://github.com/BinomialLLC/basis_universal/issues/78#issuecomment -536159690 рдкрд░ рдПрдХ рдЕрдкрдбреЗрдЯ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ - рд╡рд╣рд╛рдВ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдпрд╣ рдиреЙрди-рд╕реНрдкрд┐рдирд┐рдВрдЧ рдХреНрдпреВрдм рдХреЗ рд╕рд╛рде рд░реИрдкрд┐рдВрдЧ-рдЕрд░рд╛рдЙрдВрдб рд╕рдорд╕реНрдпрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рдПрдХ рдФрд░ рдмрдЧ рдорд┐рд▓рд╛ (рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдЕрд╕рдВрдмрдВрдзрд┐рдд): https://github.com/mrdoob/three.js/pull/17546#commitcomment -35275564

рдореБрдЭреЗ рдПрдХ рдФрд░ рдмрдЧ рдорд┐рд▓рд╛ (рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдЕрд╕рдВрдмрдВрдзрд┐рдд): # 17546 (рдЯрд┐рдкреНрдкрдгреА)

#резренремреиреи рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ред

mipmaps рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдХреНрдпрд╛ .basis рдлрд╝рд╛рдЗрд▓ рдореЗрдВ mipmaps рдХреЛ рдПрдореНрдмреЗрдб рдХрд┐рдП рдмрд┐рдирд╛ рдЖрдзрд╛рд░ рдмрдирд╛рд╡рдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ (рдПрдХ .gltf рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рд╕рдВрджрд░реНрднрд┐рдд) рдХреЛ рдареАрдХ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

рдЬрдм рдореИрдВ -mipmap рд╕рд╛рде .basis рдлрд╝рд╛рдЗрд▓ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдкреНрд░реЛрдкрд▓рд░реА рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ .basis рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдлрд╛рдЗрд▓ рдЬреЛрдбрд╝рддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ -mipmap рдмрд┐рдирд╛ .basis рдлрд╝рд╛рдЗрд▓ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ рд╡рд┐рдХрд▓реНрдк, рдпрд╣ рдХреЗрд╡рд▓ рддреАрдиj рдХреЗ рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рд▓реЗ рд░рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

mipmaps рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдХреНрдпрд╛ .basis рдлрд╝рд╛рдЗрд▓ рдореЗрдВ mipmaps рдХреЛ рдПрдореНрдмреЗрдб рдХрд┐рдП рдмрд┐рдирд╛ рдЖрдзрд╛рд░ рдмрдирд╛рд╡рдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ (рдПрдХ .gltf рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рд╕рдВрджрд░реНрднрд┐рдд) рдХреЛ рдареАрдХ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

рдЬрдм рдореИрдВ -mipmap рд╕рд╛рде .basis рдлрд╝рд╛рдЗрд▓ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдкреНрд░реЛрдкрд▓рд░реА рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ .basis рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдлрд╛рдЗрд▓ рдЬреЛрдбрд╝рддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ -mipmap рдмрд┐рдирд╛ .basis рдлрд╝рд╛рдЗрд▓ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ рд╡рд┐рдХрд▓реНрдк, рдпрд╣ рдХреЗрд╡рд▓ рддреАрдиj рдХреЗ рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рд▓реЗ рд░рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЖрдк рдмрдирд╛рд╡рдЯ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рдкрдореИрдкреНрд╕ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
https://discourse.threejs.org/t/compressed-texture-workflow-gltf-basis/10039/12?u=johannesdeml
https://github.com/JohannesDeml/three.js/commit/909d9cc6dc9192f398df7455f52b7e71e3bf61e2

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ BasisTextureLoader рдореЗрдВ рдЕрдм рднреА рд╕рдорд╛рди рдХреЛрдб рд╣реИ (min/magFilter = LinearFilter рд╕реЗрдЯ рдХрд░рдирд╛) рдЬрдм рдХреЗрд╡рд▓ 1 рдорд┐рдкрдореИрдк рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ (https://github.com/mrdoob/three.js /blob/e66e86901abd84ffc260fea9665170631a2b0493/examples/js/loaders/BasisTextureLoader.js#L170-L171) - рдЬреЛ basisu рдмрд┐рдирд╛ -mipmap рд╡рд┐рдХрд▓реНрдк рдЬрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрднреА рднреА рдХрд╛рд▓рд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдкрд┐рдЫрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рдХрд░ рд░рд╣рд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдореЗрдВ рдЖрдзрд╛рд░ рдерд╛ .ktx2 рдмрдЬрд╛рдп рдХрдВрдЯреЗрдирд░ .basis ...

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

рдЬрд╝рд░реВрд░, рдФрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

body_green.base.zip

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

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

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

рдХреНрдпрд╛ jpg/png рдХреЗ рдмрдЬрд╛рдп рдЖрдзрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрд╢рд╛ рдРрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИ?

рдПрдХ рдХреНрдпреВрдм рдореИрдк рдХреЗ рд▓рд┐рдП рдлреЗрд╕рд▓рд┐рд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ 6 рдмрдирд╛рд╡рдЯ рдХреЛ рдПрдХ рдЖрдзрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреИрдХ рдХрд░рдиреЗ рдХреЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╛рд░реВрдк рд░реАрдбрдореЗ рдкрд░ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди/рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдкреАрдПрдордЖрд░рдИрдПрдо рдЬрдирд░реЗрдЯрд░ рдпрд╣рд╛рдВ рдмреЗрдХрд╛рд░ рд╣реИ рдФрд░ рдЖрдзрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрддреНрдкрдиреНрди рдкреНрд░рддреНрдпреЗрдХ рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рдорд┐рдкрдореИрдкреНрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

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

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

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

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

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

рдмреЗрд╕рд┐рд╕ рдПрдХ рдХреНрдпреВрдмрдореИрдк рдХреЗ рд▓рд┐рдП рд╕рднреА 6 рдЯреЗрдХреНрд╕рдЪрд░реНрд╕ рдХреЛ рд╕рд┐рдВрдЧрд▓ рдмреЗрд╕рд┐рд╕ рдлрд╛рдЗрд▓ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред KTX2 рдмреЗрд╕рд┐рд╕ рд╕рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдХрдИ рдЯреЗрдХреНрд╕рдЪрд░ рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рд╕рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреНрдпреВрдмрдореИрдкреНрд╕ рдХреЛ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдПрдХ рдлрд╛рдЗрд▓ afaikред

рдереНрд░реАрдЬреЗрдПрд╕ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж 6 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдзрд╛рд░ рдлрд╝рд╛рдЗрд▓реЗрдВ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдЖрдзрд╛рд░ рд▓реЛрдбрд░ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде KTX2 рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

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

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

https://github.com/mrdoob/three.js/pull/18490 рдХреЗ рд╕рд╛рде рдПрдХ KTX2 рд▓реЛрдбрд░ рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИ

рдЖрдзрд╛рд░ рдХреЗ рд▓рд┐рдП README рдХреЗ тАЛтАЛрдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг (UASTC рд╕реЗ рдкрд╣рд▓реЗ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рд╡рд░реНрддрдорд╛рди README рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ) рдПрдХрд▓ рдЖрдзрд╛рд░ рдлрд╝рд╛рдЗрд▓ рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рдХрдИ рдмрдирд╛рд╡рдЯ рдкреИрдХрд┐рдВрдЧ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:

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

рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрддрд╛ рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдВ рдФрд░ рди рд╣реА рдореЗрд░реЗ рдкрд╛рд╕ рдлрд┐рд▓рд╣рд╛рд▓ рдЦрд╛рд▓реА рд╕рдордп рд╣реИред рд╢рд╛рдпрдж рдПрдХ рдмрд╛рд░ рдЬрдм рдпрд╣ рдореБрджреНрджрд╛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ рдФрд░ KTX2 рд▓реЛрдбрд░ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд/рдкреИрдХ рдХреНрдпреВрдмрдореИрдк рд╕рдорд░реНрдерди рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рддрдм рддрдХ рдЦрд╛рд▓реА рд╕рдордп рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдкреАрдЖрд░ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА :)

рд╣рд╛рдп рд╕рдм, рдореБрдЭреЗ рдЖрдИрдУрдПрд╕ рдкрд░ рдПрдХ рдЖрдВрддрд░рд╛рдпрд┐рдХ рдореБрджреНрджрд╛ рдорд┐рд▓рд╛ рд╣реИ (aawww maaaan!)
рдореВрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рд╡рдЯ рдХрднреА-рдХрднреА рдареАрдХ рд▓реЛрдб рд╣реЛрддреА рд╣реИ, рдХрднреА-рдХрднреА рдпрд╣ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЛрдб рдкреНрд░рдЧрддрд┐ 100% рд╣реИ, рдЗрд╕рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг (https://threejs.org/examples/?q=basis#webgl_loader_texture_basis) рдФрд░ рдореЗрд░реЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рджреЛрдиреЛрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдореЗрд░реЗ iPhone X рдкрд░, Safari рдкрд░, рдмрдирд╛рд╡рдЯ рдХрднреА-рдХрднреА рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рдФрд░ рдХрднреА-рдХрднреА рдирд╣реАрдВред
рдЖрдИрдлреЛрди 6, рд╕рдлрд╛рд░реА рдкрд░, рдпрд╣ рдХрднреА рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдмрд╛рдХреА рд╕рдм рдареАрдХ рд▓рдЧ рд░рд╣реЗ рд╣реИрдВред
рдпрд╣ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

[рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ] рдореИрдХ рдУрдПрд╕ рдкрд░ рд╕рдлрд╛рд░реА рдкрд░ рдЕрднреА рднреА рд╡рд╣реА рдореБрджреНрджрд╛ рдорд┐рд▓рд╛ рд╣реИ, рдЕрднреА рднреА рд░реБрдХ-рд░реБрдХ рдХрд░

@igghera рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдпрд╣ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓рдиреЗ рдХрд╛ рдорди рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ? рдзрдиреНрдпрд╡рд╛рдж!

BasisTextureLoader рдореЗрдВ 2D рд╕рд░рдгреА рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдХреИрд╕реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдереЛрдбрд╝рд╛ рдЧреМрд░ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рд╣реИред

transcode рдлрд╝рдВрдХреНрд╢рди рдХреЛ basisFile.getNumImages() рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдИ рдЧрдИ рдЧрд┐рдирддреА рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдкрд░ рд▓реВрдк рдореЗрдВ рдмрджрд▓рдирд╛ рд╕реАрдзрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рдж рддреАрди рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реИ:

  1. compressedTexImage3D THREE.WebGLState рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдФрд░ gl.TEXTURE_2D_ARRAY рдкреНрд░рддрд┐ WebGLRenderingContext.compressedTexImage3D рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
  2. рдмреЗрд╕рд┐рд╕ рдХрд╛ рдПрдкреАрдЖрдИ рдкреНрд░рддрд┐ рдЗрдореЗрдЬ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд┐рдкрдореИрдк рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ sampler2DArray рд▓рд┐рдП рдмрд╛рдЗрдВрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реЗ рдЯреЗрдХреНрд╕рдЪрд░ рдмреНрд▓реЙрдм рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ?
  3. CompressedTexture рдХреЛ рдкреНрд░рддрд┐ рдЫрд╡рд┐ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдорд┐рдкрдореИрдкреНрд╕ рдХреЛ рд╕рдВрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред 200 рдбреАрдк рдРрд░реЗ рдЗрдореЗрдЬ рдФрд░ 6 рдорд┐рдкрдореИрдк рд╕реНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ 1200 рдорд┐рдкрдореИрдк рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╣реЛрдВрдЧреА, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж mipmaps рдореЗрдВ CompressedTexture рдПрдХ рд╕реНрдЯреНрд░рд╛рдЗрдбреЗрдб рдРрд░реЗ рдмрди рдЬрд╛рддрд╛ рд╣реИред рдпрд╛ рдХреНрдпрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рд╡реЗрдмрдЬреАрдПрд▓ рдЙрд╕ рд╡рд┐рд╡рд░рдг рдХреЛ рджреВрд░ рдХрд░ рджреЗрддрд╛ рд╣реИ?

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

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

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

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

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

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

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

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