Buenas,
Si os fijáis, cuando iluminamos una escena, los objetos que tienen reflexión parecen igualmente reflexivos tanto por las zonas donde incide la luz como por las zonas que están en penumbra. Esto no queda muy realista, ya que donde la luz no llega no debería de apreciarse el reflejo tan drásticamente como en las zonas donde la luz impacta directamente.
He creado un sencillo shader para poder controlar esto de forma muy fácil, y que permita añadir más realismo a nuestras escenas.
No es un shader físicamente correcto, ya que un objeto es igualmente reflexivo en todo su área, independientemente de donde le incida la luz. La diferencia es la propia luz, que es la que nos deja ver el reflejo o no.
Por eso, este shader falsea la realidad para lograr este efecto, pero el shader en si no es físicamente realista. Pero bueno, lo que importa es que cumple su cometido


Toda la parte derecha de la esfera está en penumbra, ya que la luz solo viene de un spot colocado a en la parte izquierda. Sin embargo la reflexión es igual en toda las partes de la esfera. Esto no es correcto.

Utilizando este shader, ya podemos jugar con la cantidad de reflexión que tiene la parte en penumbra.
En este caso, le estoy diciendo que la parte en penumbra no sea nada reflexiva.

Aquí un término medio. Ya empieza a parecer más realista.

Aquí la construcción del shader. Muy sencillo y útil.
Desde mi blog os podéis descargar la escena de ejemplo.
xuanprada.net