Assets next-gen para el Unreal Engine 3

¿Acabas de meterte en esto de los mods y te gustaría hacer contenido propio para usar en el Unreal Engine 3? Aquí te muestro uno de los métodos que uso para hacer modelos para el UE3 (o cualquier otro editor de la generación actual) con normal maps desde Maya.

Los pasos son:

  1. Modelo base
  2. Modelado hipoly
  3. Modelado lowpoly
  4. Extracción de normal maps
  5. Derivación de mapas de cavidades
  6. Texturizado

Modelo base

Voy a hacer un modelo muy básico de unas ruinas. Usé imágenes de referencia para ver la distribución de los objetos. Creo un modelo base que me servirá para esculpir en Zbrush, así que solamente me preocupo de que tenga el volumen y la forma adecuados, y que todas las caras sean cuadradas, para facilitar la deformación y las subdivisiones en Zbrush. Por cierto, tuve que añadir un bevel en las caras que necesitan tener bordes duros, ya que al subdividir en Zbrush, éstas se contraen por el algoritmo Catmull-Clark. Termino con algo así:

Modelo base

Para este caso en particular exporté todas las piezas combinadas en un solo .obj, en otros casos exporto varias piezas, dependiendo de la complejidad de la geometría. En este caso era bastante simple.

Modelado hipoly

Una vez traído el objeto a Zbrush empiezo a añadir definición y detalles. El detalle más fino lo puedo añadir después directamente al normal map con Photoshop. De nuevo, uso imágenes de referencia para saber qué tipo de detalles puedo usar al esculpir. Una vez terminado, luce así:

Modelo hipoly

Exporto una vez más como OBJ y regreso a Maya.

Modelado lowpoly

Es la hora de hacer el modelo lowpoly definitivo. En Maya importo el modelo hipoly y lo coloco en modo Live. Empiezo a crear el modelo lowpoly usando el hipoly como base. Al mover los puntos del modelo lowpoly éstos deberían pegarse a la superficie del hipoly. En este modelo no es importante mantener los polígonos cuadrilaterales. Puedes agregar triángulos para obtener más definición. Dale la prioridad a definir bien la silueta del objeto, los normal maps se encargarán del resto.

Como alternativa puedes crear el modelo lowpoly en una aplicación específica para el retopologizado, como Topogun. Puedes ver el proceso en más detalle en el Tutorial de retopologizado.

Modelo lowpoly retopologizado

Igual que antes, exporta el modelo lowpoly como .OBJ y ahora pasemos a la etapa de la extracción de normal maps.

UVs del modelo lowpoly

Me voy a saltar el proceso de crear los uvs porque eso llevaría otro tutorial entero (que estoy preparando, no te preocupes). Simplemente intenta por ahora que ningún shell se sobreponga sobre otro, para evitar errores en la creación de los normal maps.

Modelo lowpoly con UVs

Extracción de normal maps

Para este paso usa xNormal. En la sección High definition meshes carga tu modelo hipoly (click derecho en la fila -> Browse meshes). Si trabajaste el hipoly en Zbrush, asegúrate de activar la casilla Smooth normals (Zbrush trabaja todo “en bruto” con los bordes duros).

Ahora en la sección Low definition meshes carga tu modelo lowpoly. Ahora, hay un par de opciones interesantes. Si dejaste algunos bordes duros para agregar definición, activa Use Exported Normals, pero si quieres todo el modelo con bordes suaves y no estás seguro de que esté, selecciona Smooth normals, por si acaso. La opción Use cage te permite definir un modelo aparte como jaula para definir la dirección y limitar los rayos que llegan al modelo hipoly desde el lowpoly. Generalmente los mapas generados por xNormal son buenos a la primera, pero si vez que el mapa se generó con algunos errores, modela tú mismo una jaula a partir de tu modelo lowpoly, donde no se intersecte ninguna cara, así no tendrás problemas. Un par de columnas a la derecha está la casilla External cage file, click derecho -> Browse meshes y ya está.

Ventana de xNormal

Luego en la sección Baking options, determina un nombre de archivo para el mapa y un tamaño de salida (en base 2, obvio, y no se te olvide que mientras más grande sea el mapa, más tiempo tendrá que pensar tu máquina, así que si tienes un modelo con mucho detalle, quizás quieras generar unos mapas de prueba de bajo tamaño… digo, eso haría yo…). En background color puedes dejarlo en negro, para que puedas aislar el área útil con facilidad luego. Recomiendo dejar activadas las casillas Closest hit if ray fails y Discard back-faces hits, ya que así dan el resultado óptimo. Si por alguna conspiración divina o alineación planetaria tienes la necesidad de tener tu normal map boca abajo, checa la opción Flip vertically, si no, ni te molestes en mirarla. En Edge padding, déjalo en 16, es el número de pixeles que se va a extender cada pieza de UV, útil para evitar los seams en el modelo luego (o por lo menos hacerlos menos notorios). Bucket size… no tengo idea, déjalo en el default, si algo falla, cámbialo y ve si hay alguna diferencia. En Antialiasing el mínimo es 1x, que casi siempre da buenos resultados, si necesitas más, sé libre de cambiarlo a 2x o 4x, pero la generación va a demorar más.

Ya estás listo, puedes darle al botón gigante que dice Generate Maps y esperar (dependiendo de tu máquina) un rato. Si tu modelo está dividido en partes, repite el proceso para cada par de modelos hipoly – lowpoly. Salva los mapas en algún lado y luego únelos en Photoshop. No se te ocurra cerrar xNormal porque vamos al siguiente paso.

El mapa terminado

Así se ve el modelo lowpoly con el normal map aplicado (en modo High Quality en Maya para activar el Pixel Shader).

El normal map aplicado al modelo lowpoly

Importante: Para que el normal map se vea bien en el Unreal Engine 3, debes invertir el valor del canal verde en Photoshop antes de importarlo.

Derivación de un mapa de cavidades

Ok, este es un paso opcional, pero ya que es tan cool no te vendría mal aprenderlo. Como sabrás, al texturizar necesitas una cierta referencia de las partes del modelo para saber dónde pintar humedad, erosión, etc. El cavity map es un mapa sombreado de las cavidades del modelo hipoly, excelente para ese uso. Además luego de usarlo de referencia, lo puedes poner como capa en modo Multiply o Color Burn (Subexponer) sobre el resto de la textura para darle más profundidad.

Para crearlo, o más bien derivarlo desde el normal map, en xNormal ve a Tools y elije Tangent-Space Normal to Cavity Map, el normal map que acabas de crear, y al lado dale a Generate. Puedes ajustar el brillo y contraste del cavity map en las opciones de abajo. Luego guárdalo y úsalo para crear tus texturas.

Creando el cavity map

Texturizado

No me voy a detener por mucho tiempo en el texturizado, ya que (como con todo lo demás) planeo hacer un tutorial dedicado a eso. Basta con decir que juegues con los modos de fusión en Photoshop para usar varias fotos de referencia. Partí llenando con imágenes base de roca, concreto, y paredes. Puedes usar detalles de diferentes fotos, trata de que no se note dónde empieza una y dónde termina la otra. Usa imágenes de suciedad en modo Multiplicar o Subexposición para sobreponerlas sobre las texturas base.

Modelo con texturas

Aproveché de derivar un mapa de especularidad simple desde el mapa de color. En otro tutorial voy a mostrar cómo traspasar los detalles de alta frecuencia del mapa de color al mapa de normales, para darle el “extra punch” y el look next-gen.

Ahora lee cómo importar static meshes para usar tu nuevo asset en el UE3.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>