Componente especular y fresnel

Holas

Hoy os traigo algo interesante con relación a la componente especular.

Normalmente nosotros definimos la cantidad de especular que va a tener un material y nos quedamos tan anchos. Pero las cosas en la vida real son un poco diferentes, y aquí os traigo una idea que estoy desarrollando partiendo de lo que en su día hicieron los chicos de Valve con su ecuación grafica.

El caso es que una superficie con mucha especular (muy brillante), es brillante cuando en casi cualquier ángulo que formemos entre nosotros y la luz. El problema radica en las superficies que NO son brillantes, concretamente las mates, que si las miramos de frente son mates, PERO si estas superficies se ponen en paralelo a nuestro vector de visión y formando ángulo para el brillo con la luz, entonces se vuelven brillantes.

Esto es lo que comentan en la wiki de Valve software, yo concretamente antes de implementarlo lo he probado con una superficie mate y sí que es verdad.

alyx_phong_closeup

Para ello, nos ayudamos de un parámetro que se llama fresnel. El fresnel es simplemente un producto escalar entre nuestro vector de visión y la normal del píxel. Este valor de fresnel multiplicado por la componente especular nos proporciona “aproximadamente” ese efecto que comentábamos antes.

defaultfresnelterms

Yo lo he implementado recientemente en los materiales y la verdad es que cumple su cometido casi a la perfección, aunque el algoritmo no sea idéntico al que utilizan en Valve software.

alyxfresnel

Un saludo a todos.

P.D: Las imágenes son de la wiki de Valve, las he puesto porque ayuda a entender el concepto que explico.

2 comentarios para “Componente especular y fresnel”

  1. rpenalva Dice:

    Hi,
    realmente el termino de fresnel depende del angulo entre el rayo de luz y la normal. Aqui lo explican bien:
    http://en.wikipedia.org/wiki/Fresnel_equations
    http://developer.nvidia.com/object/fresnel_wp.html

    Luego, para simplificar se usa la aproximacion de Schlick. Aqui tienes el paper:
    http://dept-info.labri.u-bordeaux.fr/~schlick/DOC/eur2.html

    Y aqui tambien lo explican:
    http://www.ce.chalmers.se/edu/year/2006/course/EDA425/labbar/lab/task2e.html
    http://www.ce.chalmers.se/edu/year/2006/course/EDA425/lectures/rt3.pdf

    Un saludo,
    Rubén Penalva

  2. arkangel2803 Dice:

    Holas

    Comentarte de que has puesto tanto link que el filtro de spam de wordpress ha interpretado este mensaje como un mensaje de spam ;) menos mal que lo he visto jejeje.

    Bueno comentarte de que si bien es cierto que el fresnel como tal se calcula como se describe en esos papers, el efecto que buscamos aqui es encontrar una componente mediante la cual nos sea facil determinar que pixeles forman un angulo de 90º entre el vector de vision y la normal de la superficie. Yo creo que como es muy parecido el uno del otro seguramente sea por eso que se refieren a los dos metodos por le mismo nombre.

    Un saludo y gracias por la aportacion ;)

    P.D: En uno de los enlaces dan una pista (hint) para aumentar el rendimiento diciendo que se calcule el fresnel en el vertex shader. Si estamos realizando iluminacion per-pixel con normal mapping, iros con cuidado porque puede dar errores graficos no deseados. Por tanto, si teneis ilumionacion per-pixel CON normal mapping, os aconsejo que el valor de fresnel ( el que utiliza Valve ) para el efecto del post lo hagais en el pixel shader.

Deja un comentario

Disculpa, debes iniciar sesión para escribir un comentario.