code: function handleMesh (mesh, gltf, ctx, renderer) {
    return mesh.primitives.map((primitive) => {
      const geometryCmp = renderer.geometry(
        handlePrimitive(primitive, gltf, ctx, renderer)
      )
      const materialCmp =
        primitive.material !== undefined
          ? renderer.material(
            handleMaterial(
              gltf.materials[primitive.material],
              gltf,
              ctx,
              renderer
            )
          )
          : renderer.material()
  
      const components = [
        geometryCmp,
        materialCmp
      ]
  
      // Create morph
      if (primitive.targets) {
        let sources = {}
        const targets = primitive.targets.reduce((targets, target) => {
          const targetKeys = Object.keys(target)
  
          targetKeys.forEach(targetKey => {
            const targetName = PEX_ATTRIBUTE_NAME_MAP[targetKey] || targetKey
            targets[targetName] = targets[targetName] || []
  
            const accessor = getAccessor(gltf.accessors[target[targetKey]], gltf.bufferViews)
  
            targets[targetName].push(accessor._data)
  
            if (!sources[targetName]) {
              const sourceAccessor = getAccessor(gltf.accessors[primitive.attributes[targetKey]], gltf.bufferViews)
              sources[targetName] = sourceAccessor._data
            }
          })
          return targets
        }, {})
  
        const morphCmp = renderer.morph({
          sources,
          targets,
          weights: mesh.weights
        })
        components.push(morphCmp)
      }
  
      return components
    })
  }
docs: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/schema/mesh.schema.json