Realización de un motor de render para dispositivos móviles basado en Irrlicht
description
Transcript of Realización de un motor de render para dispositivos móviles basado en Irrlicht
REALIZACIÓN DE UN MOTOR DE RENDER PARA DISPOSITIVOS MÓVILES BASADO EN IRRLICHTAutor: Javier Meseguer de PazDirigido 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áficoscubo = cargar modelo “cubo.3ds”cubo.color = rojovisualizar
Motor de
render API gráfica
Descripción de la escena
Sistema operati
vo
Introducción Razones para usar un motor de render
Es reutilizable Varias aplicaciones pueden compartir motor Ejemplo: El Unreal Engine 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 HeroCraft HiTech MobileDragon GLQuake / Quake II for Symbian OS
Estado del arte HeroCraft HiTech MobileDragon
Descartado por: El aspecto de las demos No haber podido ser ejecutado en el dispositivo
Estado del arte GLQuake/Quake II Engine for 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 renderPartiendo 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ón1. Identificar las partes dependientes del
API gráfica y la plataforma API gráfica: Driver Plataforma: Device
2. Crear el driver de OpenGL ES 1.x3. 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
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 – Driver OGLES
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
Y con eso terminamos la implementación. Veamos los resultados.
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 …
Hay muchas mejores posibles aún
Resumen
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