realización de un motor de render para dispositivos móviles basado en irrlicht

25
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

Upload: frey

Post on 22-Feb-2016

45 views

Category:

Documents


0 download

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 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

Page 2: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

Plan de la presentación Introducción Estado del arte Definición del proyecto Implementación Resultados Trabajo Futuro Resumen Demostración

Page 3: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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

Page 4: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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

Page 5: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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

Page 6: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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

Page 7: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

Estado del arte HeroCraft HiTech MobileDragon

Descartado por: El aspecto de las demos No haber podido ser ejecutado en el dispositivo

Page 8: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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

Page 9: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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!

Page 10: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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

Page 11: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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

Page 12: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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

Page 13: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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

Page 14: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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

Page 15: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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

Page 16: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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

Page 17: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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

Page 18: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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

Page 19: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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

Page 20: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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

Page 21: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

Y con eso terminamos la implementación. Veamos los resultados.

Resultados

Page 22: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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 …

Page 23: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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 …

Page 24: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

Hay muchas mejores posibles aún

Resumen

Page 25: Realización de un motor de  render  para dispositivos móviles basado en Irrlicht

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