_getGeometryBoundingSphere() {
    const geometry = this.getGeometry()
    if (geometry) {
      let geomSphere = geometry.boundingSphere
      let geomSphereChanged = false
      if (geomSphere) {
        if (geometry.isBufferGeometry) {
          // For a BufferGeometry we can look at the `position` attribute's `version` (incremented
          // when the user sets `geom.needsUpdate = true`) to detect the need for bounds recalc
          const posAttr = geometry.attributes.position
          if (posAttr && geomSphere._posAttrVersion !== posAttr.version) {
            geometry.computeBoundingSphere()
            geomSphere._posAttrVersion = posAttr.version
            geomSphereChanged = true
          }
        } else {
          // For a non-buffer Geometry (not recommended!) users will have to manually call
          // `geom.computeBoundingSphere()` after changing its vertices, and we'll do a brute force
          // check for changes to the sphere's properties
          if (!geometry._lastBoundingSphere || !geomSphere.equals(geometry._lastBoundingSphere)) {
            geometry._lastBoundingSphere = geomSphere.clone()
            geomSphereChanged = true
          }
        }
      } else {
        geometry.computeBoundingSphere()
        geomSphere = geometry.boundingSphere
        geomSphereChanged = true
      }
      if (geomSphereChanged) {
        geomSphere.version = ++_geometrySphereVersion
      }
      return geomSphere
    } else {
      return null
    }
  }
Ensure the object's geometry, if any, has an up-to-date bounding Sphere, and return that Sphere.
The returned Sphere will be assigned a unique `version` property when it is modified, which can
be used elsewhere for tracking changes.
@private