Gltfpack material update issue

Hi!

I’m loading a GLB model optimized with gltfpack.

I load the model; geometry, animations, etc. everything is fine. But when I try to change the material the mesh appears grey.

This is the way I’m changing it

gltf.scene.traverse( (m) => {
   if (m.type == 'Mesh' || m.type == 'SkinnedMesh') {
      switch (true) {
         case model.name == 'Sofia':
            m.material = SofiaMaterial
            break;
      }
   }
}

This way works with models withouth gltfpack optimization.

Any help?

You probably have configured AlanMaterial in a way which breaks the visual appearance. E.g. when you miss setting vertexColors to true, vertex colors won’t work anymore.

Sorry the issue is with Sofia, not Alan.

No because I use the same material for every model. Just change the map.
image

const uMaterial = new THREE.MeshStandardMaterial({
    metalness: 0.4,
    roughness: 0.8,
    envMapIntensity: 2.5,
    skinning: true,
})
const AlanMaterial = uMaterial.clone()
AlanMaterial.map = imagesLoader('alan_base.jpg', 'sRGB')
const SofiaMaterial = uMaterial.clone()
SofiaMaterial.map = imagesLoader('sofia_base.jpg', 'sRGB')

Alan works, Sofia dont.
Alan glb was directly from blender.
Sofia glb was passed through gltfpack optimization.

By replacing a material, you are discarding a lot of information that was in the original material. I think you will probably need to look at the settings on the original material and see what’s different compared to the material you’re adding.

1 Like

The problem is still relevant. The same problem. Squeezed the glb model into glb using gltfpacker, added the texture. The result is a gray model. Compared all the properties of materials before and after compression, everything is the same

gltfpack does UV quantization (applying offset/scale to textures), or may remove UV coordinates that aren’t used. If you can’t put the texture into the GLB before compressing with gltfpack, you may need to ask on the gltfpack repository for help.

1 Like