250 likes | 402 Views
Realización de un motor de render para dispositivos móviles basado en Irrlicht. Autor: Javier Meseguer de Paz Dirigido por: Antonio Berlanga de Jesús. Plan de la presentación. Introducción Estado del arte Definición del proyecto Implementación Resultados Trabajo Futuro Resumen
E N D
Realización de un motor de render para dispositivos móviles basado en Irrlicht Autor: Javier Meseguer de Paz Dirigido por: Antonio Berlanga de Jesús
Plan de la presentación • Introducción • Estado del arte • Definición del proyecto • Implementación • Resultados • Trabajo Futuro • Resumen • Demostración
Introducción • ¿Qué es un motor de render? • Componente software encargado de generar y visualizar información gráfica • Abstrae los mecanismos de creación de gráficos Motor de render Sistema operativo Descripción de la escena cubo = cargar modelo “cubo.3ds” cubo.color = rojo visualizar API gráfica
Introducción • Razones para usar un motor de render • Es reutilizable • Varias aplicaciones pueden compartir motor • Ejemplo: El UnrealEngine 3 es usado por 79 juegos • Abstrae la comunicación con el API gráfica • Independiza de ésta al resto de la aplicación • Facilita el mantenimiento de la aplicación • Como siempre que se separa el modelo de la vista
Introducción • Motivación del proyecto • Las capacidades gráficas de los teléfonos móviles van en aumento • Ya hay móviles con GPU • No hay un motor de render para móviles gratuito equiparable a los existentes para PC • Y sería muy interesante tenerlos para: • Juegos • Visualización de mundos virtuales • Explorar nuevas interfaces • Otras aplicaciones que puedan usar 3D • De hecho, hay varios proyectos en marcha en esta misma Universidad que se beneficiarían de un motor de render para móviles
Estado del arte • Motores de render para móviles • Comerciales • Casi todos son propietarios • El más famoso es: IdeaWorks 3D AirPlay • Gratuitos • HeroCraftHiTechMobileDragon • GLQuake / Quake II for Symbian OS
Estado del arte • HeroCraftHiTechMobileDragon • Descartado por: • El aspecto de las demos • No haber podido ser ejecutado en el dispositivo
Estado del arte • GLQuake/Quake II Enginefor Symbian OS • Descartado por: • Obsoleto en general • Difícil de usar y modificar • No es de propósito general (especializado en FPS) • Por esto, decidimos crear nuestro propio motor de render • Partiendo de un motor gráfico de código abierto para PC
Estado del arte • Esto implica que teníamos que decidir: • Qué API gráfica usar • Qué motor de render de código abierto para PC migrar • A qué plataforma / sistema operativo • Usando qué dispositivo como referencia • Para tomar una decisión informada, estudiamos el estado del arte de todas estas tecnologías • ¡Especialmente la plataforma objetivo y el motor de render de PC!
Estado del arte • La decisión de la plataforma afecta a todo lo demás • No hay vuelta atrás • No todas las opciones son posibles. Hay que comprobar que: • Sea posible desarrollar gratuitamente para la plataforma • Sea posible ejecutar un motor gráfico sin tener que certificarlo • Dentro de las opciones posibles, hay que valorar • Qué lenguajes de programación hay disponibles • Facilidades a la migración desde otras plataformas • Madurez de la plataforma • Popularidad de la plataforma
Estado del arte • También especialmente importante qué motor migrar • Hay muchos motores de render de código abierto para PC • No obstante, destacan OGRE 3D e Irrlicht • OGRE 3D es más avanzado, pero más complejo • Irrlicht es más sencillo, pero más rápido y simple • Tiene menos líneas de código dependiente del API • No tiene dependencias externas • Intentos de migración • OGRE 3D fue migrado a Windows Mobile hace mucho. • Ha habido dos intentos de migración de Irrlicht • mIrrlicht • Irrlicht-em
Definición del proyecto • Planteamiento formal • Migrar Irrlicht 1.4.1 a S60, tomando como dispositivo objeto el Nokia N95 8Gb • ¿Por qué Irrlicht? • Es más simple • ¿Por qué el Nokia N95 8Gb? • Es muy potente, tiene aceleración gráfica, y teníamos disponibilidad de uno • ¿Por qué S60? • Es la plataforma usada por el N95 • Hay disponible un capa POSIX y una STL (OpenC/C++) • Esto implica que el API gráfica a usar es OpenGL ES 1.x
Definición del proyecto • Requisitos • Conseguir una versión funcional • Mantener la compatibilidad con la versión oficial y el resto de sistemas operativos • Fuera de ámbito • Implementar nuevas técnicas • Que funcione en otros dispositivos • Incluyendo el emulador • Arreglar bugs
Implementación • Identificar las partes dependientes del API gráfica y la plataforma • API gráfica: Driver • Plataforma: Device • Crear el driver de OpenGL ES 1.x • Crear el device para S60
Implementación – Driver OGLES • Driver de OpenGL ES 1.x • Partimos del driver de OpenGL • Algunas diferencias pudieron salvarse: • Carencia de primitivas • No hay quads ni polígonos • Carencia de modos de rasterización • No hay GL_LINES ni GL_POINTS • Carencia de soporte para los formatos de color de Irrlicht • Otras
Implementación – Driver OGLES • Otras no: • Carencia de shaders • Usado para técnicas avanzadas como el bump-mapping • Carencia de ciertos modos de envoltura • Prácticamente no se usa... • Carencia de ciertos modos de iluminación • Reflexión especular dependiente del punto de vista • Carencia de generación automática de coordenadas de texturas • Se usa para simular reflexiones
Implementación – Device S60 • Peculiaridades de la programación Symbian • Hay tres compiladores • WINSCW – genera x86 para el emulador • GCC-E – genera ARM, gratuito y limitado • ARM RVCT – genera ARM optimizado, de pago y el más completo • El API de Symbian está basado en Frameworks • Afortunadamente no es obligatorio usarlos • No obstante, eso está menos documentado • Symbian es resultado de una evolución • Hay que documentarse mediante ejemplos, porque los nombres de las cosas ya no corresponden con lo que son
Implementación – Device S60 • Antes de crear el device, hay que hacer algunos cambios • Algunos debidos a que el compilador es de Symbian C++ y no ANSI C++ • Ejemplo: Problemas con definiciones en los headers • Otros debidos al cambio de compilador • Ejemplo: Cómo compactar las estructuras • Otros debidos al cambio de plataforma • Ejemplo: Las convenciones de llamada
Implementación – Device S60 • Finalmente podemos crear el device • Tiene que poder hacer lo siguiente: • Gestionar el sistema de ficheros • Gracias a OpenC++ se puede usar POSIX para ello. • Crear la ventana • Obtener el modo de video • Dormir la aplicación
Implementación – Device S60 • Manejar eventos • Relacionados con las ventanas • Entrada de datos del usuario • Es muy distinta en PC y en el N95 • Falta de teclado QWERTY • Cuando se requiere inmediatez: modo normal • Cuando se requieren todas las letras: modo multi-tapping • Falta de ratón • Se emula con el teclado
Resultados Y con eso terminamos la implementación. Veamos los resultados.
Resultados • Balance de características • Hemos perdido (en orden de importancia) • Shaders (y por tanto normal mapping) • Reflejos • Reflexión especular dependiente de la vista • Modos de envoltura de texturas • Pero conservamos • Soporte para múltiples formatos de fichero • Soporte para 2D • Un buen sistema de partículas • Una GUI • Detección de colisiones básica • Gestión de escena • …
Trabajo futuro • Actualizar la versión de Irrlicht a la última • En lo que cambiábamos la versión 1.4.1 ha salido la 1.5 • Optimizar el driver de OpenGL ES 1.x • Añadir nuevas características • Bump-mapping, luces direccionales, bloom, refracción… • Añadir soporte para OpenGL ES 2.x • Añadir soporte para otras plataformas • Añadir soporte para otros dispositivos • …
Resumen Hay muchas mejores posibles aún
Resumen • Queríamos un motor de render para móviles gratuito • No encontramos ninguno de calidad • Decidimos portar uno de PC a una plataforma móvil • Concretamente Irrlicht a S60 • Para ello hubo que crear • Un driver de OpenGL ES • Un device para S60 • Logramos un motor para móviles que conserva casi todas las características del Irrlicht original