Generación procedimental de contenido en el desarrollo de videojuegos Rodrigo Baravalle1 , Claudio Delrieux2 y Cristian Garcı́a Bauza3 1 Universidad Nacional de Rosario Universidad Nacional del Sur 3 CICPBA, UNICEN 2 Resumen Se presenta una biblioteca de desarrollo para utilizar técnicas de generación procedimental en la creación de texturas de materiales, junto con un editor que hace uso de ellas. La propuesta puede ser utilizada por programadores, incluyendo la funcionalidad en sus desarrollos y por diseñadores, utilizando el editor provisto. Aprovechando la capacidad de cálculo de las placas gráficas actuales, la solución fue implementada en GPU a través de scripts de shading Cg. 1. Introducción En un principio los videojuegos debieron construir representaciones gráficas de objetos con recursos muy limitados. Esto motivó la aparición de un conjunto de nuevos algoritmos para obtener buenos resultados a un costo computacional aceptable (ver por ejemplo demoscene4 ). Por otro lado, con el paso de los años, estas limitaciones han sido menores, aunque la calidad gráfica requerida va en aumento. La complejidad creciente de la generación del contenido multimedia para lograr recrear escenas ha hecho que surjan técnicas complementarias, buscando un modelado más automatizado y escalable. Entre los elementos que conforman el contenido multimedia de un juego encontramos desde los personajes a los niveles, desde los sonidos a las imágenes de texturas. Estas últimas, pueden ser divididas en dos conjuntos: estáticas, y procedimentales. Las primeras no presentan un comportamiento dinámico y generalmente están representadas por mapas de pixeles (imágenes), almacenadas y distribuidas en el paquete del juego. Las texturas procedimentales en cambio, son generadas a partir de un algoritmo. Las ventajas de estas es el ahorro de memoria y espacio en disco (al no almacenarse, el disco no se utiliza), ya que son calculadas durante la ejecución del programa; y por otro lado la diversidad de elementos alcanzada, sin necesidad de intervención durante el proceso. Por ejemplo, el espacio ocupado en la memoria de la GPU por 50 texturas de 512x512 pı́xeles es de 50MB. Si bien dichas memorias cada vez son mayores, también ocurre esto con los escenarios de los juegos. Otra ventaja que puede mencionarse es el ahorro en ancho de banda 4 http://en.wikipedia.org/wiki/Demoscene de GPU, o en algunos juegos online donde parte del contenido es transferido del servidor al cliente, debido a que no se necesita transferir las texturas. Adicionalmente, los algoritmos de generación de texturas procedimentales pueden ser utilizados en editores que provean a los diseñadores nuevas formas creativas, utilizando generación procedimental a través de un editor y guardando las imágenes en mapas estáticos, logrando una solución hı́brida. 2. Antecedentes y propuesta El modelado procedimental ha estado presente en el desarrollo de video juegos. El juego Rescue on Fractalus5 (desarrollado para la primera generación de consolas), utilizaba técnicas fractales para crear montañas. Igualmente, la labor artı́stica humana nunca ha podido ser reemplazada y a medida que los escenarios en juegos se hicieron más complejos, se ha requerido un número cada vez mayor de artistas, superando por mas del doble al número de desarrolladores en los equipos. Está claro también que con esta complejidad de escenarios, el espacio ocupado (memoria, disco) por el contenido de los juegos ha ido creciendo de manera constante. Puede ser útil comenzar a ejercer un control sobre los recursos utilizados, y un método sencillo es la utilización de técnicas procedimentales. Por ejemplo, en juegos estilo RPGs, es posible diseñar el transcurso del juego, logrando mantener el misterio sobre posibles niveles u objetivos distintos, y facilitando el desarrollo de nuevas misiones, agrupadas bajo paquetes de expansión, el cual también representa un interés económico para la empresa desarrolladora [7]. Hay otros casos actuales, como el juego Roboblitz6 que genera sus texturas algorı́tmicamente o el juego 3D Krieger7 que ocupa solo 96 kb. Si bien es cierto que durante mucho tiempo el costo computacional de elementos procedimentales no permitió su utilización de manera masiva, la aparición del hardware programable está ayudando a superar esta dificultad. Proponemos aquı́ un trabajo basado en el modelado por Fourier para generar contenido procedimental, en particular texturas de materiales. El mismo garantiza que cualquier imagen en dos dimensiones puede ser representada con diferentes funciones seno en distintas fases y amplitudes [5]. Estas funciones pueden obtenerse con el cálculo de la Transformada de Fourier. Gracias a este modelo, sabemos que la composición de funciones muy simples pueden lograr resultados que muestran complejidad. Otros modelos, pueden observarse en el capı́tulo 4 de [3], en [4], o en [6]; sin embargo, la mayorı́a de estos modelos falla a la hora de presentar sencillez de sı́ntesis, además de poder de control sobre los materiales representados, o bien el modelo sólo esta diseñado para un material en particular. Se procede a presentar entonces una biblioteca que permite modelar y sintetizar distintos tipos de materiales contando con las ventajas de un modelado procedimental, además de un editor que hace uso de la misma. Es posible representar 5 6 7 http://en.wikipedia.org/wiki/Rescue on Fractalus http://www.roboblitz.com/ http://en.wikipedia.org/wiki/.kkrieger/ materiales existentes en la naturaleza, como madera, mármol, granito, arena, agua o vegetación; y otros que son producto del ser humano, por ejemplo telas o mosaicos. Los mismos son generados a partir de distintas funciones simples, las cuales reciben distintos parámetros que son propuestos en el modelo. De esta forma, las texturas pueden variar durante el transcurso del juego, permitiendo que el desarrollo del mismo pueda afectarlas de acuerdo a los sucesos de manera dinámica. Debido a los costos computacionales de las texturas procedimentales, se realiza una implementación en hardware paralelo que sintetiza las texturas en el pipeline de la GPU. Gracias a esto, la sı́ntesis de los materiales tiene lugar en tiempo real. 3. Desarrollo El modelo matemático que permite la implementación de las ideas expuestas resulta muy simple. El esquema básico del mismo es presentado en la Figura 1. Figura 1. Esquema básico del modelo En el gráfico se observa una base de texturas, la cual está formada por una cantidad fija de elementos que intentan capturar las principales caracterı́sticas morfológicas de los materiales que se buscan. Una aplicación ligada a la biblioteca (como el editor) puede solicitar la sı́ntesis de un determinado material, el cual luego es sometido a operaciones de manera dinámica (sı́mbolo + del gráfico) para en última instancia producir la imagen solicitada. Las operaciones fueron implementadas en el lenguaje de shading Cg, el cual permite que las texturas sean computadas en la GPU. Por medio de la aplicación de operaciones básicas de texture mapping como escala, rotación y traslación, además de combinación de elementos del conjunto, a través de operaciones aritméticas, se obtiene la sı́ntesis de los distintos materiales. Los elementos de la base están divididos principalmente en dos clases, una de ellas utiliza funciones definidas en base a ecuaciones matemáticas basadas en funciones seno mientras que la otra utiliza el método Spot Noise [2], lo cual añade cierto nivel de realismo a los materiales finales. El editor fue desarrollado en el entorno Qt. La aplicación consta de un ABM de texturas, permitiendo ubicarlas en una escena 3D. Cada textura puede ser modificada permitiendo establecer los parámetros que la definen, en tiempo real. Dicha implementación confirmó las ideas presentes en la teorı́a respecto a la sencillez y flexibilidad de sı́ntesis de materiales. El editor entonces, permite el cálculo de las texturas en la GPU gracias a la utilización de la biblioteca. 4. Resultados En la Figura 2 se muestran las texturas logradas para los materiales de mármol, madera y granito. Figura 2. Mármol, madera y granito generados Además de los materiales naturales se generaron también algunos sintéticos, demostrando la capacidad del modelo. Algunos resultados obtenidos pueden verse en la Figura 3. Se observan en la primer fila, un tipo de mármol, la corteza de una palmera y un tipo de granito; mientras que en la segunda fila fueron sintetizados nubes, mosaicos, vegetación y arena. Como ejemplo, la imagen que representa la corteza de una palmera, fue sintetizada a partir de la utilización de dos texturas, ambas con una rotación diferente aplicada. El agregado de una textura de spot noise, produce las caracterı́sticas estocásticas deseadas en este tipo de materiales. Por ejemplo para generar la textura de madera de la Figura 4, la sı́ntesis que se utilizó es: sin(αu + βsin(u) + γsin(v)). Donde α, β, γ son parámetros controlables. Se debieron setear los siguientes parámetros para sintetizar el material: (1) Figura 3. Distintos materiales generados Parametro α, para establecer la forma sinusoidal inicial de la estructura base de la textura (imagen de la izquierda de la Figura 4). Parametro β, con valor cero, con lo cual el parámetro γ hace que la función sin(v) actúe como la función turbulencia, produciendo funciones seno repetidas a lo largo de la coordenada u; ver segunda y tercer imagen (desde la izquierda) de la Figura 4. Parámetro γ, como fue mencionado en el ı́tem previo. Parámetro turbulencia, con un valor cercano a cero, por ejemplo 0.1. Parámetro color RGB, imagen de la derecha de la figura mencionada. Figura 4. Pasos para la obtención de una textura de madera En la Figura 5 se observan capturas de pantalla del software desarrollado, con una textura sintetizada de ejemplo. 5. Conclusiones y perspectivas La biblioteca introducida presenta la ventaja de contar con un diseño e implementación sencillos. Además, la calidad de las texturas resulta buena teniendo Figura 5. Capturas de pantalla del software desarrollado. A la izquierda, la ubicación de la textura en la escena. A la derecha, la definición de los parámetros de la textura con el preview de la misma en cuenta lo escaso de los parámetros que deben ser introducidos y las operaciones simples con las que se cuenta en el shader. Por otro lado, se cuenta con la desventaja de una elevada generalidad en las operaciones que no permite capturar determinados detalles de texturas especı́ficas, debido a que el modelo se constituye a partir de operaciones y funciones simples, que buscan captar las caracterı́sticas principales de los materiales. La implementación demostró ser lo suficientemente sencilla como para poder ser utilizada en tiempo real, lo cual torna al modelo atractivo en el desarrollo de video juegos. El ahorro de espacio y ancho de banda resulta considerable respecto a las texturas convencionales. El principal trabajo a futuro está representado por la extensión del modelo a tres dimensiones. Para mejorar al editor se pueden añadir funcionalidades a medida que se utilice por diseñadores, los cuales podrı́an proponer el agregado de las mismas. Esto ayudarı́a a alcanzar una mayor flexibilidad en el diseño de materiales. La combinación de shaders, por ejemplo por medio de una estructura de grafo, permitirı́a aumentar la diversidad de materiales, facilitando la libertad del diseño. Referencias 1. Perlin, Ken: An image synthesizer. SIGGRAPH ’85: Proceedings of the 11th annual conference on Computer graphics and interactive techniques 287–296 2. Van Wijk, Jarke J.: Spot noise texture synthesis for data visualization. SIGGRAPH ’91: Proceedings of the 18th annual conference on Computer graphics and interactive techniques 309–318 3. Ebert, David S. and Musgrave, F. Kenton and Peachey, Darwyn and Perlin, Ken and Worley, Steven: Texturing and Modeling: A Procedural Approach (2002). Morgan Kaufmann Publishers Inc. 4. Lefebvre, Laurent and Poulin, Pierre: Analysis and Synthesis of Structural Textures. Graphics Interface 2000 Proceedings 77–86 5. Watt, Alan and Watt, Mark: Advanced animation and rendering techniques (1992). ACM Press. 6. T. Roden and I. Parberry: Clouds and Stars: Efficient Real-Time Procedural Sky Rendering Using 3D Hardware (2005). Proceedings of the 2005 ACM SIGCHI International Conference on Advances in Computer Entertainment Technology. 7. Doran, Jonathon and Parberry, Ian Towards Procedural Quest Generation: A Structural Analysis of RPG Quests (2010). Technical Report LARC-2010-02.