Nuevo video de una sesión de pruebas

He publicado un nuevo video con una sesión de pruebas en la que examino problemas y fallos que tiene de momento el escenario con el templo de Vesta, de Castor y Pólux, y la Basilica Julia.

Espero que os guste. El video está en inglés con subtítulos en español.


Versión en inglés: New video of test session

Aprendiendo de las demos de Epic

Han pasado ya unas cuantas semanas de mi última entrada en el blog y no quería dejar pasar más tiempo sin comentar los progresos del proyecto.
La situación, por decirlo rápido, es la siguiente: tengo mucho que rehacer. Era una situación inevitable. Soy un novato en el manejo de game-engines con la complejidad de Unreal, y más aún de la versión 4, que acaba de salir. Existen diez maneras distintas de hacer las cosas en Unreal, pero sólo dos o tres son las acertadas.

La mejor manera de aprender a manejar Unreal Engine es abrir cualquiera de sus demos gratuitas y fijarse bien en cómo lo hace la gente de Epic. Ellos son los expertos en su propio motor, así que si hacen algo de cierta manera, por algo es.

La demo Mobile Temple de Epic, con una de las columnas seleccionada.

La demo Mobile Temple de Epic, con una de las columnas seleccionada.

Así pues yo me encontraba yo tan feliz con un procedimiento de trabajo ya probado y comprobado, y con un buen ritmo de avance, cuando me pongo a trasladar el templo de Saturno de Blender a Unreal. Algo no marchaba bien. Ya estaba teniendo esa sensación al terminar la Basílica Julia. El aspecto general de mis modelos 3D era bueno en Unreal, pero faltaba algo. ¿El qué?

Mi mayor error ha sido pensar que en un videojuego el tamaño de los objetos no importa. Mientras haya textura con la que llenarlos, no hay problema, ¿no? Error.

Un objeto 3D, cuando se carga en un game-engine, ocupa un espacio, un espacio comparable al espacio físico, pero virtual. Si dentro del espacio virtual podemos acercarnos a los objetos, y de hecho con las Oculus podemos hacerlo, y mucho, los objetos podrán ser observados a escasos centímetros de nuestros ojos. Un objeto grande requerirá mucho detalle, y no sólo en el canal difuso, el que proporciona el color y textura, sino sobre todo en el canal de la iluminación, que en un videojuego orientado a la Realidad Virtual tendrá que ser iluminación precalculada dentro de texturas conocidas como lightmaps. No podrá ser iluminación global calculada en tiempo de ejecución porque no podemos permitirnos las notables subidas de latencia que eso produciría. Así pues tenemos dos opciones: 1) hacer enormes macro texturas y no preocuparnos por el tamaño de los objetos, ó 2) descomponer objetos muy grandes en piezas más pequeñas, siempre que se pueda, y usar texturas más pequeñas pero con buen detalle.

Está claro que la opción acertada no es la que yo he tomado. Pero no importa equivocarse si al final uno se da cuenta de cuál es el error con tiempo para rectificar.

Cuando abrí la demo “Mobile Temple” de Epic, que sólo la había echado un vistazo por encima, y cuando examiné de cerca cada asset y leí en los foros de Unreal sobre el tema, me di cuenta de que Unreal no es superpoderosa. No puede hacer milagros. Es un game-engine, y como todo game-engine tiene sus limitaciones, que hay que conocer y sortear.

Lo primero que salta a la vista es que el templo está fragmentado en muchas piezas más pequeñas pero muy reutilizables. Esto es algo que yo estaba haciendo pero a un nivel menos detallado. Una columna, por supuesto, es una pieza reutilizable. Pero, ¿cómo hacemos con el tejado de un templo, o con sus muros y sus podios? Pues la conclusión es clara: hay que hacer lo mismo.

El tamaño de las piezas es algo que me ha traído mucho de cabeza, pero la gente de Epic parece seguir una regla no escrita de que una pieza nunca debe ser mayor de 20x20x20 metros. Su demo del “Templo”, que es un calco inspirado en el Panteón romano, ha sido reducido de escala. La bóveda que aparece en la demo tiene un tamaño sensiblemente menor que el del auténtico Panteón. Es decir, que para hacer la bóveda del auténtico Panteón haría falta despiezar, y mucho, esa techumbre.

Lo segundo que he descubierto es que hay que usar lightmaps muy pequeños, máximo de 128×128 píxeles. Más píxeles, cuando nuestras piezas son pequeñas, no mejoran el resultado e incrementan los tiempos de compilación.

Las texturas, por contra, tienen que tener preferentemente 2048×2048 o más. En Realidad Virtual vamos a necesitar mucho tamaño de textura porque el detalle se incrementa mucho. El jugador, si juega en primera persona, que será lo más habitual, va a poder pegar la nariz a todo, y esto no es como jugar en el monitor. Aquí los detalles llaman mucho más la atención.

El proceso que siguen en Epic para crear materiales también me ha resultado curioso. En lugar de dejar en manos del programa 3D la creación de los mapas UV y la aplicación de las texturas, que es un proceso que consume bastante tiempo, más incluso que el propio modelado, parece como si la gente de Epic estuviera recomendando olvidarse de las funciones de creación de materiales propias del programa 3D. Yo utilizo Blender, y lo cierto es que no tiene sentido perder el tiempo en Blender creando una versión texturizada de los modelos 3D, cuando resulta que toda la creación de materiales, hasta un extremo insospechado, se va a hacer en Unreal.

La pregunta de “¿Y cómo haces para que determinadas caras de un objeto muestren un material u otro?” tampoco resulta un problema a lo dicho antes. La respuesta de Epic es: usa máscaras. Podemos crear una textura máscara que nos defina diferentes zonas de material en el objeto. De este modo tan simple pero tan potente podemos limitarnos a usar el editor de materiales de Unreal y olvidarnos de la creación de materiales en el programa 3D. El proceso, más simple y potente, es éste: modela en Blender, crear los mapas UV en Blender, pero luego, olvídate de los materiales en Blender. Utiliza Unreal para ello. (Aunque aún tengo que ver si esta regla me va a servir siempre, porque quizá haya que variarla cuando me dedique a crear personajes o caracteres animados).

La máscara para la columna de la demo de Epic. Fijaos cómo definen una zona de color diferente para el fuste, de modo que la columna pueda tener después diferentes colores sin necesidad de crear un nuevo material de cero cada vez.

La máscara para la columna de la demo de Epic. Fijaos cómo definen una zona de color diferente para el fuste, de modo que la columna pueda tener después diferentes colores sin necesidad de crear un nuevo material de cero cada vez.

Así pues, poco a poco, y sufriendo la novatada, voy aprendiendo que crear una experiencia de Realidad Virtual con un game-engine como Unreal se tiene que ajustar a las mismas reglas de siempre para la creación videojuegos. Mi problema es que quiero construir un modelo 3D de la Roma antigua, y por tanto, no puedo permitirme cualquier tipo de licencia creativa. A pesar de ello, tengo muy claro que si no equilibro la balanza entre la exactitud histórica y la optimización 3D el resultado final no resultará positivo al visualizarse en Oculus Rift.

Esto es todo un mundo nuevo. Nuevo para mí en muchas facetas porque necesito aprender, y nuevo para todos en definitiva porque la Realidad Virtual hasta ahora no había pasado de ser un mero concepto. A partir de aquí es cuando se va a escribir un nuevo lenguaje para la creación de contenidos virtuales, y es un lenguaje del que aún nos queda mucho por definir.

TempleSaturnAnim

El Templo de Saturno rehecho de nuevo pero mostrando las diferentes piezas en que lo he dividido. Tiene unas 150.


Versión en inglés: Lessons from Epic samples