Renderu.com
10.1 KPublicaciones
68.3 KSeguidores
33.4 MVisitas
Alex Rowan

Unity 6.6 jubila los AssetBundles: la compilación incremental de Slime Rancher 2 baja de 32 minutos a tres

Software

Unity ha publicado en la versión 6.6 los content directories, una nueva forma de empaquetar y cargar contenido que los desarrolladores del motor califican abiertamente de sustituta de los AssetBundles. La diferencia principal es que el runtime ahora direcciona, carga y descarga artefactos individuales —una malla o una textura concretas, por ejemplo— y no el bundle entero. La composición de los bundles, para la que los equipos llevaban años ideando estrategias de agrupación, deja de ser una decisión de diseño.

Unity aporta cifras de un proyecto real: Slime Rancher 2, migrado de Addressables a content directories. La compilación incremental pasó de 32 minutos y 16 segundos a 3 minutos y 4 segundos; la compilación limpia, de 58 minutos y 6 segundos a 37 minutos y 13 segundos. El juego compilado adelgazó de 4 GB a 2,88 GB y la carga se aceleró de 45 a 30 segundos, alrededor de un tercio. Las mediciones se hicieron en Unity 6.6 Beta (6000.6.0b10) en un MacBook Pro con M5 Max.

Unity 6.6 отправляет AssetBundles на покой: инкрементальная сборка Slime Rancher 2 ускорилась с 32 минут до трёх
Carga asíncrona de assets: en Slime Rancher 2 el tiempo de carga bajó de 45 a 30 segundos. Imagen: Unity

Por qué el bundle como unidad de carga dejó de servir

Un AssetBundle es una unidad indivisible de distribución, almacenamiento y carga. Las dependencias se rastrean a nivel de bundle, y hay que cargarlo y descargarlo por completo. De ahí todo el trabajo asociado: repartir a mano los assets en grupos, seguir las cadenas de dependencias, pelearse con la duplicación de recursos compartidos entre bundles.

Los content directories están construidos de otra manera. Unity emplea un esquema de almacenamiento direccionable por contenido, la misma idea que sustenta git: cada archivo de contenido se nombra y se direcciona mediante un hash de su propio contenido. La deduplicación deja de ser tarea del desarrollador y pasa a ser una propiedad del formato. Eso sí, los artefactos se referencian entre sí no por hash, sino por identificadores estables: de lo contrario, editar un solo archivo cambiaría en cascada los hashes de toda la cadena; la correspondencia entre identificadores y hashes se guarda en el manifiesto de la compilación.

Qué se incluye en la compilación ya no se define marcando cada asset, sino mediante assets raíz, que son ScriptableObject corrientes. Las dependencias se arrastran automáticamente y se rastrean por asset individual, no por bundle. En el código aparece el tipo Loadable<T>

, una referencia cargable a nivel de motor: se declara un campo del tipo Loadable<Mesh> bodyMesh y después se llama a bodyMesh.Load(); los assets individuales pueden cargarse y descargarse de forma síncrona o asíncrona, con async/await. Los objetos a los que apunta un Loadable entran en la compilación, pero no se cargan en memoria hasta que se solicitan. La carga en sí es completamente asíncrona tanto en la lectura como en la deserialización, usando las API asíncronas de cada plataforma; en la base está el formato de archivos de contenido que apareció en DOTS en 2022.
Unity 6.6 отправляет AssetBundles на покой: инкрементальная сборка Slime Rancher 2 ускорилась с 32 минут до трёх
Conversión de proyectos Addressables a content directories. Imagen: Unity

Qué hacer si ya estás con Addressables

Unity no ha roto los proyectos existentes. Los content directories son compatibles con el paquete Addressables, que sigue siendo la interfaz para organizar el contenido, y los proyectos existentes pueden convertirse al nuevo backend: Slime Rancher 2 se migró sin una sola modificación de código. El procedimiento de conversión y la comparación de las opciones están descritos en la documentación de Addressables.

Lo que cambia es el enfoque sobre qué hay que marcar siquiera. Unity incluye automáticamente en la compilación los assets referenciados por un Loadable y elimina por su cuenta los duplicados, así que ya no hacen falta bundles separados para las dependencias comunes. La documentación recomienda crear un único asset raíz para todo el proyecto y, si el código carga muchos assets mediante claves de texto, usar un ScriptableObject como lista de assets en lugar de multitud de raíces.

Unity 6.6 отправляет AssetBundles на покой: инкрементальная сборка Slime Rancher 2 ускорилась с 32 минут до трёх
Los content directories encajan en una configuración de Addressables ya existente sin reescribir código. Imagen: Unity

Limitaciones que conviene conocer de antemano

En la 6.6 los content directories solo funcionan con contenido local, el que viaja junto al player. Para la entrega remota y las descargas posteriores a la instalación siguen haciendo falta AssetBundles o un mecanismo propio. Unity promete una entrega granular «por el aire» completa en la generación Unity 7, con detalles en 2027.

  • la API BuildUsage
es incompatible con los content directories: habrá que corregir los assets que la usen y, para localizar los problemas, se propone Project Auditor;
  • los assets con dependencias circulares se fusionan en un único bloque cargable: Unity muestra una advertencia y, si el tamaño total del ciclo supera los 64 MB, la compilación falla;
  • la compilación limpia puede resultar más lenta que la de AssetBundles;
  • mezclar AssetBundles y content directories en un mismo proyecto hace que las dependencias comunes se compilen dos veces;
  • cada compilación es autosuficiente: si dos content directories referencian el mismo asset, una copia acabará en cada una.
  • Un content directory se registra en el runtime, tras lo cual sus assets quedan disponibles; las escenas también se enlazan mediante referencias cargables. Los detalles están descritos en la documentación oficial de Unity sobre content directories.

    Por qué Unity ha necesitado cambiar los cimientos justo ahora

    Los content directories parecen un cambio de apoyo de toda la pila de contenido más que una función suelta de la 6.6. Las limitaciones del AssetBundle se dejan ver también en el diseño de Addressables: una parte apreciable del trabajo con ese paquete se reducía a compensar la indivisibilidad del bundle. Si la unidad básica se vuelve atómica, parte de las tareas habituales de los artistas técnicos y los ingenieros de compilación —repartir por grupos, cazar duplicados, gestionar a mano las cadenas de dependencias— pierden sentido por sí solas.

    La dirección coincide con el movimiento general de la industria hacia los almacenamientos direccionables por contenido y las compilaciones incrementales: el mismo principio lleva tiempo funcionando en los sistemas de control de versiones y en las cachés de compilación, y en los proyectos grandes rinde sobre todo en el tiempo de iteración. La reducción diez veces de la compilación incremental en el ejemplo de Slime Rancher 2 golpea no tanto a la build final como al ciclo diario de editar y comprobar, que es donde los equipos gastan sus horas de trabajo.

    Addressables, por su parte, no desaparece: a juzgar por cómo está planteada la migración, el paquete sigue siendo la interfaz de usuario y los content directories ocupan el lugar de debajo. Teniendo en cuenta que Unity vincula la entrega remota a los nuevos cimientos en la generación Unity 7, el paso a este backend probablemente acabará siendo condición para la descarga granular de contenido, y a los proyectos que hoy viven del reparto manual de bundles les conviene estudiar la conversión con antelación.

    ¿Por qué se ha jubilado a los AssetBundles justo ahora: la presión de Godot y Unreal, el dolor acumulado de Addressables, un cambio de rumbo tras la salida de John Riccitiello?

    0
    Más sobre el tema:
    El complemento gratuito Hardcraft lee la estructura de la exportación CAD y construye con ella una malla de juego en Blender
    Obsidian pasa a depender de Bethesda: Fallout sigue en manos de Bethesda Game Studios
    Undead Labs se separa de Xbox y se convierte en un estudio propiedad de sus empleados, al precio de importantes despidos
    El 85,8 % de los desarrolladores de videojuegos japoneses usa IA generativa: la cifra creció notablemente en un año
    Comentarios1
    fecha de publicación Todos los idiomas Sólo Inglés