Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Sobre El Motorcillo Que Estoy Desarrollando...

Iniciado por BeRSeRKeR, 02 de Septiembre de 2003, 05:52:16 PM

« anterior - próximo »

BeRSeRKeR

 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:

  • Render a través de Direct3D 9.0
  • Uso de vertex & pixel shaders 1.1
  • Definición de las propiedades visuales de los objetos a través de IFXShaders (shader scripts)
  • Sistema de recursos con capacidad de carga desde archivos comprimidos
Herramientas desarrolladas para 3DStudio MAX (utilizando MAXScript):

  • Plugin de tipo "material" para asignar de forma sencilla IFXShaders a la escena
  • Plugin de tipo "utility" para exportar la escena
Eso es lo que llevo hecho hasta ahora. Lo que falta por hacer es:

  • Sistema de determinación de visibilidad (seguramente un octree)
  • Iluminación per-fragment
  • Sombras
  • Programar muchos shaders (ole)
  • Exportar animación de los objetos de la escena
  • Mejora del sistema de manejo de errores
  • Optimización bestial del sistema de render :D
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:

  • El manejo de errores es pésimo
  • El render es lentísimo
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.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

NeLo

 Excelente BeRS, como todo lo que haces ;).

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

Saludos.
Drowning deep in my sea of loathing

Haddd

 ¡Muy bonito el efecto de las nubes!

Venga, ánimo, sigue así!!

Zaelsius

 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.

BeRSeRKeR

 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
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Capiflash

 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

BeRSeRKeR

 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:



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):



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:



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:



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.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Mars Attacks

 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

BeRSeRKeR

 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
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Grugnorr

 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)  
hat the hells!

ethernet

 Los hombres de verdad no usamos max y mucho menos si somos coders xd. Tiene muy buena pinta, enhorabuena berserky ;*

MChiz

 Esas nubes son impresionantes... voy a tener que ponerme yo tambien con shaders ;P
Muy guapo, en serio. Felicidades!

BeRSeRKeR

 
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)
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

MChiz

 Pues mola un huevazo :b Aun asi, no me puedes negar que lo suyo son los shaders ;bbbb

BeRSeRKeR

 De eso no hay duda. Si no fuera así, ¡no los habría utilizado! :)
¡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.