Foros - Stratos

Stratos => Proyectos => Mensaje iniciado por: BeRSeRKeR en 02 de Septiembre de 2003, 05:52:16 PM

Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: BeRSeRKeR en 02 de Septiembre de 2003, 05:52:16 PM
 Hola a todos.

Como ya sabéis, estoy desarrollando un pequeño motor 3D. Más que nada porque estaba un poco cansado de hacer nada.

Bueno, pues como prueba de lo que estoy haciendo aquí os dejo un pequeño video (18 sg, DivX 5.0.5) en el que se muestra la escena del castillo4 de Mars (para el test de motores). La he retocado un poco en el tema de materiales. Por lo demás es la misma.

Características del motor:
Herramientas desarrolladas para 3DStudio MAX (utilizando MAXScript):
Eso es lo que llevo hecho hasta ahora. Lo que falta por hacer es:
Bueno, eso es más o menos lo que hay. Sin duda, lo mejor del motor supongo que es el uso de IFXShaders para definir las propiedades visuales de la escena y su integración en MAX (¡MAXScript al poder! :)). Puedes modificar las propiedades de un objeto sin necesidad de tocar una sóla línea de código.

La razón por la que no he sacado un ejecutable en lugar del video es que:
Digamos que la escena esa va a unos 40-50 FPS a 1024x768x32. En realidad yo me esperaba de 100 a 200 FPS mínimo (eso sin determinación de visibilidad de ningún tipo). Por lo que debe haber un error gordo a la hora de mandar las primitivas a la GPU. Precisamente eso será una de las primeras cosas con las que me pondré ahora.

Pues nada más. Ya sé que no es mucho, pero espero que disfrutéis del video. Para qué nos vamos a engañar, después de 3 semanas programando me apetecía enseñar algo. Digamos que necesito un poco de ánimos para seguir con esto ;)

Saludos.
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: NeLo en 02 de Septiembre de 2003, 06:18:06 PM
 Excelente BeRS, como todo lo que haces ;).

Tengo ganas de juguetear con alguna demo tuya con shaders :P.

Saludos.
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: Haddd en 02 de Septiembre de 2003, 06:24:56 PM
 ¡Muy bonito el efecto de las nubes!

Venga, ánimo, sigue así!!
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: Zaelsius en 02 de Septiembre de 2003, 07:09:28 PM
 Yo a lo que me interesa :P : ¿irás publicando el código de engine/herramientas bajo alguna licencia libre? Lo que más me llama es ver ejemplos reales de pequeñas herramientas para Max, y su integración en un motor que está empezando.
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: BeRSeRKeR en 02 de Septiembre de 2003, 07:23:28 PM
 Puede que saque el código de las herramientas. No ahora porque seguro que conforme vaya haciendo pruebas encontraré errores que iré solucionando, pero más adelante es posible.

Saludos
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: Capiflash en 02 de Septiembre de 2003, 07:49:45 PM
 Me encanta ver en que esta trabajando la gente , sobre todo si es alguien tan bueno como BeRSeRKeR  :D
A ver si algun dia me lanzo a programar un motor  (nooo)   y pruebo las escenas de Mars  ;)  
Un saludo , y muy buen trabajo de nuevo Bers
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: BeRSeRKeR en 02 de Septiembre de 2003, 09:06:06 PM
 Bueno, ante todo gracias por los comentarios.

Ya que estamos; y como veo que las herramientas de MAX interesan, voy a explicar un poco en qué consisten las herramientas que he creado y ya de paso también comentaré un poco las herramientas que tengo pensado crear.

Empezamos con el exportador de escenas. Este no tiene mucho misterio. Es una "utility" con una interface bastante simple. Ahí va una imagen:

(http://www.arrakis.es/~jonathan01/IllusionFX/IFXSceneExporter01.jpg)

Como podéis ver, se da la posibilidad de exportar la geometría, las luces, las cámaras y los helpers. Esto es provisional ya que por ahora sólo he creado la parte que exporta la geometría.

Aquí tenéis una imagen del exporter en acción (finalizada la exportación):

(http://www.arrakis.es/~jonathan01/IllusionFX/IFXSceneExporter02.jpg)

Como podéis ver, "successfuly" está mal escrito (me acabo de dar cuenta) :P

Después tenemos el plugin de tipo material que es algo más interesante. Lo que hace este plugin es crear un nuevo tipo de material basado en el standard. Aqui podéis ver los tipos de materiales que yo tengo en MAX:

(http://www.arrakis.es/~jonathan01/IllusionFX/IFXShaderMtl01.jpg)

Al contrario que el standard, este tipo de material no utiliza diffuseMaps, specularMaps ni nada de eso, sino que hace referencia a los scripts de shaders que he creado (IFXShaders). Es en estos shaders donde se especifica si el objeto utilizará un normalMap, un diffuseMap, un specularMap, etc. También en ellos se hace referencia al vertex & pixel shader que se utiliza para procesar el objeto, render states y unas cuantas cosas mas. Aquí podéis ver un fragmento de un IFXShader en el que se define el vertex & pixel shader y sus parámetros:

 vs "main" "vs_1_1"; Vertex Shader v1.1
 {
  source "shaders/vertexShaders/Test/PosTex2.vs"; Fuente del vertex shader
 
  params; Parámetros del vertex shader
  {
   float4x4 "m4Transform"; Matriz de transformación (a clip-space)
  }
 }

 ps "main" "ps_1_1"; Pixel Shader v1.1
 {
  source "shaders/pixelShaders/Test/diffuseMap+glowMap.ps"; Fuente del pixel shader
 
  params; Parámetros del vertex shader
  {
   sampler "diffuseMap"; diffuseMap
   {
    source  "textures/metaltechfloor02final_pent2.jpg"; Archivo de textura para el diffuseMap

    addressU ADDRESS_WRAP; No queremos repetición de la textura
    addressV ADDRESS_WRAP;

    minFilter TEXF_LINEAR; Filtro de minificación
    magFilter TEXF_LINEAR; Filtro de magnificación
    mipFilter TEXF_LINEAR; Filtro para el mipmapping
   }

   sampler "glowMap"; glowMap
   {
    source  "textures/pentagramfloor_red_glow.jpg"; Archivo de textura para el glowMap

    addressU ADDRESS_WRAP; No queremos repetición de la textura
    addressV ADDRESS_WRAP;

    minFilter TEXF_LINEAR; Filtro de minificación
    magFilter TEXF_LINEAR; Filtro de magnificación
    mipFilter TEXF_LINEAR; Filtro para el mipmapping

    rgbModifiers; Modificadores a nivel de fragmento
    {
     rgbGen "fGlowIntensity"; Intensidad del glowMap
     {
      wave; Onda aplicada al modificador
      {
       type  WT_SQUARE
       base  1.0f
       amplitude 1.0f
       phase  0.0f
       frequency 1.0f
      }
     }
    }
   }
  }
 }



Evidentemente, necesitamos una textura representativa del IFXShader que será la que se despliegue en MAX. Esta textura se especifica en el IFXShader con la cláusula texMapForMAX. Aquí os pongo una imagen con el aspecto del plugin de material:

(http://www.arrakis.es/~jonathan01/IllusionFX/IFXShaderMtl02.jpg)

Como podéis ver, hay una lista con todos los shaders disponibles. Esta lista se crea al cargar el plugin. Lo que se hace es recorrer todos los archivos de tipo *.shader encontrados en el directorio especificado y va "parseándolos", recogiendo el nombre del shader y la textura que se utilizará en MAX como representación de dicho shader.

Y eso es todo en lo referente a las herramientas que llevo hechas hasta ahora.

Otra herramienta que tengo en mente es crear una serie de "helpers" personalizados. ¿Y para qué?. Pues la razón de esto es la inserción en la escena de objetos como puedan ser items (salud, armadura, etc), enemigos, etc. De esta forma, por ejemplo, al pinchar en el helper "bestia_mala", haríamos click en la posición donde insertar el modelo "bestia_mala" y en ese lugar se crearía un bounding box que representaría el tamaño del modelo (para poder hacernos una idea de las dimensiones de la escena en relación a los objetos que insertemos).

Después también tengo pensado crear otras herramientas mas, aunque sin duda la más importante será el exportador de meshes, la cual deberá tener soporte para character studio. Ahora mismo no tengo ni idea de cómo acceder a CS desde MAXScript. Si alguien sabe de algún documento sobre el tema, le agradecería que lo dijese :)

Y todo este rollo que os he soltado es para daros ideas en vuestros propios proyectos y por supuesto, ¡para que me las déis a mí tambien!. Estaré encantado de escuchar vuestras ideas sobre todo este tipo de herramientas necesarias para el desarrollo de un juego/demo.

Y bueno, creo que nada más por ahora. ¡Espero vuestras respuestas!

Saludos.
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: Mars Attacks en 02 de Septiembre de 2003, 09:38:03 PM
 Lo que me recuerda que no han habido nuevas peticiones, así que de momento se puede quedar tal y como está.

Por cierto, gana mucho el castillo con esa textura, aunque lo intentara hacer futurista ahora queda retrofuturista.

Por cierto (II), ¡¡¡tu video funciona en mi ordenador!!! Mis más sinceras felicitaciones  :D  (ole)  (uoh)

Edito, que has puesto el mensaje anterior mientras éste era un WIP: wow
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: BeRSeRKeR en 02 de Septiembre de 2003, 10:53:04 PM
 Jaja por desgracia, el día que saque una demo, a no ser que te hayas puesto una aceleradora con soporte para pixel shaders 1.1, no podrás verla. Aunque sacaría un video para los curiosos :)

Saludos
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: Grugnorr en 03 de Septiembre de 2003, 06:37:33 AM
 Como podéis ver, "successfuly" está mal escrito (me acabo de dar cuenta)

Intuyo que Elapsed Time(sg.) también :rolleyes:


Mola como estás orientando el motor y mola el MAXScript  (ole)  
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: ethernet en 03 de Septiembre de 2003, 07:21:17 AM
 Los hombres de verdad no usamos max y mucho menos si somos coders xd. Tiene muy buena pinta, enhorabuena berserky ;*
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: MChiz en 03 de Septiembre de 2003, 09:16:30 AM
 Esas nubes son impresionantes... voy a tener que ponerme yo tambien con shaders ;P
Muy guapo, en serio. Felicidades!
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: BeRSeRKeR en 03 de Septiembre de 2003, 03:03:20 PM
 
Cita de: "Grugnorr"Intuyo que Elapsed Time(sg.) también :rolleyes:
Cierto :D

MChiz, en realidad el efecto de las nubes no utiliza ningún pixel shader del otro mundo. El truco está en dibujarlo en dos pasadas (2 texturas) con alpha blending y un scroll. Digamos que el efecto es parecido al de quake3. De hecho, las texturas son las mismas :)

Saludos

PD: ethy, no pretenderás que modele los escenarios y demás matemáticamente, ¿no? (uoh)
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: MChiz en 03 de Septiembre de 2003, 08:29:04 PM
 Pues mola un huevazo :b Aun asi, no me puedes negar que lo suyo son los shaders ;bbbb
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: BeRSeRKeR en 03 de Septiembre de 2003, 08:51:31 PM
 De eso no hay duda. Si no fuera así, ¡no los habría utilizado! :)
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: DraKKaR en 03 de Septiembre de 2003, 10:12:36 PM
 Ei! eso del maxscript me ha puesto super cachondo, sobretodo para hacer plugins y "aplicacioncillas" dentro dle MAX. Yo he hecho un exportador para sacar la geometria, pero la verdad es que con maxscritp parece mucho mas comodo y menos lioso.
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: MChiz en 04 de Septiembre de 2003, 08:06:33 AM
 
Citarpero la verdad es que con maxscritp parece mucho mas comodo y menos lioso.

Bueno bueno... con la calma!! Hacerlo con MAXScript es sinonimo de tener tus herramientas centralizadas en MAX. Es comodo para todo el mundo. La interface es la de MAX ( eso que te ahorras, y dudo mucho que nos salga a cualquiera de nosotros una interface mejor ). Bien, pero eso de que es menos lioso... cuidadin! No has leido los jaleos que la gente ha tenido para exportar? ; ) Hay que aprender bien como va el MAX por dentro para hacer cosas complejas, pero si, esta muy bien :bb

Solo queria decir eso, que no todo es TAN bonito con MAXScript.

Ah! Y no tiene debugger!! ;bb

Un saludote!!
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: BeRSeRKeR en 04 de Septiembre de 2003, 09:53:40 AM
 Es cierto, al principio con eso de que no hay debugger cuesta capturar los errores. Con el tiempo, los mensajes de error que te da MAX son más o menos suficientes para encontrar de una forma más o menos rápida el error. Pero evidentemente nada que ver con el debugger del VC++, por ejemplo :D
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: ethernet en 04 de Septiembre de 2003, 10:32:22 AM
 En mi vida he usado un debugger :/ y por otro lado como el traceback de python para encontrar errores rapidamente no hay nada.  psé, lo q nos falta es programar los motores en maxscript, sucks
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: BeRSeRKeR en 04 de Septiembre de 2003, 11:23:39 AM
 ethy, ethy. No estas contento con casi naaaaada tiiiiiiooooooooooooo ;)

Bueno, discrepancias a un lado, aquí os dejo lo último que he hecho, que ha sido introducir iluminación per-fragment. Ha sido relativamente sencillo ya que no he tenido que tocar una sola línea de código de C++. Eso sí, he tenido que programar unos vertex & pixel shaders (2) y unos IFXShaders para tal propósito (tantos como materiales hay en la escena, es decir, 3) :D

Aquí tenéis el video (2.5MB, DivX 5.0.5)

A ver que os parece. He de decir que la iluminación la he mejorado con respecto a las imágenes/videos que saqué del visor de modelos de doom3 (aunque aún siguen habiendo algunos fallos). Y es que, en aquella ocasión estaba calculando mal el specular (se me olvidó pasar el half-vector a tangent-space :D) y no utilizaba normalization cubemaps.

Ale, have a nice day :)

Saludos.
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: Mars Attacks en 04 de Septiembre de 2003, 11:31:14 AM
 Veo la arista de las tuberías muy marcada, ¿no se debería ver totalmente liso?
Está estupendo, estoy deseando tener un equipo y una tarjeta en la que poder ejecutar eso de verdad  :D  
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: BeRSeRKeR en 04 de Septiembre de 2003, 11:42:33 AM
 Si, he de suponer que eso es por culpa de los bordes de la textura del normal map. A ver qué se puede hacer.

Bueno, para dar algo más de información, sobre todo a los que no conozcan mucho el tema de la iluminación per-fragment (o per-pixel). Decir que lo que son las paredes, el techo y el suelo, son 2 triángulos cada uno y las tuberías no tienen una malla demasiado densa. Aún así, y exceptuando el problema que menciona Mars (que si no me equivoco, es por culpa del normal map), la iluminación es bastante continua (suave). Esa misma escena utilizando iluminación per-vertex sería un desastre, concretamente el suelo que son sólo dos triangulos, no reflejaría el specular correctamente, mientras que con iluminación per-fragment, podéis observar bien definido el brillo de la luz.

Pues eso, para los que no lo sabían, ya conocéis una de las ventajas de la iluminación per-fragment :)

Saludos
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: DraKKaR en 04 de Septiembre de 2003, 11:46:44 AM
 A mi me interesa eso de los normalization cubemaps, busque informacion por internet pero no encontre nada. ¿Alguien puede guiarme un poco?

CitarBueno bueno... con la calma!! Hacerlo con MAXScript es sinonimo de tener tus herramientas centralizadas en MAX.

Bueno, si haces un plugin tambien estas centralizandolo en el MAX...

CitarHay que aprender bien como va el MAX por dentro para hacer cosas complejas, pero si, esta muy bien :bb

Exactamente lo mismo que haciendo un plugin, que tienes que saberte como van las clases y todo ese rollo.

Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: BeRSeRKeR en 04 de Septiembre de 2003, 12:05:01 PM
 Ahí van unos enlaces que podrían servirte (aunque me extraña que no los conozcas) :)

Si no recuerdo mal, utilizas OpenGL, así que la mejor fuente sobre el tema que conozco es:

http://www.ronfrazier.net/apparition/resea...l_lighting.html (busca normalization cube map)

Después tienes para Direct3D (aunque la teoría al fin y al cabo es la misma):

http://www.shaderx.com/direct3d.net/tutori...er/shader5.html

Concretamente, en el ejemplo RacorX11 comienza a hablar de ellos.

Después también tienes el libro The Cg Tutorial que en el tema sobre bump mapping habla sobre ellos y cómo utilizarlos (en Cg claro, aunque lo mismo se aplica para el HLSL).

A ver si eso te ayuda.

Saludos
Título: Sobre El Motorcillo Que Estoy Desarrollando...
Publicado por: MChiz en 05 de Septiembre de 2003, 10:01:55 PM
 
CitarBueno, si haces un plugin tambien estas centralizandolo en el MAX...
Y cual es el problema? ^_^ Yo dije eso a modo de ventaja...

CitarExactamente lo mismo que haciendo un plugin, que tienes que saberte como van las clases y todo ese rollo.

Bueno, no se. Cuando quieras ver propiedades extrañas de los objetos ( no solo malla ) ya veriamos si es lo mismo ; )

Y que yo no lo digo por atacar! A ver si nos tomamos las cosillas mejor!! : )