_raycastObject(obj, raycaster) {
    if (obj.visible) {
      singletonIntersects.length = 0
      let origSide = null
      const raycastSide = this.raycastSide
      if (raycastSide != null) {
        origSide = obj.material.side
        obj.material.side = raycastSide
      }
      obj.raycast(raycaster, singletonIntersects)
      if (origSide !== null) {
        obj.material.side = origSide
      }
      if (singletonIntersects.length) {
        singletonIntersects.sort(ascDistanceSort)
        return singletonIntersects.slice()
      }
    }
    return null
  }
Custom optimized raycast that, unlike Raycaster.intersectObject(), avoids creating a
new array unless there are actually hits. It also supports the custom `raycastSide`
override property, hit on sides other than the material's configured `side`.
@protected