javisantana.com

Pruebas con AO

En estos días de relax he decidido ponerme a hacer un pequeño motor que use shaders y procedural (no hay entrada en la wikipedia española, lo mismo la creo), como viene siendo habitual.

No había trabajado todavía con GLSL, el lenguaje de OpenGL para shaders, y me ha sorprendido la facilidad y la potencia para hacer todo tipo de cosas, las que antes se hacían sin shaders y las que ahora son posibles gracias a los shaders.

En un par de días, miré la referencia de GLSL (pdf) que por cierto tiene agradecimientos a un español, y programé un sistema muy simple que me permite trabajar con shaders.

Lo primero que programé es la generación de mallas; además de la subdivisión y smootheado de las mismas, he creado un sistema de extrusión y generación por revolución. Creo que además añadiré algo que permita hacer un dupliverts a lo largo de un spline y que el sistema de extrusión permita hacerlo también usando un spline.
Con una textura basada en perlin, un cuerpo de revolución y un cubo he creado la escena de la derecha. EL cubo tiene un toon shader muy simple y el cuerpo de revolución iluminación direccional por pixel. El suelo usa el render habitual de OpenGL (el shader program 0 :).


Subdividiendo mucho las mallas y usando un shader adecuado se pueden conseguir imágenes como la de la derecha. Es interesante ver como puedes ajustar la iluminación como te de la gana, por ejemplo en la imagen quito la componente especular (no me gusta la luz especular!) y la atenuación que meto en función de la distancia la varío como quiero :).

Ya que estaba me he puesto a jugar un poco con una aproximación de Ambient oclussion, pero las cosas a la primera nunca funcionan bien:

Otras pruebecillas, algo mejor:

Subdividiendo algo más el suelo (la componente de AO se calcula por vértice):

Ahora estoy probando la generación de unos arbolitos con unos perlin… :)

Gracias a iq por la información de su web acerca de su demosystem.