code: def _parse_materials(header, views):
      
      try:
          import PIL.Image
      except ImportError:
          log.warning("unable to load textures without pillow!")
          return None
  
      # load any images
      images = None
      if "images" in header:
          # images are referenced by index
          images = [None] * len(header["images"])
          # loop through images
          for i, img in enumerate(header["images"]):
              # get the bytes representing an image
              blob = views[img["bufferView"]]
              # i.e. 'image/jpeg'
              # mime = img['mimeType']
              try:
                  # load the buffer into a PIL image
                  images[i] = PIL.Image.open(util.wrap_as_stream(blob))
              except BaseException:
                  log.error("failed to load image!", exc_info=True)
  
      # store materials which reference images
      materials = []
      if "materials" in header:
          for mat in header["materials"]:
              # flatten key structure so we can loop it
              loopable = mat.copy()
              # this key stores another dict of crap
              if "pbrMetallicRoughness" in loopable:
                  # add keys of keys to top level dict
                  loopable.update(loopable.pop("pbrMetallicRoughness"))
  
              # save flattened keys we can use for kwargs
              pbr = {}
              for k, v in loopable.items():
                  if not isinstance(v, dict):
                      pbr[k] = v
                  elif "index" in v:
                      # get the index of image for texture
                      idx = header["textures"][v["index"]]["source"]
                      # store the actual image as the value
                      pbr[k] = images[idx]
              # create a PBR material object for the GLTF material
              materials.append(visual.texture.PBRMaterial(**pbr))
  
      return materials
docs: Convert materials and images stored in a GLTF header
      and buffer views to PBRMaterial objects.
  
      Parameters
      ------------
      header : dict
        Contains layout of file
      views : (n,) bytes
        Raw data
  
      Returns
      ------------
      materials : list
        List of trimesh.visual.texture.Material objects