Gltfloader loads a geometry that contains multiple materials, splits it into multiple meshes, and contains a material corresponding to a geometry。

merge multiple geometries of different materials into one geometry, and then export the merged geometry to a file in gltf format.
But use GLTFLoader the file into the scene is still separate. It is not the effect that one geometry has more than one material after merging.

merger function :

function mergeObjectArray(modelArray = []) {
			console.log(1111);
			if (modelArray.length === 0) return
			let cubeMaterial = []
			let MeshUUID = []
			let geometryArray = []
			let mergeName = modelArray[0].name
			
			for (let i = 0; i < modelArray.length; i++) {
				modelArray[i].traverse(child => {
					if (child.isMesh && MeshUUID.indexOf(child.uuid) === -1) {
						geometryArray.push(child.geometry.clone().applyMatrix4(child.matrixWorld))
						MeshUUID.push(child.uuid)
						if(child.material instanceof Array) {
							for (const childKey in child.material) {
								cubeMaterial.push(child.material[childKey])
							}
						} else {

							if(child.geometry.groups.length>0){

								for (let j = 0; j <child.geometry.groups.length ; j++) {
									cubeMaterial.push(child.material)
								}
							}else {
								cubeMaterial.push(child.material)

							}
						}
					}
				})
			}

			// 合并模型
			var merged = BufferGeometryUtils.mergeBufferGeometries(geometryArray, true)

			for (let i = 0; i < modelArray.length; i++) {
				mergeRemove(modelArray[i])
			}



			let singleMerge = new THREE.Mesh(merged, cubeMaterial);
			singleMerge.name = mergeName
			return singleMerge;

		}

After merger:
22

GLTFLOADER :

function loadLeePerrySmith() {
        const loader = new GLTFLoader();
            loader.load( 'models/CUBETTTTTT.gltf', function ( gltf ) {
                modelMesh = gltf.scene.children[ 0 ];
                scene.add( modelMesh );
            } );
    }

After loader:
11
Any advise or guidance very welcome.