En la arquitectura OVC, se incorporó desde el inicio la idea de utilizar un lenguaje que sirviera de intermediario entre las capa IO y Builder (o IO::Parser y Builder para ser más exactos). El propósito de este lenguaje era el de simplificar la creación de módulos Builder mediante la extensión en el número de formatos que serían capaz de soportar. La idea es simple: cargar a IO un parseador de formatos (gráfico, audio, física, etc.) que genere un lenguaje para los módulos builder que sea un estandar ampliamente documentado y soportado por la comunidad. De esta forma la implememtación de los módulos builder puede centrarse en el formato de destino, ignorando el formato de origen siempre que éste sea parseado por IO.
El mejor candidato para esta tarea nos pareció el engine gráfico Irrlicht. Los mótivos eran varios: es un proyecto libre de alta calidad, su uso en todos los aspectos (compilación, instalación, codificación) es bastante sencillo en comparación a otras librerías, tenemos un mínimo de experiencia con él, tiene un soporte de formatos gráficos bastante extenso e inclusive un formato gráfico propio basado en XML primer cadidato a ocupar el puesto de lenguaje intermedio para OVC.
Actualmente Irrlicht tiene soporte para:
* 3D Studio meshes (.3ds)
* B3D files (.b3d)
* Alias Wavefront Maya (.obj)
* Cartography shop 4 (.csm)
* COLLADA (.xml, .dae)
* DeleD (.dmf)
* FSRad oct (.oct)
* Irrlicht scenes (.irr)
* Irrlicht static meshes (.irrmesh)
* Microsoft DirectX (.x) (binary & text)
* Milkshape (.ms3d)
* My3DTools 3 (.my3D)
* OGRE meshes (.mesh)
* Pulsar LMTools (.lmts)
* Quake 3 levels (.bsp)
* Quake 2 models (.md2)
* STL 3D files (.stl)
Un cambio importante en este punto del desarrollo fue el descubrimiento del formato gráfico COLLADA. Su descubrimiento hizo temblar el proyecto y posicionarse como un claro vencedor como lenguaje intermedio. Los motivos son claros: ha sido desarrollado por grandes empresas de la industria del entretenimiento y del diseño gráfico, es un formato liberado a dia de hoy, basado en XML y con interesantes características como la posibilidad de incorporar descripción física y ser escalable mediante el soporte de extensiones.
Llegado el momento de la implementación y del testeo de Irrlicht, despues de mucho buscar un método para realizar la exportación al formato deseado, nos encontramos con soporte para escritura en 3 formatos: Irrmesh (el formato de malla propio de Irrlicht) COLLADA y STL. En principio el panorama es prometedor pero las cosas nunca son como parece. La exportación de formatos en Irrlicht no está tan desarrollada como debiera, ya que por lo visto esta característica (que no es nombrada entre las características principales del motor) fue implementada para el proyecto IrrEdit (un editor del grupo Irrlicht), proyecto de perfil freeware cuyo código no está liberado. En boca de los propio desarrolladores "la exportación no es una funcionalidad que deba ofrecer un motor gráfico". Por lo tanto, aunque la versión actual del SDK de Irrlicht nos ofrezca escritura en disco, nos topamos en el caso de COLLADA con un desarrollo de su implementación del 60% en cuanto a carga, en cuanto a escritura podría ser de menos visto lo visto (ya que el informe de desarrollo tampoco menciona el estado de las características de escritura), observando el XML generado se puede comprobar que el código generado corresponde como mucho a la versión 1.2.0 de COLLADA, estando este formato en la version 1.4.1 en la actualidad. Además, el formato de malla que genera Irrlicht tanto en codificación irrmesh como en collada actualmente, se queda tan solo en malla estáticas, con lo cual perdemos características avanzadas de modelos gráficos como son las malla animados mediante configuraciones de huesos.
Otra mala experiencia obtenida en tiempo de testeo con irrlicht ha sido la sorpresa de comprobar que no todo formato soportado es correctamente exportado a COLLADA (o Irrmesh). Por alguna razón que no llegamos a comprender, ciertos formatos no generan exportación alguna (obteniendo poco más que un esqueleto XML de COLLADA vacio). Los formatos con los que no podríamos contar de los prometidos por irrlicht serían:
* 3D Studio meshes (.3ds)
* Alias Wavefront Maya (.obj)
Los formatos que parecen sí ser exportados son:
* B3D files (.b3d)
* Irrlicht static meshes (.irrmesh)
* Microsoft DirectX (.x) (text)
* Milkshape (.ms3d)
* Quake 2 models (.md2)
Aunque algunos de ellos (como los modelos md2) presentan algunos errores de carga.
El resto de formatos no mencionados no han sido comprobados todavía.
En conclusión, en todo este proceso hemos obtenido algo bueno: la adjudicación de COLLADA como formato intermedio para la información gráfica e incluso física. Y gracias a su carácter extensible, en un futuro próximo podrá ser utilizado además para audio.
El punto débil ha sido que Irrlicht no ha alcanzado el nivel que nos habíamos planteado y esperábamos poder ofrecer con relativa sencillez. El parseo a código intermedio queda abierto por lo tanto, a un desarrollo de formatos específicos por terceros haciendo uso de la arquitectura modular de OVC para ampliar su funcionalidad, o al descubrimiento de alguna nueva librería con un mayor número de formatos soportados y con una exportación a COLLADA altamente desarrollada y actualizada.
Comentarios recientes
hace 19 semanas 2 días
hace 19 semanas 2 días
hace 19 semanas 2 días
hace 19 semanas 2 días
hace 19 semanas 2 días
hace 19 semanas 2 días
hace 19 semanas 3 días
hace 19 semanas 3 días
hace 19 semanas 3 días
hace 19 semanas 3 días