Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Proyecto iL-engine

Iniciado por arkangel2803, 22 de Septiembre de 2008, 01:54:03 PM

« anterior - próximo »

XÑA

Ya veo que lo que vas a hacer es crear el shader dinámicamente ;) Bienvenido al club!!! Yo probé con multipass o ahora que estoy con 1 shader para todas las luces. Sin embargo no creo que te sirve el sistema XML para identificarlos. La primera versión con multipass usaba un sistema parecido al tuyo, pero el problema es que lo que haces es tener un sistema de materiales muy genérico, pero a la vez limitado. Por ejemplo, si quieres tener un material que haga un efecto 'Ghost' utilizando Fresnel, tendrás que crear ese 'efecto' en tu definición de materiales.

Todo esto lo superé con la versión actual, donde:

No necesito hacer multipass ( creo que el límite son 8 luces debido a los samplers necesarios para las sombras)
No necesito hacer multipass para cada layer de material, porque puedo procesar en el mismo shader estas características.
Puedo hacer transparencias ( aunque controladas) porque no necesito activar el Blending One-One.

Los materiales son 'clases' con métodos virtuales que son los que generan el shader.

Problema de todo esto: lento!! ¿Porqué? Pues porque hay muchos shaders que se tienen que ir activando con cada mesh, y eso no le gusta a la tarjeta. Supongo que con DX11 y el multithreading esto se resolverá, porque creo que lo que pasa es que le cuesta mucho hacer las comprobaciones que hace o las listas de instrucciones que tiene que crear ( aunque es un suponer).



Prompt

aiiiiiiiins! es verdad, gracias y disculpeme señor tewe... la empanada de antes de desayunar!

xD hahahaa :)

arkangel2803

Cita de: XÑA en 08 de Octubre de 2008, 09:38:03 AM
Ya veo que lo que vas a hacer es crear el shader dinámicamente ;) Bienvenido al club!!! Yo probé con multipass o ahora que estoy con 1 shader para todas las luces. Sin embargo no creo que te sirve el sistema XML para identificarlos. La primera versión con multipass usaba un sistema parecido al tuyo, pero el problema es que lo que haces es tener un sistema de materiales muy genérico, pero a la vez limitado. Por ejemplo, si quieres tener un material que haga un efecto 'Ghost' utilizando Fresnel, tendrás que crear ese 'efecto' en tu definición de materiales.

Todo esto lo superé con la versión actual, donde:

No necesito hacer multipass ( creo que el límite son 8 luces debido a los samplers necesarios para las sombras)
No necesito hacer multipass para cada layer de material, porque puedo procesar en el mismo shader estas características.
Puedo hacer transparencias ( aunque controladas) porque no necesito activar el Blending One-One.

Los materiales son 'clases' con métodos virtuales que son los que generan el shader.

Problema de todo esto: lento!! ¿Porqué? Pues porque hay muchos shaders que se tienen que ir activando con cada mesh, y eso no le gusta a la tarjeta. Supongo que con DX11 y el multithreading esto se resolverá, porque creo que lo que pasa es que le cuesta mucho hacer las comprobaciones que hace o las listas de instrucciones que tiene que crear ( aunque es un suponer).




Holas

La intencion es ir evolucionando el sistema de materiales para que cada vez sea mas generico y se puedan hacer mas materiales con un xml predefinido como el que tengo.

Concretamente ahora tengo tres tipos de xml, normal, particle, water. (aun son ideas) Pero con estos 3 tengo suficiente para hacerlo casi casi todo, posiblemente integre particle en normal, aunque aun no lo se porque las particles necesitaran tener una texture3D y un material normal no, ya veremos a ver como va.

Independientemenete, descubri que DirectX se le puede pasar el codigo de una funcion sola de shader y te la compila, y luego la puedes linkar con otra funcion compilada previamente con el fragment linker, ke va a ser la clave para esto que quiero hacer.

Un saludo :)

LLORENS

XÑA

Esto del fragment linking es lentísimo. Yo lo probé y vaya porquería!!! Ya hace años de esto así que a lo mejor lo han mejorado pero de todas formas ni ATI lo utilia. Hace cosas de 1 año o 2 que ya se dió cuenta de que lo mejor es crear su propio shader dinámicamente. No es dinámico 100%, pq utiliza predefiniciones, pero sigue esa lógica ;)

Ruben

Cita de: arkangel2803 en 08 de Octubre de 2008, 11:00:58 AM
Concretamente ahora tengo tres tipos de xml, normal, particle, water. (aun son ideas) Pero con estos 3 tengo suficiente para hacerlo casi casi todo

¿Podrias hacer reflexion recursiva?  ;)

arkangel2803

Cita de: XÑA en 08 de Octubre de 2008, 01:03:10 PM
Esto del fragment linking es lentísimo. Yo lo probé y vaya porquería!!! Ya hace años de esto así que a lo mejor lo han mejorado pero de todas formas ni ATI lo utilia. Hace cosas de 1 año o 2 que ya se dió cuenta de que lo mejor es crear su propio shader dinámicamente. No es dinámico 100%, pq utiliza predefiniciones, pero sigue esa lógica ;)

Concretamente yo lo ke tengo pensado es:

-Cargamos modelo
-Cargamos material del modelo (imaginemos que solo tiene uno)
- SI el material ya esta cargado ENTONCES utilizamos el material cargado
- SINO generamos el codigo del vertex shader, generamos el codigo del pixel shader, los compilamos por separado, y los unimos con el Fragment Linker
- Ya tenemos todo cargado

- En bucle de programa ese shader esta siempre activo para ese material en concreto por lo que no necesitas volver a retocar nada.


Segun la documentacion de directx, la funcion de unir dos shaders es muy rapida y poco costosa. Otra cosa seria compilar los shaders para cada uno de los frames que vamos a renderizar.


@ Ruben: En principio el mapa de reflexion es un cubemap de baja resolucion, simplemente para dotar al objeto de 'reflexion' sin meter mucha zizaña en el tema de calidad. En principio no pretendo hacer ningun tipo de recursividad.

Un saludo

LLORENS

tamat

Aquí en el curro tambien usamos shaders dinamicos, es decir, tenemos un macroshader con mil defines y en función de las propiedades del objeto activamos unos o otros, ademas guardamos el map de los compilados previamente para poder reusar.

El sistema funciona, tal vez a veces puede dar un paron si tiene que recompilar el shader con una nueva configuración que no tenía antes pero se puede evitar forzando el compilado durante la fase de carga de la escena.
Por un stratos menos tenso

XÑA

Algo parecido es lo que tiene ATI  :P


arkangel2803

Holas

Comentar de que hoy lunes he entregado el proyecto final de carrera y como tal, hago publico con efecto imediato el codigo de dicho proyecto.

Lo podreis encontrar en el blog: Proyecto iL-engine

Un saludo y gracias por vuestras visitas. Por cierto, no os olvideis de consultar la ultima entrada del blog pues comento cosas a tener en cuenta como las librerias DXUT que de PC a PC pueden dar problemas de compilacion.

LLORENS

fjfnaranjo

De nada! A ti por compartir el código y por los comentarios del blog, interesantes para iniciados y no iniciados ;)
fjfnaranjo.com - Creating entertainment - Creando entretenimiento
fjfnaranjo [4t] gm4il [d0t] c0m (mail y msn)

arkangel2803

Hola

Hace ya unos cuantos días que no actualizo el blog, y no es que lo tenga abandonado sino que no es el tipo de pagina web que yo quería para poder publicar conocimiento.

El tema está en que un blog es algo para leer día a día perdiendo de una manera simbólica el índice de las cosas que se han hecho y perdiendo el norte de todo lo que se ha publicado.

Por eso mismo, he decidido moverme hacia una página en forma de wiki para poder publicar allí todo lo que estaba publicando aquí y más de manera más ordenada y fácil de consultar.

Por lo tanto pido a todos aquellos que leíais la información que posteaba aquí que actualicéis vuestros links porque a partir de ahora pondré todo el conocimiento en la nueva wiki.

Nueva pagina: http://ilengine.wikidot.com

Un saludo y gracias

tewe76

Tienes razón en que un blog no es buena solución para lo que quieres. Pero lo malo de la wiki es que no tienen RSS (creo). Aunque sea un poco más de trabajo, quizás podrías usar las dos cosas: añades en la wiki un nuevo artículo y pones en el blog una entrada simplemente con un link a dicho artículo.
Es una idea.
Tewe
www.TAPAZAPA.com : Funny and easy to play games for all ages! - Fairy Match - Brain Crash
www.LaRebelionDelBiberon.com : Experiencias de unos padres primerizos

word93

arkangel por curiosidad eras de un foro donde estaban unos tales skual,hoplita,jugocas etc? el foro trataba sobre el wr  :..

arkangel2803

No, no creo que sea esa parsona porque no me suena ese foro que comentas :)

Un saludo

LLORENS

Pitxardo

Impresionante!!! Me quito el sombrero  8o

Por cierto, la musica que suena de fondo cual es y de donde viene?






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.