Cómo Zugalu Entertainment redujo el uso de RAM de 20 GB a 500 MB para Thrive: Heavy Lies the Crown

Jun 25, 2025
Thrive: Heavy Lies the Crown | Zugalu Entertainment | PlaySide Studios

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.

Thrive: Heavy Lies the Crown es un constructor de ciudades medieval con elementos de estrategia en tiempo real. El juego, donde el destino del reino depende de cada decisión que toma un jugador, tiene funcionalidad tanto para un solo jugador como para multijugador cooperativo. Los jugadores pueden expandir estratégicamente su territorio y su reino, y luego construir a lo largo de un gran mapa.

A medida que el equipo comenzó a desarrollar el título, encontraron obstáculos al mejorar el rendimiento. Después de pruebas extensas, aprendieron dónde estaban los cuellos de botella y lo que tenían que hacer: construir un sistema de horneado de animaciones y un sistema de vegetación personalizado. Aquí está cómo mejoraron la animación de personajes en el juego.

EL DESAFÍO:

Superando los cuellos de botella de rendimiento impulsados por la animación de personajes

PLATFORM:

PC

UBICACIÓN:

Alberta, Canada

PERSONAL DEL PROYECTO:

16

Thrive: Heavy Lies the Crown: Un estudio de caso de Unity

¿Cómo optimiza un estudio el rendimiento mientras anima a cientos de personajes?

A medida que el juego tomaba forma, estaba claro para el equipo de Zugalu Entertainment que el rendimiento iba a ser su mayor desafío. Estaban apuntando a un requisito de sistema bastante bajo: una tarjeta gráfica NVIDIA GeForce GTX 750 Ti para la GPU y un procesador de cuatro núcleos, que es un chip con cuatro unidades independientes llamadas núcleos que leen y ejecutan instrucciones de la CPU.

“Cada vez que quieras apuntar a un sistema, la tasa de fotogramas preferible es de 60 fps. Había partes de nuestro sistema que realmente no podíamos cambiar y que estaban consumiendo una gran parte del rendimiento, así que tuvimos que encontrar ganancias de donde pudiéramos”, dice Jackie Li, artista conceptual principal y artista técnico en Zugalu Entertainment.

Mientras buscaban áreas para aumentar el rendimiento, decidieron que la gran cantidad de animaciones de personajes era un problema que debían solucionar, ya que utilizaban una gran cantidad de RAM y causaban que muchos sistemas de jugadores se bloquearan.

Thrive: Heavy Lies the Crown

Los resultados

  • Redujeron el uso de RAM de 20 GB a 500 MB
  • Animaron miles de personajes en pantalla a la vez
  • Reducieron el número de llamadas de dibujo de personajes de 1,000 a 20 llamadas de dibujo instanciadas
  • Mejoraron el rendimiento de aproximadamente 3.5 milisegundos en la tarjeta gráfica GTX 750 Ti a 0.35 milisegundos en la tarjeta gráfica 2080 Ti

Migrando de horneado de vértices a huesos

Para optimizar el proceso de animación de personajes, el equipo construyó un sistema de horneado de animaciones. Necesitaban tener cientos de personajes animados en pantalla a la vez y inicialmente miraron soluciones de activos de animación de vértices. Este fue un gran problema para su uso de VRAM y RAM. No pudieron encontrar otra solución, así que decidieron construir la suya propia.

Para el sistema de animación, el equipo comenzó a usar horneado de vértices, que implica tomar todos los fotogramas clave de su animación y hornear esos datos por vértice. “Una textura contendría una animación, pero el tamaño de la textura para esa animación es bastante grande. El costo de memoria es un factor del número de vértices multiplicado por el número de fotogramas horneados. Así que, 5000 vértices por 100 fotogramas serían una textura de 6 MB en formato RGB de 32 bits float,” dice Li. “Cuando necesitas muchas animaciones diferentes multiplicadas por un gran número de personajes diversos, el costo de memoria comienza a ser extremo.”

Necesitaban reducirlo drásticamente, pero aún mantener la capacidad de usar la GPU para acelerar las animaciones. Decidieron migrar a la cocción de huesos, que proporcionó una forma sencilla de usar menos datos ya que el renderizador de mallas de Unity utiliza huesos para transformar el vértice.

Thrive: Heavy Lies the Crown | Zugalu Entertainment | PlaySide Studios

Thrive: Heavy Lies the Crown | Zugalu Entertainment | PlaySide Studios

“Todo lo que necesitábamos hacer era tomar el proceso de skinning de malla, vinculando una malla 3D a un esqueleto o rig, permitiendo que la malla se deforme y se mueva de manera realista cuando el esqueleto se animaba, y moverlo a la GPU,” dice Garrett Hau, CTO de Zugalu Entertainment.

Luego tomaron las transformaciones de los huesos por cuadro y las cocinaron como texturas. Cocinar ese tipo de información ahorró mucha memoria. “Con la cocción de huesos, diferentes personajes con la misma estructura ósea pueden compartir los datos de animación cocidos. Teníamos personajes como un granjero y un obrero, cuyas estructuras óseas eran las mismas. Reutilizamos los mismos datos cocidos en múltiples personajes para obtener aún más ahorros,” explica Li.

Al final, a pesar de que el juego tiene un montón de personajes y animaciones, redujeron su uso de RAM de 20 GB a 500 MB.

Thrive: Heavy Lies the Crown | Zugalu Entertainment | PlaySide Studios

Vista previa en el editor de animaciones cocidas

Beneficiándose de la instanciación de GPU

Cuando se trató de animación, el equipo se centró en el renderizado de piel, aplicando materiales, shaders y texturas a la malla para simular el color de la piel, la sombra y las texturas. Li explica que, “un beneficio de hacer renderizado de piel basado en computación de GPU es que teníamos acceso a la instanciación de GPU. En lugar de renderizar cada personaje uno a la vez, cada uno siendo una única llamada de dibujo, renderizamos múltiples personajes con diferentes animaciones usando una sola llamada de dibujo.”

Esto fue posible ya que tomaron los datos de animación, texturas, y los empacaron en un solo arreglo de texturas. Esto parece una única textura para la GPU. “Es posible renderizar cada personaje usando una sola llamada de dibujo, pero para ser más flexibles, solo teníamos cuatro personajes que compartían huesos.”

Thrive: Heavy Lies the Crown | Zugalu Entertainment | PlaySide Studios

Capturando una llamada de dibujo instanciada

Al pasar de la horneada de vértices a la horneada de huesos, el equipo redujo el número de llamadas de dibujo de personajes de 1,000 a 20 llamadas de dibujo instanciadas. "La horneada de vértices era difícil ya que cada submalla individual se consideraba diferente." "Un personaje podría tener múltiples partes y cada una tendría una llamada de dibujo," dice Hau.

Con la horneada de huesos, varía según cuántos tipos diferentes de personajes tiene un juego en su lugar. Cada personaje sería una llamada de dibujo como máximo ya que combina todas las submallas en una sola malla. "Por ejemplo," explica Hau, "incluso si hay 10 tipos diferentes de personajes en pantalla y cada uno tiene múltiples submallas, solo habrá 10 llamadas de dibujo."

Thrive: Heavy Lies the Crown | Zugalu Entertainment | PlaySide Studios

Thrive: Heavy Lies the Crown | Zugalu Entertainment | PlaySide Studios

"Unity tiene muchas APIs que hacen exactamente lo que quieres. Esto incluye obtener información específica de un FBX importado, alternar fácilmente las palabras clave de Shader y crear herramientas de Editor personalizadas con APIs de Inspector fáciles de usar."

Jackie Li
Jackie Li - Zugalu Entertainment
Lead Concept Artist and Technical Artist

Construyendo una transformación de matriz

Aprender a hacer skinning de mallas ayudó al equipo a superar sus grandes obstáculos de animación. Usaron las APIs de Unity para ayudarles en el camino.

Para obtener las transformaciones de huesos, accedieron a la propiedad pública de SkinnedMeshRenderer.bones. Esta API devuelve un array de transformaciones que contiene información como cualquier otra transformación de GameObject. Para la medición del rendimiento, utilizaron la detección automática de Unity Profiler de compilaciones de desarrollo que se ejecutan en otras computadoras en la red local. Esto les permitió perfilar el juego en su sistema de requisitos mínimos mientras trabajaban desde sus computadoras principales.

El equipo de pruebas de rendimiento también aplicó ProfilerMarker.Begin() y ProfilerMarker.End() APIs para muestrear el rendimiento por cuadro. Estos se pueden usar creando un ProfileMarket.struct, luego insertando las dos llamadas de método anteriores en el lugar donde querían probar el tiempo de CPU. Este resultado luego apareció en el Unity Profiler.

Thrive: Heavy Lies the Crown | Zugalu Entertainment | PlaySide Studios

Thrive: Heavy Lies the Crown | Zugalu Entertainment | PlaySide Studios

Li dice: "Las API de Unity han sido geniales." "Han ayudado a que ciertas partes del desarrollo sean fluidas." El único error que experimentó el equipo fue con el espacio de coordenadas en la GPU. "Estábamos obteniendo el espacio mundial, pero necesitábamos el espacio de huesos."

Mientras muestreaban un fotograma de la transformación del hueso durante la cocción, necesitaban una transformación relativa a la posición inicial del hueso, conocida como bindpose. Para lograr esto, construyeron una transformación de matriz. Primero, tomaron la matriz de bindpose de SkinnedMeshRenderer.sharedMesh.bindposes. Luego multiplicaron la matriz de transformación mundial del hueso con la matriz de transformación de bindpose (por ejemplo, boneTransform.localToWorldMatrix * bindpose).

Thrive: Heavy Lies the Crown | Zugalu Entertainment | PlaySide Studios

Toma en el editor de un shader de personaje en Shader Graph

"Shader Graph es la respuesta de Unity para crear shaders sin tener un profundo entendimiento del código del shader en sí. Fue realmente conveniente ya que no necesitábamos reescribir todo el shader nosotros mismos."

Garrett Hau
Garrett Hau - Zugalu Entertainment
CTO

Creando shaders con facilidad

Cuando se trató de producir shaders para animar, el equipo eligió Shader Graph. "Es la respuesta de Unity para crear shaders sin tener un profundo entendimiento del código del shader en sí. Fue realmente conveniente ya que no necesitábamos reescribir todo el shader nosotros mismos", dice Hau.

Para el skinning de mallas, tuvieron que hacer muchos cálculos de shader, y los nodos que proporciona Shader Graph les permitieron completarlo. Li explica que, "es muestreo de texturas y matemáticas de matrices." Si quisieras, también podrías usar el nodo de función personalizada de Unity para escribir el código en sí."

Para las herramientas del Editor, el director de animación tenía requisitos específicos para hornear animaciones ya que las creó todas él mismo. “Con C# y las APIs de Unity, fue bastante fácil activar y desactivar la interpolación para los shaders. También nos ayudaron a cambiar el número de huesos para hornear y el número de fotogramas para hornearlos,” dice Li. “Las APIs del Inspector, fáciles de usar, permitieron que estas características del Editor se añadieran fácilmente a la herramienta de horneado.”

Thrive: Heavy Lies the Crown | Zugalu Entertainment | PlaySide Studios

Muestreo de texturas de matriz en Shader Graph

Manteniéndose optimista y consciente

Al final del día, aunque el desarrollo del juego estuvo lleno de altibajos, el equipo mejoró el rendimiento de la GPU de aproximadamente 3.5 milisegundos en la tarjeta gráfica GTX 750 Ti a 0.3 milisegundos en la tarjeta gráfica 2080 Ti.

Como dice Li, “Estamos encantados con los ahorros de rendimiento y con cómo resultó el juego.”

Thrive: Heavy Lies the Crown | Zugalu Entertainment | PlaySide Studios

Thrive: Heavy Lies the Crown | Zugalu Entertainment | PlaySide Studios

Descarga Unity Pro hoy

Comienza a crear juegos que compitan y superen la calidad y el éxito de los lanzamientos de grandes estudios con la ayuda de herramientas poderosas, soporte, socios verificados y una comunidad vibrante.