Saltar al contenido principal

Shaders de nieve

Una colección de shaders para biomas nevados.

Uno de las primeras veces que trasteé con los shaders en mi vida. Este fue el proyecto que disparó mi interés por el tema del renderizado en tiempo real. La colección se compone de dos shaders. El primero permite la generación de superficies de nieve en objetos en función de un vector de dirección de la nevada y usando las normales del objeto. Esto permite su integración en un sistema de clima dinámico. Además, la nieve puede aumentar su tamaño de forma gradual, configurable mediante un parámetro de intensidad.

Generación de nieve en función de las normales del objeto.

El segundo es un shader que modifica una superficie teselada al paso de un objeto, como si fuese nieve apartándose ante el paso de un objeto.

Dibujo de rastros en la nieve al paso de un objeto.

Render Targets

Una cámara renderiza en un depth buffer la geometría desde arriba, con el plano cercano del fustrum a la altura máxima del plano de la nieve. Toda la geometría que está por debajo de esa altura, dejará un trazo en el depth buffer en función de su profundidad respecto al plano de altura máxima. Con esta información podemos modificar la geometría del plano de la nieve, como si de un height map se tratase, lo que junto al teselado, nos permite obtener un efecto de nieve realista.

Render final

Render target que se usa para generar las marcas en la nieve.

Teselado

El teselado aumenta la densidad de triángulos de un modelo 3D sin modificar la geometría original. Es un proceso determinista y en tiempo real, lo que permite modificar la geometría bajo demanda y ahorrar recursos cuando no es necesario. Por ejemplo, la teselación puede disminuir con la distancia a la cámara.

Render final

Arriba, el plano de nieve con una teselación de 2. Abajo, el plano de nieve con una teselación de 16.

Demostración del shader procedural de nieve.

Demostración del shader de rastros en la nieve.