.comment-link {margin-left:.6em;}

PROYECTO UTOPIA

jueves, mayo 04, 2006

oFusion

Ogre dispone de una de las mejores herramientas de exportación que he visto en años: oFusion. Únicamente he encontrado un pequeño problema, y es que el compilador octree de ogre funciona con ficheros en formato scene y oFusion exporta los archivos en formato osm. Pero por suerte tiene fácil solución ya que ambos archivos, que no son mas que una descripción bastante general de la escena, están en formato XML. Gracias a cygwin me preparé un pequeño script en perl para hacer la conversión:


#!/usr/bin/env perl

# The author(s) have made the contents of this file
# available under a CC-GNU-GPL license:
#
# http://creativecommons.org/licenses/GPL/2.0/
#
# A copy of the full license can be found as part of this
# distribution in the file COPYING.
#
# You may use this software in accordance with the
# terms of this license. You agree that you are solely
# responsible for your use of this software and you
# represent and warrant to the author(s) that your use
# of this software will comply with the CC-GNU-GPL.
#
# Copyright 2006, Victor Marzo (samsaga2@gmail.com)
#

# USE: osm2scene.pl < demo.osm > demo.scene

use XML::Simple;
use XML::Writer;
use Data::Dumper;

my $xml_osm = XMLin('-');
my $xml_scene = new XML::Writer(DATA_MODE => true, DATA_INDENT => 4);

$xml_scene->startTag('scene', 'formatVersion' => '0.0');

my $id = 0;

for my $entities ($xml_osm->{entities}) {
$xml_scene->startTag('nodes');

for my $entity_name (keys %{$entities->{entity}}) {
my $entity = $entities->{entity}->{$entity_name};

$id++;

$xml_scene->startTag('node',
'name' => $entity_name,
'id' => $id);

$xml_scene->emptyTag('position',
'x' => $entity->{position}->{x},
'y' => $entity->{position}->{y},
'z' => $entity->{position}->{z});

$xml_scene->emptyTag('rotation',
'qx' => $entity->{rotation}->{x},
'qy' => $entity->{rotation}->{y},
'qz' => $entity->{rotation}->{z},
'qw' => $entity->{rotation}->{w});

$xml_scene->emptyTag('scale',
'x' => $entity->{scale}->{x},
'y' => $entity->{scale}->{y},
'z' => $entity->{scale}->{z});

$xml_scene->emptyTag('entity',
'name' => $entity_name,
'id' => $id,
'meshFile' => $entity->{filename},
'castShadows' => $entity->{CastShadows});

$xml_scene->endTag('node');
}

$xml_scene->endTag('nodes');
}

$xml_scene->endTag('scene');


Tendréis que instalaros los modules XML::Simple y XML::Writer pero usando el CPAN del perl no deberíais tener ningún problema.

martes, mayo 02, 2006

Abril. Resumen del mes. Mes de infarto.

Mes de infarto.

El mes de abril ha sido un mes de cambios ‘brutales’ en nuestro proyecto. Después de diversas pruebas con la primera demo, nos dimos cuenta de la gran perdida de rendimiento que nos causaba la librería Cal3D. Otros factores añadidos que afectaban al rendimiento nos hicieron retomar una idea que en tiempos ya habíamos barajado en el proyecto, usar un motor de render ya desarrollado. Necesitabamos que fuera fiable y se le viese continuidad a su desarrollo. Al final nos decidimos por Ogre. No será el mejor, pero se adapta a las necesidades que tenemos.

En un tiempo record para nosotros, se ha montado la primera demo sobre la que se estaba trabajando con todas las características que ya estaban incorporadas, como el motor de sonido y físicas. Samsaga2 se lo ha currado, si señor. Además, ya estamos añadiendo lo que será parte del control de IA.

No hemos tenido suficiente con estos cambios, y nos hemos reorganizado a nivel de coordinación de proyectos. Nuestro amigo Manolin se encargará a partir de este mes de la coordinación de gráficos permitiendo a Nwanda centrarse en guión.

Porque esa es otra. También estamos de reforma en guión. Pero sobre esto mejor no contaré nada. Que luego me regañan.

Saludos.

martes, abril 04, 2006

Marzo. Fin de mes.

Soplan vientos de cambio en nuestro proyecto. A Marcus le gustan estas expresiones. :-)

Este mes, después de evaluar los resultados de la segunda demo del motor donde incorporábamos sonido, físicas y scripts, los resultados nos han demostrado que debíamos revisar en profundidad el núcleo de nuestro motor. Esto nos ha hecho recapacitar sobre varias de las ideas que hace tiempo estábamos barajando.

En breve comunicaremos cuales van a ser los cambios que vamos a realizar. Cambios que, seguramente, afectarán al motor de render y al motor de física del juego.

Saludos.

martes, marzo 21, 2006

¿Está muerto Cal3d?

La última versión apareció exactamente el día 12-01-2005, hace ya mas de un año. Nunca ha sido una librería que se actualice cada pocos meses y ya sospechaba hace tiempo que algo ocurría. En el foro uno de los desarrolladores se empeña en decir que Cal3d esta un poco congelado pero no muerto.

Una de las grandes lacras de cal3d es que no es una librería muy optimizada, se nota demasiado el escaso rendimiento que ofrece. Un par de modelos en pantalla se puede comer perfectamente mas del 30% del tiempo del render. Además no hace uso de técnicas más modernas como tirar de los vertex shaders para quitarle trabajo a la cpu.

Lo malo es que no hay muchas alternativas (Animadead es una de ellas).

jueves, marzo 16, 2006

Marzo. Primera quincena. Estado del proyecto.

El repaso del estado del proyecto de esta primera quincena de marzo es muy animador.

El avance ha sido impresionante en estos últimos días en todos los frentes. Repasemos.

Se ha dejado establecido todo el proceso de exportación de modelos desde 3DMax a Cal3D controlando todos los problemas que puedan surgir. Avanzamos también en el editor de particulas y el gestor de niveles, todo esto en C#.

En IA y carga de niveles tenemos controlados gran cantidad de problemas. El avance esta siendo arrollador.

El sonido seguramente formará parte de esta demo. El motor de sonido aportado por Synchrnzr y el trabajo de nuestro nuevo músico nos permitirán incorporar sonido en 5.1 y posiblemente, en 7.1.

En gráficos también avanzamos. Esta costando mantener un equipo estable de personas pero creo que lo conseguiremos. En breve subiremos más pantallas con los personajes elaborados por ellos.

Como bien dice nuestro compañero Samsaga2, el objetivo que nos hemos marcado de aquí a dos meses, la segunda demo del motor, nos permitirá tener un porcentaje muy alto del motor terminado. Con lo que para la siguiente demo nos concentraremos en mejorar la calidad del render, eso si, sí el compilador de Shaders nos lo permite. :-)




lunes, marzo 13, 2006

EXPORTACIÓN DE MODELOS DESDE 3DMAX A CAL3D.

INTRODUCCIÓN

Dentro del proyecto Utopía, una de las librerías externas que usamos es CAL3D. Esta librería permite la presentación de modelos en 3D con varias animaciones, permitiendo que se realicen transiciones entre ellas. Además, el modelo permite incorporar materiales y texturas.

Antes de comenzar ha explicar el proceso de exportación de un modelo desde 3DMAX a CAL3D, voy a comentar que ficheros componen un modelo en CAL3D.

La base de un modelo en CAL3D la compone el esqueleto. Sin esqueleto no es posible trabajar con un modelo en CAL3D. Así, previamente, todo modelo en 3DMAX deberá tener realizado su rigging para poder exportarlo. En las imágenes se puede ver el esqueleto y la malla con las texturas aplicadas.

















El esqueleto para CAL3D esta identificado por los ficheros con extensión csf.

La malla que compone el modelo se puede exportar en uno o varios ficheros. Eso depende de cómo se haya modelado la figura en el 3DMAX. Por ejemplo, si un modelo se ha creado en tres partes, cabeza, tronco y piernas, se puede exportar con tres mallas. Esto es lo recomendable ya que se producen errores inesperados cuando se intenta exportar en una sola malla. En la figura se pueden observar las diferentes partes de la malla indicadas por los colores.










Las mallas en CAL3D están identificadas por los ficheros con extensión cmf.

Todo modelo puede tener varias animaciones. Y como ya he explicado en otro post es posible realizar transiciones entre ellas o aplicarlas en un momento dado. Las animaciones están identificadas por los ficheros con extensión caf.


Al hablar de materiales, debemos tener en cuenta varios factores. Si el modelo se ha dividido en varias mallas, deberá tener un material por malla. Un material indica de manera básica, como se aplicará la luz y las transparencias sobre el modelo.

CAL3D para un material usa los valores habituales para definir los colores y valor para el brillo:

ambientColor, diffuseColor, specularColor y shininess.

También, puede indicar que usa una o varias texturas. Los materiales están identificados por los ficheros con extensión crf.

No olvidemos que para facilitar la carga de un fichero se recomienda construir un fichero de texto donde indicamos cuales son todos los ficheros que forman el modelo.

Esto es, a grandes rasgos, los ficheros que forman la estructura de un modelo en CAL3D.

El contenido de un fichero cfg podría ser así:

################################################
#
# Marinero Futuro - Cal3d cfg File
#
################################################

scale=1.0

################# Skeleton #################
skeleton=marineroF-esqueleto.csf

################# Meshes #################
mesh=marineroF-malla.cmf

################# Animations #################
animation=marineroF-andando.caf

################# Materials #################

material=marineroF-cuerpo[0].crf
material=marineroF-cabeza[1].crf

EXPORTACION

Recordar que debemos tener los plugins de exportación del CAL3D instalados como indican las instrucciones en el 3DMAX. Comenzamos:

La exportación siempre se debe comenzar con el esqueleto de la figura. El esqueleto de la figura se usará para controlar las mallas y animaciones que se pueden asociar a ese esqueleto.

Para eso en el 3DMAX seleccionamos únicamente el biped. Si lo seleccionamos en modo ‘figure mode’ la figura se exportará con la posición que por defecto adopta el biped.

Al exportar el biped se pueden seleccionar los nodos que queremos exportar aunque mi experiencia me ha demostrado que CAL3D no acepta fácilmente que se quiten nodos de un esqueleto.


















Una vez que tenemos exportado el esqueleto podemos exportar en cualquier orden las mallas o las animaciones.

Si se elige exportar primero las mallas, se debe tener en cuenta que pueden surgir algunos problemas. Si el modelo esta compuesto por varias mallas es mejor exportar cada una de ellas aparte. Se pueden prevenir problemas en la exportación, provocados por el esqueleto o los materiales. En algunos casos, el exportador falla estrepitosamente al intentar exportar todo un modelo en una sola malla.

En el ejemplo se ve que este modelo esta compuesto de una sola malla.









Al exportar una malla se debe seleccionar el esqueleto que le corresponde. CAL3D no acepta que se exporte una malla de un modelo sobre el esqueleto exportado de otro modelo.










Podemos indicarle el número máximo de huesos que influyen sobre un vértice y el peso mínimo que tendrá un hueso para esa influencia. Los valores que aparecen por defecto, en general, no es necesario cambiarlos.



Al exportar un modelo se puede seleccionar que nos calcule el ‘LOD’ de la figura para luego usarlo a la hora de reducir el número de polígonos que se mostrarán.

Por ultimo, nos pregunta si queremos hacer uso de un sistema que esta en fase de pruebas para el tratamiento de telas.


Si vamos a exportar las animaciones, debemos tener la precaución de que el modelo no este ‘figure mode’. Si esta en este modo, no tendremos generada animación alguna en la exportación. Para exportar una o varias animaciones lo único que debemos hacer es indicar el esqueleto que se usará para el modelo. Se pueden activar o desactivar nodos. Con lo que se pueden dejar partes de un modelo sin animación o que se produzcan efectos no deseados.

Como se ve en la pantalla, es posible exportar partes de una animación o reducir el número de ‘frames’ que se usan en la animación.



Para exportar los materiales debemos de tener cada uno de los materiales del modelo en un slot en la ventana de materiales del 3DMAX.

Además, cada material deberá tener asignado en su nombre un número entre corchetes empezando con el cero. Así, si tenemos tres materiales, uno para la cabeza, otro para el tronco y el último para las piernas se llamarán:

Cabeza[0]

Tronco[1]

Piernas[2] ...

O algo similar pero respetando que deben llevar los números en el nombre.

El orden de exportación se debe respetar, exportando cada uno de los materiales en su orden numérico. Además, los nombres en los ficheros exportados, deberán llevar también el mismo número que se ha usado en el 3DMAX.

Dicho orden se debe respetar en el orden de carga de los materiales y la asignación de las mallas ya que si no se hace así, el material se cargará pero no CAL3D no lo aplicará correctamente.

En el caso en el que se modifique una malla o se cambie un material, se deberá exportar otra vez, tanto la malla como el material. Si no se hace así, el resultado seria incorrecto y partes de la malla se presentarían sin texturas como se puede ver:

Y eso es todo. Si nuestra exportación es correcta el resultado se podrá comprobar en los visores de modelos que incorpora el CAL3D o en el programa para analizar los modelos que forma parte de nuestro proyecto. El resultado será el siguiente:



Espero que este tutorial os sirva para poder trabajar mas comodamente con las exportaciones. En breve, subiremos este tutorial a nuestra web en formato pdf para su descarga.

Saludos a todos.

jueves, marzo 02, 2006

Resumen de febrero.

El mes de febrero lo finalizamos con algunos cambios de peso.

Se han establecido los nuevos estatutos de nuestro proyecto que en breve se publicarán en la Web. Con esto lo único que pretendemos es mejorar la seriedad de nuestro trabajo. Eso no quiere decir que nos vayamos a convertir en una empresa consultora de esas que pululan por nuestro mundo. O esas empresas desarrolladoras que solo ven en un juego un producto industrial. No nos vamos a volver serios en esa línea y seguiremos siendo ese grupo de amigos que se lo pasan bien haciendo algo que les gusta. Os lo juro sobre la escopeta del Doom.

Eso si. Queremos dinerito. Nuestro objetivo final es vender nuestro trabajo. Esperemos que así sea.

El objetivo de aquí a tres meses es tener una demo básica con algunos personajes que permitan evaluar como vamos avanzando en la inteligencia artificial, físicas, scripts y en general, los interiores del juego. Ya tenemos avanzado por parte de Synchrnzr el motor de sonido así que igual hasta podremos ofrecer música en nuestra demo.

Este es el primer paso para ir mostrando nuestro trabajo.

En breve, para facilitar la labor de los grafistas, publicaremos un tutorial de cómo realizar la exportación de modelos desde el 3Dmax para ser usados por Cal3d.

Saludos a todos.