Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Iniciacion En Fp, Ps Y Vs

Iniciado por Pogacha, 19 de Agosto de 2004, 10:41:05 PM

« anterior - próximo »

Pogacha

 Bien, ya mas o menos tengo una idea, gracias. Cuando ponía "vertex shader" o algo así en el google aparecian 300 paginas sobre cosas perifericas o benchmarks o placas con graficos o demos de las capacidades de tal placa y se me enquilomba todo. Si alguien tiene links especificos le agradeceria.

Lo que no sé, es ¿como funcionan?, ¿los drivers de la placa tienen un compilador que compilan los shaders en "tiempo real"?. No entiendo bien esto. ¿Hay que descargarse algo para programarlos?

En el trabajo tengo un PIV pero en casa, donde programo, solo uso un PIII 700 con una Savage 4, lo cual me limita y quiero comprar una placa donde funcionen los shaders y tambien en mi AGP de 4x.


_Grey

 Bueno reconozco que no he tocado los shaders mas que por la informacion que llega a mis manos, pero quiero aclarar algunas cosas.

Principalmente el problema es que pides informacion para OGL,cuando la mayoria que tiene conocimientos avanzados como para usar shaders en este foro lo hacen con DX.

Los libros que te han nombrado estan bien, pero quiero decir que...:

ShaderX .- Es el primero de la coleccion, con el aprenderas sobre shaders usando la base de DirectX 8.1, y todo lo que toques sera en ASM. Veras como tratarlos desde DirectX, y ademas, tendras un buen monton de shaders explicados. Entre ellos, compresion de informacion en los datos de vertices, y algun efecto de post-procesado.

ShaderX2 .- En realidad son 2 libros, enfocados a las DirectX 9, veras algo de ASM pero en general usa los HLSL, sobretodo cuando te enseña a programarlos. El primero, te enseña a programar shaders, y tiene un par de truquis de shaders. El segundo es una gran coleccion de shaders con trucos de todo tipo. Como nota, decir que se atreven a tocar los Shaders 3.0, cuando aun no estan disponibles, es mas hay otro libro ShaderX3 si no recuerdo mal, que ha salido hace no mucho. No habla mucho de como implementarlos en tus programas DirectX9, un par de paginas, no mas.

Puedes encontrar en Gamedev.net las primeras secciones del ShaderX:
Introduction to Shader Programming Part I: Fundamentals of Vertex Shaders
Introduction to Shader Programming Part II: Programming Vertex Shaders
Introduction to Shader Programming Part III: Fundamentals of Pixel Shaders
Introduction to Shader Programming Part IV: Programming Pixel Shaders

Puedes bajarte desde la web de ATI el Render Monkey. Puede que al principio parezca dificil, pero bueno, carga algun ejemplo y curiosea con el.

Sobre como sera con OGL... ni idea, pero puedes encontrar otros libros con OGL como enfoque, pero no creo que muchos del foro se puedan meter mucho ya en esto.

El equipo que necesitas... bueno, sin duda lo que tienes es algo antiguo (conste que empeze el año con un PIII a 300Mhz  :(  ). Pero bueno, puedes hacerlo por soft, eso si, solo creo factible usar vertex shaders por soft, los pixels shader ignoralos si no pudes hacerlos por hardware.
No soy el mejor para saber que version de shaders soporta cada targeta, pero lo mejor seria una targeta Directx9, quizas seria buena cosa, como minimo una 9500Pro, que segun el mensaje de ZaelSiuS tiene Shaders 2.0, pero con ese equipo me da cierto palo recomendar una targeta asi.
Si tienes pensado ponerte al dia, comprar maquina nueva, en no mucho tiempo, cogete una 6800 de Nvidia para PCI-Express, para cuando salga, con el equipo.
Con el equipo que tienes puedes por lo menos trastear con los Vertex Shaders.

Respecto a lo que dices de :
CitarLo que no sé, es ¿como funcionan?, ¿los drivers de la placa tienen un compilador que compilan los shaders en "tiempo real"?

Los shaders, por supuesto, como cualquier otro programa, se ejecutan a nivel binario. Lo que pasa es que no es extraño cargar el fichero fuente con el codigo, y usar las funciones que da DirectX para compilar el shader, y poder pasarselo asi a la targeta.Pero si se hace esto, es solo al principio, a nadie se le pasa por la cabeza recompilar el shader cada vez que se vaya a usar.

Bueno, creo que tienes material para ponerte un poco al dia e informarte de todo esto, pero si realmente te interesa para OGL, sera algo mas dificil de encontrar cositas.


Saludos.

Pogacha


Minos

 Bueno, ahi va la info sobre glsl:

-Libros: el mejor libro que hay sobre el lenguaje es el "Opengl Shading Language" de Randi J. Rost (el principal desarrollador del lenguage en 3dlabs) y esta publicado por la editorial Addison Wesley. (AKA Opengl Orange Book)
Puedes encontrar mas info sobre el libro aqui junto con un capitulo de ejemplo

-Tutoriales: en esta direccion, http://www.clockworkcoders.com/oglsl/tutorials.html,  tienes tutoriales sobre aprender el lenguaje y empezar a hacer algo.

-Mas informacion: dos grandes sitios.

*3DLabs Opengl2.0, 3dlabs es el principal desarrollador del opengl shading lenguaje, en esa pagina tienes multitud de informacion util sobre el lenguaje.
Te recomiendo "OpenGL Shading Language Master Class - March/April 2004" que esta en presentaciones.

*OpenGL.org, aqui mas que nada estan foros donde preguntar dudas que te surjan sobre la marcha, por supuesto tambien puedes preguntar en gamedev,etc

- Programas: pues para empezar a trastear con GLSL y no tenerte que hacer tu un IDE pillate el RenderMonkey 1.5 que lo soporta plenamente, de la pagina de desarrolladores de ATI.  
Si tienes una tarjeta de nvidia que no soporte glsl usa el NVEmulate, no se si ira con ATI.

- Tutoriales sobre opengl avanzados puedes encontrarlos en UltimateGameProgramming y sobre tecnicas avanzadas en Paul's Proyects

Y bajo GLSL , si, los drivers tienen incorporados el compilador del mismo, esto hace que cada drivers pueda exprimir al maximo la tarjeta optimizando el shader para ella al ser compilado.
Normalmente al iniciar tu programa compilas los codigo fuente de los shaders y luego los linkas en programas, que no te confunda este cachondeo de palabras ya que en bajo directx se refieren o aspectos un poco diferentes.

Si necesitas mas info sobre opengl avanzado o glsl no dudes en poner algun post por aqui.

OGL Rulz.  (uoh)  

Minos

 Ah, uno que se me olvidaba, tecnicas avanzadas. http://esprit.campus.luth.se/~humus/

Saludos

Douch

 No se si Minos ha llegado a ponertelo en la info (completita, sí señor) que ha puesto, pero por si acaso dejo aquí el link para descargarte el libro en PDF "The OpenGL Shading Languaje" desde www.opengl.org/.

Es muy completo aunque en un perfecto inglés técnico. "Pesa" poco menos de 1 MB.

Pogacha

 Que buena info!. Gacias!

Me acogen las dudas:

Entonces en GLSL solo puede programar para las ATI?

Si hago un fragment program no funcionará en NVIDIA ?

Hay que hacer versiones para una placa y para otra ?



BeRSeRKeR

 
Cita de: "Pogacha"Entonces en GLSL solo puede programar para las ATI?
También puedes utilizarlo con las tarjetas de nVidia.

Cita de: "Pogacha"Si hago un fragment program no funcionará en NVIDIA ?
Claro que sí funcionará. :)

Cita de: "Pogacha"Hay que hacer versiones para una placa y para otra ?
Si ambas aceleradoras tienen las mismas capacidades no, el fragment shader será el mismo. Otra cosa es cuando no tienen las mismas capacidades. Por ejemplo, mientras que con una aceleradora podrías hacer un efecto en una sola pasada (accedes a varias texturas en el mismo fragment program), con otra aceleradora puede que tengas que dar varias pasadas. En ese caso sí tendrías que tener fragment programs diferentes.

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

Pogacha

 Bien tengo como para leer un mes entero.  O_O
Muchas gracias, todavia no tengo claro muchas cosas pero veré si no las puedo resolver leyendo de lo que he descargado.
Muchas gracias!   ;)

Por las dudas:

Que se usa para compilar un shader fuente (.txt)?
Es necesario compilarlo ?
Se genera un codigo objeto despues de compilado?
El programa que lo use debe cargarlo en memoria y usarlo mediante las externciones de tipo ARB_shader ... ?
El NVEmulator hace render por software, ejecuta los shaders por software o que hace ?
El NVEmulator andará en cualquier placa ?

No es necesario responder, pero si alguien la tiene clara ....
Saludos.

Minos

 
CitarQue se usa para compilar un shader fuente (.txt)?
Si te refieres a compilarlos en tu aplicacion tienes que guardar el texto en memoria y despues llamar a:

shaderID = glCreateShaderObjectARB(shaderType);
glShaderSourceARB (shaderID, numStrings, strings, lengths);
glCompileShaderARB (shaderID);

Una vez echo eso ya tienes el shader compilado

CitarEs necesario compilarlo ?
Pues si, es necesario si lo quieres usar  :P

CitarSe genera un codigo objeto despues de compilado?
Si, pero tu no te enteras de esto ya que bajo OpenGL solo usas ids de los shaders.Despues para hacer un program object tienes que unir varios shaders y linkarlos.

programID = glCreateProgramObjectARB ();
glAttachObjectARB(programID, shaderID);
glAttachObjectARB(programID, shaderID2);
glLinkProgramARB(programID);
// Y para usarlo
glUseProgramObjectARB (programID);

De esta manera podras tener colecciones de funciones y compartirla entre los shaders

CitarEl programa que lo use debe cargarlo en memoria y usarlo mediante las externciones de tipo ARB_shader ... ?
A menos que estes bajo linux con version de opengl 1.5  tienes que usar extensiones ya que windows solo da soporte hasta 1.1

CitarEl NVEmulator hace render por software, ejecuta los shaders por software o que hace ?
El NVEmulator que linkee antes se corresponde a nv30, yo solo lo ha usado para cG y creo que para GLSL no vale, te tendras que pillar la version que emula nv40, se que existe por este pdf:
http://download.nvidia.com/developer/prese...004_NV_GLSL.pdf
el progama te dicen que lo uses en la pag4.
Si tu tarjeta no lo soporta te lo hara por hardware

CitarEl NVEmulator andará en cualquier placa ?
Como te digo mi unica experiencia es con el nv30 para usar cG (de echo en el libro 'The cG Tutorial' te lo traian en el CD), y a mi me funcionó en una gf2MX. No se si ira en mas placas.



Minos

Cita de: "Minos"
Si tu tarjeta no lo soporta te lo hara por hardware
Digooo, por software  :lol: , si es que escribir rapido..., vaya gazapo!

Por cierto, un poco mas de tiempo para edit please. :(  

Pogacha

 Muchas gracias!

Ese cG que ventajas tiene comparado con el GLSL?

Cual es mas optimo, mas rentable?

Si yo quiero hacer el Doom 3, cual seria el mas recomendable? ( "hacer el Doom 3" :) , tomenlo como ejemplificativo, pero ese tipo de engine )

BeRSeRKeR

 Si yo utilizase OpenGL me tiraría a por el GLSL sin pensármelo. Más que nada porque Cg es de nVidia y nunca sabes por dónde te pueden salir (posibles incompatibilidades o poco optimizado para aceleradoras ATI). En cambio con GLSL el compilador va incorporado en los drivers de cada fabricante por lo que cada uno lo optimizará lo máximo para sus aceleradoras.

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

Pogacha

 En definitiva saco:

Los shaders se escriben, se prueban en una maquina pero se compilan al estilo Java mediante funciones de los drivers de cada placa de cada maquina que este usandolo.

Los mas comunes son:
GLSL: Estandar tipo c de OpenGL, andara en todos lados proximamente.

Cg: Estandar de NVidia, puede que ande mal en el fururo para otras placas - Mejor no

HLSL: Estandar de microsoft, supongo de DirectX, no se nada de este, es estilo ensamblador?

Hay algo mas ?

BeRSeRKeR

Cita de: "Pogacha"HLSL: Estandar de microsoft, supongo de DirectX, no se nada de este, es estilo ensamblador?
Es otro lenguaje de alto nivel tipo C para shaders como son Cg y GLSL.

Creo que hay algunos lenguajes más pero ahora no los recuerdo. Pero vamos los que más se usan son los 3 de arriba.

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






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.