Как узнать место пересечения луча со сферой?
Тривиально: парметризуйте луч, подставьте в уравнение сферы, решите получившееся квадратное уравнение.

Луч:
x = x0 + t*vx
y = y0 + t*vy    (1)
z = z0 + t*zy
Где (x0,y0,z0) - начало луча (камера?), (vx, vy, vz) - направление луча.

Уравнение сферы:
(x-xs)**2 + (y-ys)**2 + (z-zs)**2 = R**2   (2)

Где (xs, ys, zs) -центр сферы, R - радиус.

Подставьте (1) в (2) - получите квадратное уравнение на t. Решите его по школьной формуле и возьмите минимальное положительное t. Подставьте в (1) и получите координаты точки пересечения (и заодно длину луча, если вектор направления нормализован).
Мне нужна функция которая возвращает координаты столкновения луча со сферой
Сразу замечание. Давайте перечислим ситуации которые могут быть.

1) Луч пересекает сферу в 1 точке (касательная). Или луч испускается изнутри сферы.
2) Луч пронизывает сферу в 2 точках (наиболе общий кейс)
3) Луч не попал в сферу.

Наша функция (какая-бы она не была) должна возвращать 3 типа этих результатов. Или просто список от 0 до 2х векторов в пространстве (x,y,z). Я-бы предпочел перечисление из 3х типов результатов. Мне кажется что это достаточно важно.