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 »

JL10

Entonces, para un escenario complejo, se puede  activar/desactivar los shaders cuando se precise para que solo afecta a parte de los Objetos?, o tiene todo que pasar por shaders?

Gracias
Gracias

Shaitan

Si, se pueden activar/desactivar para cada objeto. Incluso se pueden utilizar solamente con partes de objetos, etc.También puedes utilizar un shader para hacer un postproceso de toda la pantalla (de la imagen resultado, por ejemplo para hacer un blur de toda la pantalla o un fade a un color...).

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

JL10

Cita de: "Shaitan"...un shader para hacer un postproceso de toda la pantalla (de la imagen resultado, por ejemplo para hacer un blur de toda la pantalla o un fade a un color...).

Pero esto sería lo que se llama un pixel-shader o fragment-shader??
Gracias

r2d2rigo

Pixel shader. Renderizas la escena, haces una copia de lo que hay actualmente en pantalla con glCopyTexImage2D (o su equivalente en DX) y entonces tendras una textura "plana" con una copia de lo que habia en la pantalla. Le aplicas un pixel shader para, por ejemplo, realzar los verdes, o hacer una sobreexposicion multiplicando el color de cada pixel por si mismo, y la vuelves a dibujar en pantalla.

Prompt

Me estoy liando hasta yo de leerlo :P

A ver si mi visión simple te ayuda.


Que es un "Program Object" o Shader?
Es un programa ( conjunto de código... variables, statements... ) que se ejecuta en la GPU y modifica el comportamiento establecido en el renderizado. Con el geometric shader no solo modificamos sino que también creamos allí geometría.

Veamoslo desde el punto de vista de la modificación, que es lo que comenta tamat:
1 - Arranca el Motor de juego y el motro grafico...
2 - Cargas un array de vertices e indices de un fichero, este es tu modelo 3D.
3 - Reservas un Vertex Buffer Object en memoria de la tarjeta y le pasas esos verticves e indices, por ejemplo. Con esto pasamos a la memoria de la tarjeta grafica lo que vamos a renderizar.
4 - Renderizamos.


Este es el comportamiento habitual, pero donde entran los llamados "Shaders" ( o programas de la GPU ? es más facilmente entendible quizás )

1 - Arranca el Motor de juego y el motro grafico...
2 - Cargas un array de vertices e indices de un fichero, este es tu modelo 3D.
3 - Reservas un Vertex Buffer Object en memoria de la tarjeta y le pasas esos verticves e indices, por ejemplo. Con esto pasamos a la memoria de la tarjeta grafica lo que vamos a renderizar.
4.1 - VERTEX_SHADER.begin(): aqui se ejecutará nuestro código, nuestro vertex shader por cada vertice de nuestro VBO. Si fuera un Fragment Shader pues, por cada "pixel" o fragmento.

4.2 - Renderizamos.
4.3 - VERTEX_SHADER.end()


La ejecución de los Shaders se ejecuta siempre, por cada vertice y por cada fragmento. Con lo cual si en nuestro vertex shader del muro ( del dungeon keeper que nos muestra tamat ) cogemos y aplicamos un valor aleatorio podemos ir moviendo la posición de cada vertice un poco arriba o un poco y hacer un efecto de distorsión facil. Evidentemente el efecto es poco costoso dependiendo del numero de vertices y el efecto es patatero. Podemos obtener mejor calidad con un Fragment Shader... pero eso es otra historia.

Espero haber sido de ayuda con esta breve explicación :)






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.