Hay fórmulas y procesos para convertir un espacio UV en un espacio XYZ (encontré esto buscando por ahí):


Pero como después de probarlo así a lo bruto, los resultados no son lo que buscamos, se me ocurren dos maneras distintas (que funcionan):
1.- Ray casting.
A) no sé si conoces el concepto de Ray casting. Básicamente, tienes la esfera y un punto. Pues bien, Maxscript tiene funciones para lanzar un rayo desde la posición del punto a la de la esfera. La función ray necesita la posición inicial del objeto, y una dirección (que obtenemos restando las posiciones del punto y de la esfera):
Código:
oray = ray p1.position (SPH, position - P1.position)
B) ¿Qué hacemos con esto? Usar la función intersectray: dándole como argumentos de entrada la esfera y el rayo, te devuelve la posición en que ese rayo intersecta la esfera:
Código:
ointersect = intersectray SPH oray
C) y una de las propiedades de intersectray es .pos, que es la posición que buscas:
Código:
p2.position = ointersect, pos
Esto puedes ponerlo dentro de un script controller en p2, que es el punto que quieres que esté siempre sobre la superficie de la esfera. No olvides poner p1 y SPH (esfera) como variables (nodo, por ejemplo), porque de lo contrario la posición no se actualizara en tiempo real.
2.- Look At.
Esto es mucho más sencillo: si tienes una esfera de radio x, crea un hueso de esa longitud, y hazle un Look At al punto que vas a mover por ahí. Coloca el punto que quieres que esté sobre la esfera a esa distancia x del centro, y vincúlalo al hueso, o usa un position constraint al nub que se creó (así no tienes posible problemas por la torsión del hueso derivados del upnode).