Use advanced navigation for a better experience.
You can quickly scroll through posts by pressing the above keyboard keys. Now press the button in right corner to close this window.

Tips y Datos de Unreal Engine 4 para Artistas

 

Buenas. Hace unos años que vengo haciendo juegos como programador, aunque en éste último puse energía en aprender modelado 3D, texturizado, materiales y toda la mar en coche para poder hacer elementos y tener más control artístico en The Hum: Abductions, nuestro proyecto actual. En este proceso fui además descubriendo cómo es la filosofía de trabajo para artistas de Unreal Engine 4.

Quisiera compartirles lo que fui aprendiendo en este viaje gracias a la experimentación y la ayuda de gente con mucha más cancha. Estoy seguro que artistas mucho más duchos y experimentados, pero que aún no se mandaron con Unreal Engine 4, van a poder encontrarle utilidad y sacarle mucho más provecho.

Voy a ir actualizando este post con correcciones y agregando info. La idea no es ser muy detallado, sino más bien, mencionar cosas básicas que hagan la entrada de cualquier artista a este engine muchísimo más fluida.

De más está decir que cualquier corrección/aporte que ayude a mejorar el post, más que bienvenido!

 

Indice

  1.  Introducción
  2. Materiales
    • Material Editor
    • Material Instances
    • No necesitás texturizar todo siempre
    • Texture Packing (ORM, RMA, etc)
    • Pocas texturas para muchos detalles
    • Vidrio, Refraction
  3. Meshes, UVs, etc
    • Cantidad de Polígonos
    • Formatos
    • UV Mapping, Lightmaps
    • Blend Shapes / Morph Targets
    • Mesh Instances
  4. Iluminación y Reflejos
    • Overview
    • Luces Estáticas
    • Luces Dinámicas
    • Reflejos: Reflection Captures y SSR
    • Solucionar Focos de Luz de Luces Ambientales
    • Información Util del tiempo de Buildeo y Lightmaps.
  5. Post Procesos
    • General
    • Eyes Adaptation
    • Color Grading
    • Postprocessing Materials
    • Otros
  6. Misc.
    • Borrar, Renombrar y Mover Assets en el Content Browser
    • Blueprints para arte
    • Buffers de Visualización, Modos de Visualización
    • Profiler
    • Comandos de Consola

Por agregar:

Terrenos/Landscapes, Animaciones, Skeletal Meshes, Sequencer (cinemáticas), Partículas, etc

 

 

 

 

1 – Materiales

 

a – Material Editor

Esto es oro puro. Olvidate de escribir shaders. Si bien es cierto que los materiales pueden ser realmente complejos y requerir buenos conocimientos de matemática, un artista técnico probablemente ya esté acostumbrado a eso. O incluso si no es el caso, sin necesidad de materiales muy complejos, uno puede hacer mucha magia.

 

b- Material Instances

DOCUMENTACIÓN ACÁ

Después de que creás un material, podés hacer instancias basadas en el mismo. Las instancias no se compilan ya que están basadas en un material padre, que es lo único que necesita ser compilado. Esto nos permite cambiar todos los parámetros que se nos ocurran, y hayamos creado, en tiempo real sin recompilar los cambios, crear variedades enormes de materiales basados solo en una instancia padre adecuada, etc.

Y ni habar de la ganancia de performance, ya que hablamos de un solo material con parámetros distintos, en lugar de muchos materiales en pantalla.

La ventana de la izquierda es un Material con sus nodos. Cualquier cambio, así sea el valor de una variable (un color, un número, etc) requiere recompilar shaders. Los cambios no se ven reflejados hasta que termine la compilación.

La ventana de la izquierda muestra una instancia de ese material. No tienen nodos, sino tan solo valores a ser modificados (parámetros), por lo que no requiere recompilación de shaders y los resultados se reflejan al instante.

 

 

c – No necesitás texturizar todo siempre

Siguiendo la filosofía de PBR, muchas veces ni necesitamos usar Albedo/Color/Diffuse Map. Usando tan solo un parámetro de color y algunos numéricos de Roughness y Metallic, podemos lograr materiales creíbles. Incluso si agregamos tan solo un Normal Map, o un Normal Map + Roughness Map, solemos hacer materiales muy realistas y nos ahorramos meter texturas para el color.

En la imagen siguiente, todas las cosas señaladas por las flechas, además de la pared, el suelo y algunas más, no tienen textura de Albedo/Diffuse, y sólo usan textura de Normal o Roughness (a veces alguna de esas tampoco).

Imagen de The Hum Abductions (Totwise Studios)

 

Uno de los plásticos que usa la escena, está hecho usando tan solo textura de normales y una de Roughness para darle algo de imperfección.

 

 

d – Texture Packing

Un material puede tener varias texturas según sus necesidades  y varias de ellas son mapas de grises, como el Roughness Map, Metallic Map, Ambient Oclussion Map, Height Map, etc. En lugar de importar una textura por cada uno de estos mapas, una técnica común es empaquetarlos en los canales RGBA de una sola textura, ya que estos canales son también mapas de grises.

Por ejemplo, si tenés 1 Roughness Map, 1 Ambient Oclussion Map y 1 Metallic Map, podés agarrar y poner cada uno de esos mapas los canales R,G y B de otra textura. Lo que serían 3 texturas, pasan a ser una sola. A esto se le llama “empaquetar”, o packed, packed refleactions, ORM, RMA, etc etc, según que mapas estén metidos en los canales.

Ya que el Material Editor de UE4 es muy cómodo y versátil, es fácil tomar esa información y aplicarla correctamente.

El ejemplo mencionado, ilustrado en esta imagen. A la izquierda las 3 texturas, a la derecha una empaquetada, misma información, dos texturas menos

 

Yo uso para texturizar principalmente Substance Painter 2, y a veces Quixel Suite, sobre todo cuando necesito hacer cosas que el Substance Painter no maneja muy bien y el Photoshop maneja perfecto, como texto, efectos con imágenes, composición de imágenes sobre la textura, etc.

Ambos softwares ya traen por default la opción de exportar el material con el empaquetado listo para Unreal Engine 4, e incluso podés configurar como empaquetar vos distintos mapas que sean escala de grises.

Abajo: El packed por default para UE4 de Substance Painter 2 se llama ORM (Opacity, Roughness, Metallic), pero uno puede configurar la exportación como desee.

Totwise Studios. By Ariel Arias

 

e – Pocas Texturas para muchos Detalles

Usando 2 o 3 texturas, se puede generar una gran cantidad de variedades de “ruido” e imperfecciones en casi todos los materiales de nuestro juego. Así nos ahorramos muchos trabajo y cantidades enormes de texturas para darle vida y naturalidad a los elementos.

Si estás acostumbrado a generar Substances en el Substance Designer, en el Material Editor podés hacer muchas cosas de ese estilo y la magia es que las podés reutilizar en todo el juego y ajustar a cada submaterial, instancia, etc.

Por ejemplo, la siguiente textura pertenece al proyecto Reflections de Unreal Engine, uno de los tantos que están gratis para investigar. En cada canal de la textura hay un mapa de grises que tiene suciedad, manchas, etc.

Usándolo de diversas formas en distintos materiales de toda una escena (como acá)….

Se logra imperfección, manchas, reflejos y mucho más, que hacen que con pocas texturas se logra una escena como ésta:

(de hecho, la escena que se ve abajo, tiene menos de 100 texturas en total, incluyendo los decals, los carteles, los materiales de paredes, normal maps de todo, sprites de animación 2D de un juego de Arcade, logos e íconos)

 

 

f – Vidrios, Refraction

Las transparencias lindas siempre bastante. Hacer buenos materiales de vidrios en UE4 tiene algún que otro truquito. Es normal meter un mesh adentro de otro mesh para lograr un buen efecto (por ejemplo en una botella).

Entender cómo funciona la refracción (Refraction, en inglés), también ayuda mucho, si bien tiene bastantes limitaciones y suele generar artifacts muy feos. Pero más allá de eso, en muchísimos casos y con valores bien seteados, se logran efectos que levantan mucho.

La documentación oficial del tema siempre es buen punto de partida.

Seteo de un material para vidrio con refraction

El MASTER MATERIAL que hice para vidrios con Refractions y que uso en The Hum Abductions. No tiene nada muy loco realmente, y está muy basado en el ejemplo de la documentación

Ejemplo Simple, de The Hum Abductions

 

2 – Meshes, UVs, etc

a -Meshes, Cantidad de Poligonos, Formatos

En UE4 podés usar .obj y .fbx, aunque lo usual es usar solo fbx.

Unreal maneja la cantidad de polígonos en pantalla maravillosamente. He puesto cientos de miles de polígonos en pantalla sin problema, e incluso más. La cosa se pone densa si además los materiales son muy complejos, hay postprocesos muy demandantes o muchas luces dinámicas, pero en sí, los polígonos no son un problema mayor.

Por supuesto que… mantener las buenas prácticas de no zarparse, evitar la geometría innecesaria, tener en cuenta la plataforma para la cual se desarrolla y demás… nunca, JAMAS, está de más..

b -UV Mapping, Lightmaps

UE4 usa lightmaps para bakear luces/sombras de luces estáticas sobre objetos estáticos. Con esto se logra una gran calidad visual y una simulación de luz indirecta y rebotes muy linda.

Para bakear las luces sobre los meshes, Unreal se fija que el mismo tenga un UV Set a parte del de las texturas comunes. Si el mesh no lo tiene, UE4 lo genera automáticamente. Por lo general la uv automática de lightmap zafa bastante, pero muchas veces se ven artifacts no muy copados y se solucionan haciendo una UV Lightmap a conciencia.

Les dejo estos tutoriales de Warren Marshall (en inglés…) que lo explican perfecto.

Parte 1

Parte 2

 

También es importante tener en cuenta que, así como las texturas “comunes”, tienen una resolución, la de lightmap también. Ya que estas texturas las genera el motor, es en el mismo motor donde uno setea la resolución del lightmap de cada mesh, en el Mesh Editor.

También se puede ver si la densidad de lightmap de una escena viene bien, o si falta en algunas partes, o se excede en otras. Tengan en cuenta que mayor densidad es mayor calidad, pero también tiempos de buildeo de Static Lighting mucho más altos y mapas mucho más “pesados” que van a la memoria, así que hay que equilibrar.

La escena de Reflections vista con el buffer de Densidad de LightMaps. Rojo es “al horno” , verde ok, azul “quizás está bajo”, etc

 

c -Blends Shapes/Morph Targets

Podés importar un mesh que tenga BlendShapes y modificar el ratio de deformación tanto en el editor como en runtime. Aunque a veces tenés que hacer un poco de vueltas para que no se te rompa todo y si tenés un fbx compuesto de varios objetos con distintos blendshapes, vas a tener que separarlos en distintos fbx, ya que el UE va a aplicar cada morph target a todo el el fbx. Si hay una forma mágica y más hermosa de hacerlo, me encantaría saberlo :D

d -Instanced Static Meshes

UE4 puede agarrar un mesh y crear instancias del mismo en la escena. Con esto se logra una mejoría de performance importante, ya que no tiene que recalcular mucha de la información pues la conoce gracias al primer mesh en cuestión. Si repetís muchas veces el mismo mesh (no importa la escala, rotación ,etc), no te olvides de checkear si esta técnica te da una mano. Ya de por sí, el Folliage Painter del editor, utiliza esta forma de crear meshes. Un mesh funciona como brush, y todo lo que colocás en el mapa son instancias. Por eso podemos poner cientos de cientos de cosas sin que explote el universo (todo tiene un límite, por supuesto….).

Para usar esta feature necesitás algo de Blueprints, pero no es tan complejo y vale la pena.

(El primer tutorial que encontré por ahí sobre el tema :V)

 

 

3 – Iluminación y Reflejos

 

a -Overview y una página muy buena de referencia

Los tipos de luces de UE4 no varían mucho de otros motores, en general. Para ahondar en las cosas básicas y algunos problemas típicos de una persona que recién se inicia en UE4, les recomiendo esta página que resume muy bien la mayoría de ellos.

ESTA GUÍA SOBRE ILUMINACIÓN DE LA DOCUMENTACIÓN OFICIAL DE UNREAL, ES DE LECTURA OBLIGATORIA!!

b -Luces estáticas 

La iluminación indirecta bakeada del motor da mucha calidad a las escenas. Es importante tener buenos lightmaps en los meshes (hablo de eso en esta misma nota). Entender las configuraciones para poder conseguir escenas que se vean pulidas y de calidad.

Lleva un poco de tiempo y experimentación, pero se aprende rápido y ya hay varias personas que compartieron sus experiencias. Googleando un poquito se encuentra (si, voy a poner links después)

c -Performance en luces Dinámicas y cómo usarlas

Por supuesto que las luces dinámicas tienen un consumo de tiempo de renderizado mucho mayor que las estáticas, ya que las últimas no son calculadas en tiempo real. Lo que más consume performance en las luces, son las sombras. Muchas veces no necesitamos sombras ya que lo único que queremos es levantar la iluminación en alguna parte de la escena, agregar algun color, o dar más luz a objetos que se están moviendo sin importar el casteo de sombras.

Ya sea que sí usemos sombras, o no, no olvidemos que las que más “consumen” son las Point Lights, ya que emiten en todas direcciones. Muchas veces podemos lograr efectos cercanos usando SpotLights, que tienen un rango de cálculo más restringido.

Si la luz en sí no va a moverse, pero queremos que afecte objetos móviles, podemos usar estacionarias, que se bakean igual que las estáticas sobre objetos estáticos pero, además,  emiten luz y sombra sobre objetos dinámicos (incluso afectan con la luz indirecta a los mismos). Tienen varias limitaciones pero, no duden que las van a usar, y mucho.

c -Reflejos – Reflection Captures y SSR

Image by Epic Games

Entre los postprocesos por default, tenemos uno llamado SSR (Screen Space Reflection), que genera reflejos calculados sobre el render final de cada frame (por eso es… post proceso :v). Si bien tiene varias limitaciones y artifacts diversos (no voy a entrar en detalle pero hay mucha info en inet de eso), dan un efecto de reflejo bastante decente y automático a las cosas.

La otra opción es usar Reflection Captures, y levantan las escenas muchísimo. Básicamente generan un cubemap capturado en donde son colocados y lo aplican a todo su rango de influencia. Tienen limitaciones, como que son reflejos estáticos (no capturan elementos que se mueven), pero en general, están muy bien y no tienen un impacto muy fuerte en la performance.

d -Sacar el foco en los reflejos de una luz

Pasa mucho cuando empezás a usar el motor que, al querer poner luces “mentidas” en un mapa, se note en los reflejos su foco de emisión y quede muy mal. Se soluciona bastante haciendo que la luz en cuestión tenga un roughnes minimo de reflejo sobre las superficies.

Por ejemplo, en la siguiente escena quería poner una luz que levante una zona con un cuadro, pero dicha luz no proviene de ningún foco real. En la imagen de la izquierda, se puede ver como el cuadro refleja ese foco, lo cual queda muy mal, y se empeora cuando usás varias luces “mentidas”. En el de la derecha, apliqué al PointLight un valor de Min Roughness de 1, haciendo que siga iluminando pero no refleje tanto.

The Hum Abductions, Totwise Studios

 

e -Ver información del tiempo de Buildeo de las Luces, junto a otras

Después de hacer el bake de Static Lights se puede acceder a la información pertinente del mismo. Podemos entonces ver cuánto pesa cada lightmap, cuánto tiempo de procesamiento de buildeo está usando cada mesh, etc.

Toda esta info es SUMAMENTE útil.

 

 

4 – Post Procesos

Image by Epic Games

 

a -General

Sin entrar en detalle de como funciona el pipeline de rendering de Unreal Engine y dicho al voleo,  una vez que el motor termina de renderizar un frame, el postproceso aplica “filtros” sobre la imagen resultante. Con estos “filtros” podemos levantar la visual de forma muy fácil y potente, aunque hay que cuidarse de no zarparse porque puede haber impactos de performances muy grandes.

¿Hay que evitar los post procesos? Para nada, es difícil imaginar un juego actual sin ellos.

b -Eyes Adaptation

Algunos puteamos un poco con esto los primeros días de usar el Engine. A veces se veía super oscuro, a veces super claro… Hay un efecto de post processing/cámara que simula la exposición a la luz del ojo, el abrir y cerrar de la pupila, que también es común en cámaras. Es un efecto muy copado que, bién usado, nos permite adaptar el exposure en distintas escenas aunque, por lo gral, la mayoría lo desactiva o pone rangos muy bajos de adaptación.

c -Color Grading

Para decirlo rápido, es como si usaras filtros de Instagram sobre el frame renderizado. Y como ya deben imaginarse, hace que lo barato parezca de calidad :v Dejando bromas de lado, el Color Grading es una técnica sumamente utilizada para darle el toque artístico buscado a cada escena de todo juego.

Estos filtros de Color Grading utilizan texturas con información de curvas de colores que se aplican sobre el frame final. Se llaman LUTs (Look Up Table), y pueden bajarse de por ahí, comprarse o bien ser generadas a gusto y piacere en programas como Photoshop.

Imagen perteneciente al paquete LOOK! del Marketplace de Unreal Engine

 

d -Materiales de Postproceso

 

Podemos crear nuestros propios materiales que van a ser aplicados en la parte de postproceso del renderizado y así, tener comportamientos customizados de todo tipo. Es similar a un Image Effect Script de Unity, solo que usando el Material Editor de UE4 y esas cosas lindas. Hay diferencias técnicas, por supuesto, pero son entrar muy en detalle para este post.

Image by Epic Games

 

e -Otros por defecto

Bloom, Lens Flares, SSR (reflejos por postproceso), SSAO (Ambient Oclussion por postproceso), Fringe (Aberración Cromática), Depth of Field (el desenfoque/enfoque de la cámara), etc.

 

5 – Misc

a – Borrar, Cambiar Nombre y Mover de Lugar Assets

Cuando empezás a usar el motor, vas a ver que cada vez que borres assets, los muevas de carpeta o les cambies de nombre… cosas raras pasan.

Por ejemplo, te quedan copias de lo borrado que pesan 1kb, como una referencia perdida, y similares brujerías que rompen todo. Esto es porque UE4 tiene un sistema de referencias de assets para trabajar fluido en performance.

Si venis de Unity seguro vas a putear con esto varias veces, hasta que.. te des cuenta que hay una solución. Cuando muevas o borres cosas, tenés que pedirle al motor que actualice y arregle las referencias, tocando en esta opción:

Es un paso adicional pero bueno, una de cal, una de arena.

b – Blueprints para trabajar arte

Vale la pena invertir tiempo en entender algo de Blueprints, y no es sólo por la lógica o gameplay, sino porque es muy fácil mejorar el arte del juego con ellos, generando cosas procedurales, o bien assets facilmente customizables.

c – Buffers de Visualización y los Modos de Visualización

En el viewport del mapa podés cambiar la forma de ver la escena para que se rendericen canales específicos de información, como, sólo luz, solo Albedo sin luz(unlit), la complejidad de los shaders, la complejidad de la luces, las colisiones existentes, los reflejos, la complejidad de los lightsmaps y mucho, mucho más. Es algo que hay que tener muy en cuenta y saber que existe porque te hace la vida infinitamente más fácil.

DOCUMENTACIÓN ACÁ

Image by Epic Games

 

d – Profiler

El profiler de Unreal Engine es amor. Es indispensable para saber donde están los cuellos de botella en la performance; qué luces se están zarpando en tiempo de rendering, qué materiales, etc.

LLeva un poco de investigación usarlo correctamente, pero es un must para lograr un nivel adecuado de performance y calidad.

DOCUMENTACIÓN ACÁ

c – Comandos de Consola

Hay.. muchos útiles, y muchísimos para probar. Voy a entrar más en detalle sobre esto más adelante. Pero algunos super básicos y útiles que pueden usar artistas en general:

stat fps (muestra los fps :D)
stat scenerendering (muestra una serie de información útil de renderizado, como los drawcalls y el tiempo de cálculo de algunos elementos)
stat unit (muestra los tiempos que están llevando por frame la CPU  y GPU)

 

 

Leave a reply

 

small_keyboard