# Tecnologías multimedia e interacción/Realidad virtual generada por ordenador

En esta sección se va a tratar la generación de contenido por ordenador enfocada concretamente al campo de la realidad virtual en los videojuegos.

## Introducción

Cuando se habla de realidad virtual en videojuegos podemos hacer distinción entre dos tipos:
* Sistemas no inmersivos: Muestra un mundo virtual a través de un monitor sin necesidad de equipos específicos como gafas o sensores de movimiento. La interacción del usuarios es por medio de teclado, ratón, gamepad, etc.
* Sistemas inmersivos: Sumerge al usuario en un mundo virtual mediante el uso de cascos visuales y auditivos, detectores de movimiento etc. No vamos a centrarnos en este tipo de realidad virtual.
Aunque recientemente el término realidad virtual nos hace pensar más en el segundo tipo, para el desarrollo de esta sección se va dar un enfoque más centrado en el primero (sistemas no inmersivos), ya que si hablamos de generación procedimental en videojuegos no es tan importante el modo de interacción del usuario como el contenido del juego en sí.

## Generación procedimental

En computación generación por procedimientos o procedimental es el método de creación de datos con algoritmos en lugar de forma manual. Puede ser empleada para la generación de casi cualquier tipo de contenido multimedia. Por ejemplo, una de sus aplicaciones es la generación de texturas en informática gráfica, o si nos centramos en los videojuegos, es utilizada para la creación automática de varios tipos de contenido al inicio y a medida que avanzamos en la partida, principalmente escenarios y mapas pero también items, misiones, personajes, etc. En función del resultado que se quiera obtener el programador puede optar por algoritmos que generen contenido con un mayor nivel de aleatoriedad o bien otros hasta cierto punto deterministas.
Para visualizar mejor las diferencias entre generación procedimental y un diseño hecho "a mano" podemos plantear un ejemplo. Este ejemplo consiste en la creación de un planeta concreto en No Man's Sky (2016), un videojuego de exploración espacial que genera todo su contenido mediante algoritmos. El proceso a seguir en cada método queda reflejado en la siguiente tabla:
| Diseño a mano | Generación procedimental |
| Nombre "X". | Nombre: entre 7 y 12 caracteres aleatorios |
| Color verde. | Color entre el hexadecial 7111 y 8222. |
| Posición en las coordenadas (322, 455). | Posición en X es siempre Y/2 |
| Tiene 40 árboles y un río. | Tiene un num. aleatorio entre 0 y 40 árboles |
| Soporta vida. | Soporta vida en función de la distancia a sus estrella. |
Como se puede ver, el primer método requeriría repetir cada paso para todos los planetas que se vayan a crear, mientras que en el método procedimental sería un algoritmo el que generaría de forma aleatoria cada uno de los parámetros automáticamente.

### Ventajas

* Ahorro de memoria. Ya que evita tener que almacenar previamente todo el universo del juego. El mayor ejemplo de esto es .kkrieger, un FPS creado en 2004 que genera todo su contenido de forma procedimental y que ocupa solo 96KB. Por otra parte, los discos duros cuentan cada vez con más capacidad por lo que esta ventaja ha perdido cierta relevancia.
* Mayor cantidad de contenido del que se pueden crear manualmente.
* Inclusión de aleatoriedad para experiencias de juego menos predecibles. Cada partida es diferente.
* Ahorro de trabajo para los diseñadores, lo cual se traduce en un ahorro económico para las compañías. Razón por la cual esta técnica es más empleada por desarrolladores indies que no cuentan con los generosos presupuestos de las grandes compañías.

### Inconvenientes

* Sobrecarga de la CPU de los equipos, debido a los algoritmos que debe ejecutar para generar todo el contenido.
* Requiere un gran trabajo de programación. Aunque en términos en económicos no es comparable con lo que se ahorra en diseño.
* Aún no existe ningún algoritmo lo bastante complejo como para crear de forma procedimental argumentos o mecánicas jugables de calidad.
* Por lo general el resultado tiene menos calidad que un diseño hecho “a mano”. Puede dar lugar a repetitividad en algunos casos.

## Historia de los videojuegos procedimentales
### Los roguelikes

La técnica de generación procedimental en videojuegos surge a principios de los 80, ya que los nuevos juegos que van apareciendo se encuentran con la dificultad de adaptarse a las limitadas características técnicas de los computadores de la época.
Los primeros videojuegos en apostar por la generación procedimental fueron los rogelikes, un género basado en la exploración de mazmorras en las que todo el contenido (niveles, personajes, enemigos, objetos) se genera mediante algoritmos. El primero de ellos y cuyo título da nombre al género es Rogue (1980), en el cual cada partida es distinta ya que los niveles se generan de nuevo cada vez que el jugador muere. Todo su aspecto gráfico se basa en el código ASCII. Como ejemplo más actual de la evolución de este género contamos con la conocida saga Diablo (1996-2012) que genera gran parte de sus mapas algorítmicamente así como sus items, empleando una categoría de colores que los clasifica por rareza.
Otro claro ejemplo que se inspira en los rogelikes es Dwarf Fortress (2006), un simulador de construcción de fortalezas de enanos que utiliza la generación procedimental para construir todo el juego. Antes de cada partida la CPU se encarga de crear el mundo generando el terreno, simulando la climatología, la erosión de las montañas, el curso de los ríos, el crecimiento de la vegetación y los efectos de la vida de otras especies.

### La exploración espacial

Otro de los géneros que se valió en gran medida de la generación por procedimientos fue el de la exploración espacial, centrado principalmente en naves espaciales que viajan de planeta en planeta en universos ficticios.
Uno de los precursores en este género fue Elite (1984), un juego de exploración, combate y comercio, que está considerado como el primer videojuego comercial capaz de generar de forma procedimental un universo completo. Cuenta con 8 galaxias y 256 planetas diferentes en cada una, cada uno de ellos generado mediante semillas. Esto funciona de la siguiente manera: cada usuario almacena únicamente sus semillas y cada vez que inicia una partida el juego genera su universo tomando éstas como base del algoritmo. De esta manera se evita generar siempre mundos aleatorios.
En la actualidad tenemos algunos herederos de esta fórmula como Elite Dangerous (2014), una nueva versión del Elite original, o No Man’s Sky (2016), cuya peculiaridad es que es capaz de crear mediante algoritmos un universo con 18 trillones de planetas.

### La revolución de Minecraft

Pero si hablamos de generación procedimental no se puede evitar hacer referencia al que ha dado un mayor impulso a los videojuegos que hacen uso de esta técnica: Minecraft.
Minecraft (2009) es un videojuego que deja en manos de los algoritmos la creación de unos mundos casi infinitos con una serie de reglas definidas manualmente que hacen que el resultado tenga sentido. Estas reglas pueden ser del tipo: las cumbres de las montañas deben tener nieve, los valles vegetación, en los desiertos no puede haber plantas ni muchos animales, etc. En este caso los algoritmos empleados también usan como base semillas para crear cada mundo. Cuando un mundo es creado se establece una semilla (por defecto la hora del sistema, aunque se puede introducir una cadena de caracteres manualmente) que da lugar a la generación de un mundo concreto. Si en algún momento cambia la semilla o el algoritmo es actualizado el mundo generado será distinto. Los mundos se renderizan por trozos (chunks) de 16x16x256 bloques (cubos de los que se componen los mundos y toda la estéticas del juego) que se van añadiendo a medida que el jugador avanza, con un límite de -32 a 32 millones de bloques en el plano XZ. Pasado el límite de 30 millones de bloques el jugador no tiene la posibilidad de seguir avanzando y el mundo generado a partir de ese punto se limita al relieve del terreno sin vegetación, animales o cualquier otro detalle. Este límite es establecido porque a partir de cierto punto los chunk nuevos comienzan a sobrescribir a los antiguos, lo cual da lugar a una serie de inestabilidades que dificultan el desarrollo normal del juego.

### Otros ejemplos

En la actualidad encontramos un mayor número de juegos con generación procedimental debido a que los procesadores son capaces de ejecutar algoritmos de creación más complejos. No obstante, la gran mayoría no se basan al 100% en esta técnica y sólo hacen uso de ella para algunos aspectos determinados (generación de animaciones, texturas, árboles). Algunos ejemplos son:
* The Division (2016), donde sólo se generan procedimentalmente los interiores, la disposición del mobiliario, etc.
* This War of Mine (2014), cuya historia avanza mediante una serie de eventos aleatorios y no mediante un guión fijo.
* The Elder Scrolls V: Skyrim aplica generación procedimental para generación de misiones en función del progreso del jugador.
* Left 4 Dead (2008) genera los niveles mediante un algoritmo y además los va cambiando dinámicamente en función de las acciones del jugador: crea o destruye enemigos, recursos o rutas alternativas.
* Rimworld (2013) usa la generación por procedimientos para crear eventos y mini-narrativas. Es decir, funciona a partir de una “inteligencia artificial narrativa”.