Te comento la solución que todavía recuerdo de memoria y, creo, me será la más fácil de explicar. Después haré una búsqueda entre la información que conservo para que veas otras posibilidades.
No se busca una transición suave (tipo fade-in, fade-out) sinó una serie de pasos de luz que mantengan una proporcionalidad entre sí.
La fórmula:
2 ^ (n/r) - 1
n = número de pasos
r = resultado de dividir el número total de pasos / 8
El 8 sale del rango de valores PWM (2^8) y -1 se utiliza para concretar los valores entre 0..255, ya que 2^8 son 256 y este valor queda fuera del rango.
Con esta fórmula podemos crear tablas para 8, 16, 24 y 32 valores o pasos de luz para un PWM de 8 bits.
Ejemplos:
2^(1/1), 2^(2/1).. 2^(8/1) - 8 pasos
2^(1/2), 2^(2/2).. 2^(16/2) 16 pasos
2^(1/3), 2^(2/3).. 2^(24/3) 24 pasos
2^(1/4), 2^(2/4).. 2^(32/4) 32 pasos
Los valores de tabla obtenidos para 16 pasos serían:
0, 1, 2, 3, 5, 7, 10, 15, 22, 31, 44, 63, 90, 127, 180, 255
A mi me resultó muy fácil asimilar este modelo porque es básicamente lo mismo que los valores de exposición (EV) que ya conocía en fotografía, que también se miden en pasos y representan el doble o la mitad que sus pasos adyacentes, en caso de ser un paso completo, o fracciones proporcionales de 1/3, 1/2, 2/3.
Espero haber conseguido explicarme mínimamente.
un saludo
Un paper sobre el tema:
https://tinyurl.com/y5erzxy7