Cómo obtener una escala de color que represente la luz reflejada

Obtuve esta maravillosa imagen a continuación de la página de Wikipedia sobre Dodecaedros . Muestra un Tetroid girando lentamente. Si observa detenidamente, está claro que se supone que hay una fuente de luz en algún lugar fuera de la pantalla. Si una cara refleja más luz hacia el observador, parece más brillante y si refleja menos luz, parece más oscura. Tengo una idea sobre cómo podría obtener una métrica para la cantidad de luz que refleja una cara en una cierta rotación. También puedo escalar la métrica a un valor entre 0 y 255 (que asumen la mayoría de las escalas de color). Sin embargo, ¿cómo obtengo los valores rgb reales que se ven como un azul brillante y reflectante cuando la métrica es alta y el azul oscuro cuando la métrica es baja?

ingrese la descripción de la imagen aquí

Respuestas (1)

Bien, descubrí que la escala de colores HSL está diseñada exactamente para esto (con la 'L' de luminosidad). Entonces, solo hago la escala L linealmente con el ángulo de mi cara manteniendo constantes H y S. Aquí está el código de Python para hacer esta conversión:

def colorFromAngle2(angle):
   h = 136
   s = 118
   l = 96+64*angle/450
   r, g, b = colorsys.hls_to_rgb(h/255.0, l/255.0, s/255.0)
   r, g, b = [x*255.0 for x in r, g, b]
   return (int(r),int(g),int(b))

Esto lleva a algo como esto:

ingrese la descripción de la imagen aquí