Es común que cuando alguien compra una tarjeta gráfica o lee un artículo sobre videojuegos, lea esta palabra. Normalmente no tienen mayor relevancia salvo para indicarnos que el producto es la leche por tener más que la versión anterior. Muy bien, ¿pero qué son y cómo nos influyen?
Qué son
Como algunos sabréis, un programa o un juego, se compone de funciones. Así, podemos encontrar una función de disparo que llama a la función que pinta el fogonazo, manda reproducir un sonido de disparo y genera una bala que con su propia función se irá moviendo.En el caso de los shaders, también hablamos de funciones (algoritmos si nos ponemos técnicos). Un shader es un algoritmo que calcula cómo responde un punto de un objeto ante la luz. De este modo, si le da una luz roja, de una sirena por ejemplo, el shader calculará que un punto de la pared debe enrojecerse dependiendo de la distancia con la fuente de luz, su intensidad, otras fuentes de luz, la oclusión ambiental, etc. Además, tendrá en cuenta la opacidad del material, si es brillante o mate y un sin fin de posibilidades que se tarda mucho más en enumerar que en calcular.
Para qué se usan
Pues como he comentado antes, se usan para colorear píxeles alterando el color original de su textura. Es decir, tenemos una pared blanca, le acercamos la luz roja de la sirena y se tiene que ver roja. Cuanto más lejos esté la fuente de luz, menos roja se verá esa parte de la pared.¿Qué pasa si entre la luz y la pared hay un borracho meando? Pues que seguramente el policía que activó la sirena le multará, pero aparte de eso, la fuente de luz se ve bloqueada, por lo que el shader debe aplicar una sombra que oscurezca ese punto de la pared y tiene que calcular cuánto se oscurece. Si se quiere hacer sencillo y cutre, se hace una media del color de la textura con el de la sombra. Si se quiere hacer bien, se tendrá en cuenta la oclusión ambiental, que no es más que calcular la iluminación que proporcionarían el sol o la luna.
Pensaréis que eso es el shader sin más, pero no. Esa es sólo su utilidad original. Una vez se vio que se podía aprovechar esto para otras cosas, comenzaron a aparecer técnicas como el famoso bump mapping, la niebla, los reflejos, siendo algunos efectos de posprocesado como el desenfoque, o lo que es lo mismo, aplicados después de generar la imagen 2D del escenario 3D igual que si hiciésemos una foto del escenario y luego le aplicásemos photoshop.
Aquí podéis apreciar el sombrado y el efecto de las luces |
Cómo se usan
Hay distintos lenguajes de programación de alto nivel para ello. De alto nivel significa que tú escribes algo sencillo y el lenguaje, compilador en realidad, ya se encarga de pelearse con el hardware para que haga lo que tú quieres. En este caso las tarjetas gráficas poseen montones de núcleos (pipelines) que ejecutan las tareas que les indicas. Cada uno de esos núcleos ejecutará un shader, pudiendo ser de distinto tipo, como la iluminación, el sombreado, el reflejo en el agua, la niebla que clarea un píxel más cuanto más lejos esté de la cámara, etc.Shaders por hardware
Este tipo de shaders se divide en tres tipos:- Vertex shader: Sirve para aplicar transformaciones a un vértice en la malla de un objeto. Lo más básico es que muevas el objeto y entonces los vértices de ese objeto se muevan también, pudiendo rotarse. También sirven para transformar los objetos en otro, haciendo que el pelo de Goku se ponga de punta cuando se transforme en SSJ por ejemplo. Son los primeros en ejecutarse.
- Geometry shader: Son de los más modernos, requiriendo al menos DX10, por ejemplo. Su función es recibir como entrada los vértices y crear las líneas que los enlaza, pudiendo recibir un octógono y convertirlo en un círculo creando más puntos intermedios, aunque para eso podría haber recibido un círculo directamente, pero bueno.
- Fragment shader: Recibe cada uno de los fragmentos generados en el paso anterior e interpola (hace una media) entre los vértices para calcular los colores y sombras que mencionaba antes.
Aquí tenemos un ejemplo de reflejo y un destello posprocesado. |
Conclusiones
He tratado de explicarlo de forma cercana a todos los que no están muy puestos en el tema. Obviamente el tema es bastante más complejo por dentro, pero espero que os haya servido para entender un poco mejor cómo funcionan nuestros queridos juegos.Si gusta el artículo, la próxima vez os hablaré de bump mapping, parallax, rotorscopia o el efecto que os interese. Si lo conozco, os lo explico y si no, investigo, que también me gusta aprender.
Mis dies hamijo
ResponderEliminarMe ha gustado mucho el artículo, y eso que ya sabía más o menos de que iba lo de los shader (de cuando creaba mapas para UT99 >.<) pero saber los distintos tipos y que hace cada uno ha sido muy interesante, además de que no se me ha hecho para nada aburrido el artículo, esperaré más de este tipo en el futuro :P
Podría haberme extendido más, pero mi profesora de japonés decía que sólo podíamos aprender bien 5 cosas al día. Yo creo que era una excusa para no enseñarnos demasiado rápido y quedarse sin alumnos. xD
Eliminarmuy instructivo, y diría incluso fundamental, ya que la única diferencia entre esta generación y la pasada precisamente son los brillis brillis...
ResponderEliminarBueno, el brillis-brillis se crea también con los shaders y una fuente de partículas (suena científico, pero no). La fuente de va a crear vértices sin polígonos y éstos van a ser procesados por el Brillis-Brillis Engine, digo por los shaders.
EliminarY yo pensé que eran para ahorrar polígonos ver la cara del calvo del crisis 3 para confirmarlo por esas sierras.
ResponderEliminarhttps://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRxLnyykHXfIuf5w9_hpXuMxMFQSy-746oXnf9AqUbaMemw-cJmSIsovW3B1A
EliminarSino mal lo recuerdo, el serious sam 1, tenia un cuarto para probar todo eso, igual un video de ese cuarto era mas rapido para explicar que es cada cosa (aunque honestamente no lo pienso buscar xD).
ResponderEliminarPues no lo conozco, pero mi idea era explicarlo con mis palabras y mascadito para los legos en la materia. Hay muchas explicaciones sobre el tema, pero casi todas son demasiado técnicas para el niño rata que va a defender su juego frente al de la competencia porque en las noticias dijeron algo de los shaders y lo va a repetir sin saber qué significa.
EliminarDesgraciadamente mi disco del primer serious sam paso a mejor vida y en el hd no viene, pero decia para ejemplificarlo a detalle sobretodo porque seria facilmente manejable (solo es entrar a "x" cuarto que dice vertex shader, mapping, aliasing, etc, queda que ni mandado a hacer para un post explicativo xD).
EliminarParece que mola. Seguramente era algo que usaban para probar el motor gráfico. Ahora quiero ver el vídeo. :P
EliminarBueno es que el motor del primer Serious Sam en su epoca era otra cosa, ver practicamente 100 enemigos (distintos la mayoria) o mas, con cuatro jugadores al mismo tiempo y corriendo mejor que Unreal 99... eso era hermoso.
EliminarDead blog is dead
ResponderEliminarDebe ser muy divertido perder el tiempo libre del puente del pilar en entrar aquí para decir eso. Yo preferí invertirlo en viajar a la capital, ver el desfile de las fuerzas armadas, salir con los amigos, visitar la ciudad... Vamos, lo normal cuando se tiene una vida. Tal vez me puedas enseñar dónde está la gracia de perder el tiempo a tu manera. ;)
EliminarP.D.: Te iba a escribir sólo para mostrarte que no está muerto, pero ya que me pongo a escribir...
Dead blog is dead
ResponderEliminarEscribí en esta mierda y el comentario no salió...puta bida xD
ResponderEliminarOk, aquí voy nuevamente (ojalá salga esta vez). Lo que quería decir es que sería bonito si hicieras un artículo sobre ANTIALIASING Y FILTROS ANISOTRÓPICOS.
ResponderEliminar[img]https://upload.wikimedia.org/wikipedia/commons/8/80/Anisotropic_filtering_en.png[/img]
Son siempre entretenido de leer (mientras no tengan una sobredosis de datos y tecnicismos innecesarios). De paso ahorraría el trabajo de escribir y directamente mandaría a los pobres diablos a leer el artículo para instruirse un rato. El otro día me encontré una joya de alguien que decía que los dientes de sierra eran por culpa de las malas TVs (que según ellos no les aparecía en sus Teles mastar race...) y que daba lo mismo si un juego era sandbox o pasillo porque la gráfica se veía borrosa igual unos pasos más allá del personaje. Fue glorioso.