Как получить цветовую шкалу, представляющую отраженный свет

Я получил это замечательное изображение ниже со страницы Википедии о додекаэдрах . На нем показан тетроид, медленно вращающийся. Если внимательно присмотреться, то видно, что предполагается наличие источника света где-то за пределами экрана. Если лицо отражает больше света обратно к наблюдателю, оно кажется ярче, а если оно отражает меньше света назад, оно кажется темнее. У меня есть идея, как получить метрику количества света, отражаемого лицом при определенном повороте. Я также могу масштабировать метрику до значения от 0 до 255 (что предполагает большинство цветовых шкал). Однако как мне получить фактические значения rgb, которые выглядят как яркий отражающий синий цвет, когда метрика высокая, и темно-синий, когда метрика низкая?

введите описание изображения здесь

Ответы (1)

Хорошо, я обнаружил, что цветовая шкала HSL предназначена именно для этого (где буква «L» означает яркость). Итак, я просто делаю линейную шкалу L с моим углом лица, сохраняя H и S постоянными. Вот код Python для этого преобразования:

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))

Это приводит к чему-то вроде этого -

введите описание изображения здесь