metalness on its own is just black, you need an environment map for it to pick up reflections. you wouldn’t have to do anything other than that, it is not necessary to mutate the gltf data.
What’s the reason for this line? The default material in most glTF files will be THREE.MeshStandardMaterial. For the properties you are using above, I don’t think there is any reason to upgrade it to the more expensive THREE.MeshPhysicalMaterial.
Also, materials do not accept other materials as constructor arguments. The way to do what you’re trying here, if you do need MeshPhysicalMaterial, would be:
const material = new THREE.MeshPhysicalMaterial();
THREE.MeshStandardMaterial.prototype.copy.call(material, mesh.material);
mesh.material = material;
There are a lot of properties that could be used on your original materials. I’d be careful of settings like normalScale unless you’re pretty sure about them!