Posibilidades Del Motor 3D De La Nintendo DS
Total Page:16
File Type:pdf, Size:1020Kb
Posibilidades del motor 3D de la Nintendo DS Proyecto Fin de Carrera Ingenier´ıaT´ecnicade Telecomunicaciones Especialidad Imagen y Sonido Escuela Universitaria de Ingenier´ıaT´ecnicade Telecomunicaci´on Universidad Polit´ecnicade Madrid Pablo Santiago Liceras Tutor: Enrique Rend´onAngulo 9 de septiembre de 2013 Proyecto Fin de Carrera Tema: Gráficos por ordenador Título: Posibilidades del motor 3D de la Nintendo DS Autor: Pablo Santiago Liceras Titulación: Sonido e imagen Tutor: Enrique Rendón Angulo Departamento: DIAC Miembros del Tribunal Calificador: Presidente: Magdalena González Martín Vocal: Enrique Rendón Angulo Vocal Secretario: Alfonso Martín Marcos Fecha de Lectura: Septiembre 2013 Resumen La consola portátil Nintendo DS es una plataforma de desarrollo muy presente entre la comunidad de desarrolladores independientes, con una extensa y nutrida escena homebrew. Si bien las capacidades 2D de la consola están muy aprovechadas, dado que la mayor parte de los esfuerzos de los creadores amateur están enfocados en este aspecto, el motor 3D de ésta (el que se encarga de representar en pantalla modelos tridimensionales) no lo está de igual manera. Por lo tanto, en este proyecto se tiene en vista determinar las capacidades gráficas de la Nintendo DS. Para ello se ha realizado una biblioteca de funciones en C que permite aprovechar las posibilidades que ofrece la consola en el terreno 3D y que sirve como herramienta para la comunidad homebrew para crear aplicaciones 3D de forma sencilla, dado que se ha diseñado como un sistema modular y accesible. En cuanto al proceso de renderizado se han sacado varias conclusiones. En primer lugar se ha determinado la posibilidad de asignar varias componentes de color a un mismo vértice (color material reactivo a la iluminación, color por vértice directo y color de textura), tanto de forma independiente como simultáneamente, pudiéndose utilizar para aplicar diversos efectos al modelo, como iluminación pre-calculada o simulación de una textura mediante color por vértice, ahorrando en memoria de video. Por otro lado se ha implementado un sistema de renderizado multi-capa, que permite realizar varias pasadas de render, pudiendo, de esta forma, aplicar al modelo una segunda textura mezclada con la principal o realizar un efecto de reflexión esférica. Uno de los principales avances de esta herramienta con respecto a otras existentes se encuentra en el apartado de animación. El renderizador desarrollado permite por un lado animación por transformación, consistente en la animación de mallas o grupos de vértices del modelo mediante el movimiento de una articulación asociada que determina su posición y rotación en cada frame de animación. Por otro lado se ha implementado un sistema de animación por muestreo de vértices mediante el cual se determina la posición de éstos en cada instante de la animación, generando frame a frame las poses que componen el movimiento (siendo este último método necesario cuando no se puede animar una malla por transformación). Un mismo modelo puede contener diferentes esqueletos, animados independientemente entre sí, y cada uno de ellos tener definidas varias costumbres de animación que correspondan a movimientos contextuales diferentes (andar, correr, saltar, etc). Además, el sistema permite extraer cualquier articulación para asociar su transformación a un objeto estático externo y que éste siga el movimiento de la animación, pudiendo así, por ejemplo, equipar un objeto en la mano de un personaje. Finalmente se han implementado varios efectos útiles en la creación de escenas tridimensionales, como el billboarding (tanto esférico como cilíndrico), que restringe la rotación de un modelo para que éste siempre mire a cámara y así poder emular la apariencia de un objeto tridimensional mediante una imagen plana, ahorrando geometría, o emplearlo para realizar efectos de partículas. Por otra parte se ha implementado un sistema de animación de texturas por subimágenes que permite generar efectos de movimiento mediante imágenes, sin necesidad de transformar geometría. Abstract The Nintendo DS portable console has received great interest within the independent developers’ community, with a huge homebrew scene. The 2D capabilities of this console are well known and used since most efforts of the amateur creators has been focused on this point. However its 3D engine (which handles with the representation of three-dimensional models) is not equally used. Therefore, in this project the main objective is to assess the Nintendo DS graphic capabilities. For this purpose, a library of functions in C programming language has been coded. This library allows the programmer to take advantage of the possibilities that the 3D area brings. This way the library can be used by the homebrew community as a tool to create 3D applications in an easy way, since it has been designed as a modular and accessible system. Regarding the render process, some conclusions have been drawn. First, it is possible to assign several colour components to the same vertex (material colour, reactive to the illumination, colour per vertex and texture colour), independently and simultaneously. This feature can be useful to apply certain effects on the model, such as pre-calculated illumination or the simulation of a texture using colour per vertex, providing video memory saving. Moreover, a multi-layer render system has been implemented. This system allows the programmer to issue several render passes on the same model. This new feature brings the possibility to apply to the model a second texture blended with the main one or simulate a spherical reflection effect. One of the main advances of this tool over existing ones consists of its animation system. The developed renderer includes, on the one hand, transform animation, which consists on animating a mesh or groups of vertices of the model by the movement of an associated joint. This joint determines position and rotation of the mesh at each frame of the animation. On the other hand, this tool also implements an animation system by vertex sampling, where the position of vertices is determined at every instant of the animation, generating the poses that build up the movement (the latter method is mandatory when a mesh cannot be animated by transform). A model can contain multiple skeletons, animated independently, each of them being defined with several animation customs, corresponding to different contextual movements (walk, run, jump, etc). Besides, the system allows extraction of information from any joint in order to associate its transform to a static external object, which will follow the movement of the animation. This way, any object could be equipped, for example, on the hand of a character. Finally, some useful effects for the creation of three-dimensional scenes have been implemented. These effects include billboarding (both spherical and cylindrical), which constraints the rotation of a model so it always looks on the camera's direction. This feature can provide the ability to emulate the appearance of a three-dimensional model through a flat image (saving geometry). It can also be helpful in the implementation of particle effects. Moreover, a texture animation system using sub-images has also been implemented. This system allows the generation of movement by using images as textures, without having to transform geometry. Dedico el presente trabajo a mis padres, Mara y Jos´eMar´ıa.A mi madre por la ayuda y el soporte que me ha brindado, tanto a la hora de guiarme, como simplemente de escucharme hasta encontrar la soluci´ona un problema. A mi padre por sus consejos, que tratan siempre de transmitirme su experiencia. Y a ambos por la educaci´onque me han ofrecido y los valores que me han inculcado, enormes e impagables. A mi hermano Carlos, que siempre ha sido un gran apoyo t´ecnicoy fuente de crecimiento cient´ıficoy personal. A mi abuela y mis t´ıos,que hacen m´asf´acily divertida la existencia. A mis suegros, Jes´usy Manoli, por acogerme y darme apoyo y cari~no. A Enrique Rend´on,que me ha hecho descubrir mi pasi´ony el camino profesional que quiero tomar, y por su dedicaci´ona este proyecto. Y a Andrea. Porque tu apoyo, determinaci´ony paciencia, a lo largo de este proyecto, en la carrera, en el colegio, y en el resto de momentos de mi vida, han sido determinantes para llegar a ser la persona y el profesional que ahora soy. Te quiero. Tabla de contenidos 1. Introducci´on 1 1.1. Motivaci´on. .1 1.2. Objetivos . .2 1.3. Sumario . .2 2. Gr´aficospor ordenador 5 2.1. Modelado . .5 2.1.1. Herramientas de modelado . .6 2.1.2. Proceso de modelado . .6 2.1.3. Materiales del modelo . .8 2.1.4. Mapeado de texturas . .9 2.1.5. Texturizado . 10 2.2. Animaci´on. 13 2.3. Renderizado . 17 2.3.1. Etapa de aplicaci´on. 18 2.3.2. Etapa de geometr´ıa. 19 2.3.3. Etapa de rasterizado . 21 2.4. Comparativa con la Nintendo DS y conclusiones . 24 3. Nintendo DS 27 3.1. Especificaciones t´ecnicas del hardware . 28 3.2. Caracter´ısticasdel motor 3D . 30 3.2.1. Funcionamiento interno del chip gr´aficode la Nintendo DS . 31 3.2.2. Motor de geometr´ıa. 33 3.2.3. Motor de rasterizado . 39 3.2.4. Conclusiones . 41 4. Librer´ıaLibnds 43 4.1. Desarrollo en Nintendo DS . 43 4.1.1. Homebrew . 43 4.1.2. Entorno de desarrollo . 45 4.2. Libnds . 47 4.2.1. Input.h . 47 4.2.2. System.h . 48 4.2.3. Video.h . 48 4.2.4. Console.h . 49 4.2.5. Trig lut.h . 49 4.3. API 3D: videoGL . 49 v 4.3.1. Funciones . 50 4.3.2. Enumeradores de par´ametros . 57 4.4. Procedimiento general en el uso del motor 3D . 61 5. Trabajo previo al desarrollo 65 5.1.