Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Shaders

Iniciado por fgutierrez, 04 de Octubre de 2007, 12:44:21 PM

« anterior - próximo »

fgutierrez

Hola, buenos dias. Estoy un poco confundido con lo que leo sobre los shaders. Parece ser que es una forma de configurar el Pipeline de la tarjeta gráfica, pero no acabo de entender a que se refiere con esto. Entiendo, pero no estoy seguro de si esto es asi, que los shaders son funciones que tratan de aprovechar ciertas capacidades que poseen algunas tarjetas gráficas para realizar de forma más eficiente tareas comunes de OpenGL como texturización, dar color a ciertos polígonos, iluminación, etc... ¿Alguno puede darme algún ejemplo de como se puede utilizar esto?
Muchas gracias. Fernando.
eamos realistas: Exijamos lo imposible

Shaitan

Creo que es más facil que te leas un tutorial que explicarlo aqui:

http://www.lighthouse3d.com/opengl/glsl/index.php?intro

Basicamente lo que se permite con el uso de shaders es reemplazar ciertas partes del pipeline de OGL (o DX) por programillas propios, pudiendo hacer efectos (como desplazar vertices - Vertex shaders, o cambiar colores - pixel shaders) que de otra forma OGL los haría siempre igual. Esto te da la capacidad de calcular estos parámetros a partir de otros datos que te sean de interés pasándole la mínima cantidad de información a la tarjeta (los vertices igual que siempre, más los shaders, más alguna que otra textura...)
Por supuesto, tiene la ventaja de que esto se realiza en hard.

No se si te habrá aclarado algo... Mejor leete bien el tutorial...

J.
<º))))><.·´¯`·.Shaitan´¯`·.¸.·´¯`·._.·

tamat

La mejor manera de entenderlo es no pensar en OpenGL como una manera de "pintar poligonos con una textura encima" sino en una manera de pintar, a secas.

Antiguamente tu lanzabas a la tarjeta una serie de triangulos con su color y texturas, y la tarjeta se encargaba de aplicar algoritmos muy basicos para iluminar, texturizar, etc.

Pero esa parte sigue siendo parte de la programación gráfica y por lo tanto debería estar en manos del programador alterarlas, así que ahora tambien esa parte la programamos nosotros, lo que nos permite pintar los poligonos de maneras mucho más rebuscadas, lo que produce efectos mucho más trabajados.

Claro que si lo que tu quieres es pintar triangulos con una textura pues no necesitas shaders.
Por un stratos menos tenso

Tei

Cita de: "tamat"..debería estar en manos del programador alterarlas, así que ahora también esa parte la programamos nosotros, lo que nos permite pintar los polígonos de maneras mucho más rebuscadas, lo que produce efectos mucho más trabajados.

¿Eso significa que podríamos hacer un shader para manipular la posición de los vertex y crear una arquitectura deformada? (al estilo de Dungeon Keerper, por ejemplo)



update: error de tipeo corregido: escribi poligonos, y quería decir vertex

Shaitan

Eso precisamente se puede hacer con un vertex shader...

J.
<º))))><.·´¯`·.Shaitan´¯`·.¸.·´¯`·._.·

Ruben

Hi,
para eso no haria falta shaders, con usar las transformaciones de mundo, vista y perspectiva del api(dx u opengl) valdria.

Si quieres ver buenos ejemplos de un pipeline orientado a shaders mirate "Renderman", aunque no lo vayas a usar es muy didactico.

Un saludo,
Ruben

Shaitan

Ya, y si ahora lo que quieres es para el mismo escenario hacer otra distorsión diferente? A volver a editar todo el escenario?. Vamos a ver, si lo que dices es que se puede hacer con primitivas a lo glRotate, lo llevas claro... Si los del dugeon keeper hicieran todos los escenarios programados con primitivas (a pelo, en ogl), me parece que habría uno o dos escenarios en todo el juego...

J.
<º))))><.·´¯`·.Shaitan´¯`·.¸.·´¯`·._.·

t-spy

Creo que no conoces mucho el Dungeon Keeper. Deberías saber que es un juego del 97 y que ni siquiera usaba aceleración por hardware, así que de shaders mejor ni hablamos.  :wink:

Tei

a lo que me refiero es que tienes los vertices de los poligonos en linea:


*
|
*
|
*
|
*
|
*


Pero no quieres renderizar esto. Porque te saldrian columnas y muros rectos. Y quieres que se rendericen torcidos. Naturalmente lo podrias hacer al diseñar el mapa, pero es mucha informacion y mucho trabajo que se puede automatizar... y al automatizar queda homogeneo (quedara mejor).  Realmente tampoco lo quieres hacer en soft, porque tendrias que enviar poligonos uno a uno..  que es lento.

Entonces modificas ligeramente la posicion de los vertex, haciendo un pequeño desplazamiento basandote en el coseno(X) y el seno(Y) (usando senos y consenos, no por nada, sino porque estan acotados entre -1 y +1, para no obtener desplazamientos enormes, sino acotados)

Y entonces te sale un muro/columna deformados:


*
|
*
|
 *
|
*
|
*


Puse el ejemplo de los muros/columnas de dungeon keeper, porque ese motor de software dibuja muros deformados. Y siempre ma ha parecido una renderizacion muy chula. Y por eso preguntaba si es posible hacer esto concreto con shaders.

BeRSeRKeR

Cita de: "Tei"Puse el ejemplo de los muros/columnas de dungeon keeper, porque ese motor de software dibuja muros deformados. Y siempre ma ha parecido una renderizacion muy chula. Y por eso preguntaba si es posible hacer esto concreto con shaders.
Sí, se puede hacer con un vertex shader.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Shaitan

No es cuestión de conocer o no el dugeon keeper. Es cuestión de que el dugeon keeper crearían la geometría deformada, con algun programa de modelado. No creo que usasen transformaciones 'a pelo' en OGL o DX. Estamos hablando de crear una geometría genérica y poder deformarla sin modificar los ficheros 3ds o lo que sea a través de un programa --> para esto son los vertex shaders.
Y sigo estando seguro de que el dugeon keeper no hicieron la geometría 'proceduralmente'

CitarCreo que no conoces mucho el Dungeon Keeper. Deberías saber que es un juego del 97 y que ni siquiera usaba aceleración por hardware, así que de shaders mejor ni hablamos. Wink

En ningún momento he dicho que el dugeon keeper utilizase shaders, no pongas en mi boca palabras que no he dicho...

J.
<º))))><.·´¯`·.Shaitan´¯`·.¸.·´¯`·._.·

Ruben

Hi,
Citar¿Eso significa que podriamos hacer un shader para manipular la posicion de los poligonos y crear una arquitectura deformada? (al estilo de Dungeon Keerper, por ejemplo)  
Pense que con deformacion estabas refiriendote a la deformacion alargada de los objetos por la perspectiva. Mala interpretacion.  :roll:

Busca bump mapping, parallax mapping o displacement mapping.

Un saludo,
Ruben

Tei

Evidentemente nos hemos despistado un poco. Olvidemos el DK, que solo lo saque a colación  porque no se me ocurrio un ejemplo mejor.

Mis disculpas a todos O:]

Shaitan

Si, la verdad es que a veces leemos demasiado rápido los posts y acabamos interpretando mal algunas cosas. Bueno, por lo menos espero que quede claro 'el concepto'  :lol:

J.
<º))))><.·´¯`·.Shaitan´¯`·.¸.·´¯`·._.·

tamat

Lo de deformar geometría por shaders se usan principalmente para temas de animacion esqueletal. Tu subes una serie de matrices al shader y en cada vertice guardas informacion sobre qué matrices le afectan y cuanto.

Despues en el vertex shader solo tienes que deformar ese vertice acorde con  las matrices que le afectan.

El resultado es que en CPU tu solo subes unos datos estáticos (mesh y propiedades de cada vertice) y una serie de matrices, y te renderiza en pantalla el personaje modificado, liberando así a la CPU de muchisima carga.
Por un stratos menos tenso






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.