Demo

Mapas de arrugas en La Herrería

TORBJORN LAEDRE / UNITY TECHNOLOGIESContributor
May 28, 2015|3 minutos
challenger arruga la pancarta
Para tu comodidad, tradujimos esta página mediante traducción automática. No podemos garantizar la precisión ni la confiabilidad del contenido traducido. Si tienes alguna duda sobre la precisión del contenido traducido, consulta la versión oficial en inglés de la página web.

Al planificar El herrero nunca dimos prioridad a un sombreado de piel personalizado lo suficiente como para que tuviera alguna posibilidad realista de ser elegido como tarea. Sin embargo, aún queríamos ver si había algo sencillo que pudiéramos hacer para añadir un poco más de vida a las expresiones del Challenger. Tras una rápida tormenta de ideas, decidimos probar a añadir al proyecto mapas de arrugas basados en blendshape.

Para añadir detalle y profundidad a las expresiones, decidimos que el sombreador Estándar nos daría el mejor rendimiento si dejábamos que las arrugas afectaran tanto a las normales como a la oclusión. También queríamos un método para restringir la influencia de determinadas expresiones a partes específicas del rostro.

Introduzca el controlador de mapas de arrugas

Creamos un componente que permitía al animador definir las capas de arrugas, una capa por blendshape en la malla. Las definiciones de las capas contenían mapeados de texturas y modificadores de intensidad, así como un conjunto de pesos de enmascaramiento que se emparejarían con una textura de enmascaramiento de la parte de la cara. Utilizando los pesos de enmascaramiento, las capas de arrugas específicas podrían afectar de una a cuatro de las partes de la cara enmascaradas, cada una con una influencia diferente.

careta del aspirante en el inspector

Como queríamos poder mezclar hasta cuatro expresiones diferentes en un momento dado, sólo la mezcla requirió 11 muestreadores de texturas con todas las campanas y silbatos activados (dos texturas base, ocho texturas de detalle y una textura de enmascaramiento). La única opción realista para esto era componer los mapas de arrugas mezclados en un pase de pre-renderizado fuera de pantalla. Descubrimos que el formato de textura de renderizado ARGB2101010 era perfecto para nosotros, ya que nos permitiría empaquetar las normales en dos de los canales de 10 bits, mientras que el restante recibiría la oclusión. En cada fotograma, el componente del mapa de arrugas encontraría los cuatro blendshapes más influyentes y asignaría pesos de renderizado a las capas en consecuencia.

Espacio de pantalla Challenger

Una vez que tuvimos todos los datos de las arrugas compuestos en el espacio de la pantalla, lo único que quedaba por hacer era redirigir las entradas de datos normales y de oclusión en el sombreador Estándar que estábamos utilizando para el renderizado de la cara. En la práctica, esto sólo significaba añadir un puñado de líneas a la función principal del sombreador de superficie.

// Sample occlusion and normals from screen-space buffer when wrinkle maps are active
#ifdef WRINKLE_MAPS
float3 normalOcclusion =
tex2D(_NormalAndOcclusion, IN.screenPos.xy / IN.screenPos.w).rgb;
o.Occlusion = normalOcclusion.r;
#ifdef _NORMALMAP
o.Normal.xy = normalOcclusion.gb * 2.f - 1.f;
o.Normal.z = sqrt(saturate(1.f - dot(o.Normal.xy, o.Normal.xy)));
#endif
#endif

Resultados finales

La comparación de la cabeza base con la -exagerada- forma blendshape enfadada a pleno peso ilustra el detalle adicional añadido por los mapas de arrugas blendshape:

Challenger sin arrugas
Arrugas del Challenger

También añadimos varios modos de salida de depuración que nos permitieron visualizar fácilmente los mapas de oclusión y normales totalmente mezclados. Estos fueron bastante útiles para averiguar exactamente qué componente contribuyó a qué en el resultado final.

Vistas de depuración de Challenger

Hemos desglosado esta función en un proyecto de ejemplo que puede obtener en la Tienda de Activos. Básicamente es sólo la cabeza del Challenger con un par de las expresiones que utilizamos en El herrero, pero debería servir como punto de partida útil para poner en marcha este sistema en sus propios proyectos.