El nuevo canal de importación de activos: Base sólida para acelerar las importaciones de activos

A partir de 2019.3, el nuevo canal de importación de activos es el predeterminado para nuevos proyectos, con el objetivo de ahorrarle tiempo con un cambio de plataforma más rápido y sentar las bases para importaciones más rápidas. También estamos mejorando la escala de la cartera de activos para proyectos muy grandes. Continúe leyendo para obtener más información sobre las nuevas mejoras y nuestra motivación y consideraciones. Cada vez que agrega un nuevo activo a su proyecto, en realidad no se convierte en parte del proyecto hasta que el proceso de importación de activos lo descubre y lo importa. La detección correcta del estado del proyecto es de lo que se encarga el Asset Import Pipeline al tiempo que le permite consultar este estado a través de varias API. En 2017, el trabajo de reescritura del canal de importación de activos comenzó a allanar el camino hacia un enfoque más sólido y escalable, al mismo tiempo que abordaba una serie de puntos problemáticos informados por usted en sus flujos de trabajo diarios. Con Unity 2019.3 (ahora disponible en versión beta), el nuevo Asset Import Pipeline (también conocido como Asset Import Pipeline V2) será la implementación predeterminada para nuevos proyectos. Los proyectos más antiguos pueden optar por actualizarse al nuevo canal de importación de activos para obtener los beneficios de este nuevo sistema. Ahora es un buen momento para compartir algunas de las ideas detrás del nuevo oleoducto. En concreto, queremos compartir las consideraciones tomadas para asegurarnos de que el nuevo sistema sea compatible con las API existentes, de modo que no sea necesario reescribir los scripts al actualizar al nuevo canal de importación de activos.
Existen numerosos flujos de trabajo que forman parte de un ciclo de desarrollo diario. Hemos identificado los problemas que consumen más tiempo y hemos implementado soluciones para ellos. La importación de activos puede llevar mucho tiempo. Convertir los datos de origen a un formato que el editor de Unity o una plataforma estén listos para utilizar no es un proceso trivial. Por ejemplo, importar un modelo 3D complejo requiere una gran cantidad de cálculos y, cuando se combina con la animación, este tiempo puede crecer rápidamente. Para abordar esto hay tres conceptos clave que deben abordarse como parte de la solución:
Con la mayoría de los tipos de activos, Unity necesita convertir los datos del archivo de origen, según la plataforma de destino de sus proyectos. El resultado variará entre los formatos de GPU compatibles, como PVRTC, ASTC o ETC. Esto se debe a que la mayoría de los formatos de archivos están optimizados para ahorrar almacenamiento, mientras que en un juego o cualquier otra aplicación en tiempo real, los datos de los activos deben estar en un formato listo para su uso inmediato por parte del hardware, como la CPU, los gráficos o el hardware de audio. Por ejemplo, cuando Unity importa un archivo de imagen PNG como textura, no utiliza los datos originales con formato PNG en tiempo de ejecución. En cambio, cuando se importa la textura, Unity crea una nueva representación de la imagen en un formato diferente que se almacena en la carpeta Biblioteca del proyecto. Esta versión importada es la que utiliza la clase Texture en el motor y la que se carga en la GPU para su visualización en tiempo real. Esto se conoce como Resultado de importación.
Necesitamos saber que tanto usted como yo obtenemos los mismos resultados de importación en exactamente el mismo formato cuando importamos, incluso cuando usamos hardware diferente. El principio de obtener la misma salida para una entrada dada es lo que llamamos determinismo.
El canal de importación de activos realiza un seguimiento de todas las dependencias de cada activo y mantiene un caché de las versiones importadas de todos los activos. Las dependencias de importación de un activo son todos los datos que podrían influir en el resultado de la importación. Esto significa que si se modifica alguna de las dependencias de importación de su activo, la versión en caché del activo importado queda desactualizada y el activo debe volver a importarse para reflejar esos cambios.
Existen diferentes situaciones en las que la importación puede tardar mucho tiempo. Hemos identificado los siguientes dos flujos de trabajo e implementado dos soluciones para abordar los problemas mencionados anteriormente: Importación de nuevos proyectos y cambio rápido de plataforma.
Cuando se configura un proyecto por primera vez, es básicamente lo mismo que cuando se elimina la carpeta Biblioteca. Esto significa que cada activo en la carpeta de activos debe ser enumerado e importado por el canal de importación de activos. Naturalmente, se trata de una operación costosa. Sin embargo, al garantizar que nuestro proceso de importación sea determinista y estable en todas las máquinas, el tiempo que lleva recuperar los resultados de la importación se puede reducir en muchos órdenes de magnitud, dependiendo del tamaño del activo de origen y del tamaño del resultado de la importación. Logramos esto mediante el uso del nuevo Unity Accelerator , que almacena en caché los resultados de importación en la nube de cualquier persona que esté conectada a él, lo que le permite descargar directamente los resultados de importación desde un servidor en lugar de tener que pasar por el pesado procesamiento que implicaría la importación de un activo.
Hasta Unity 2019.2 (con el Asset Import Pipeline original), la carpeta Biblioteca estaba compuesta por los GUID de los activos y su nombre de archivo. Por lo tanto, cambiar de una plataforma a otra invalidaría el resultado de importación en la carpeta Biblioteca , lo que provocaría que se vuelva a importar cada vez que cambie de plataforma.

Si tuvieras que cambiar de plataforma varias veces al día, esto fácilmente podría llevar horas, dependiendo del tamaño de tu proyecto.
Algunos de ustedes han descubierto soluciones alternativas para esto, como tener una copia de su proyecto por plataforma en su máquina, pero eso no escala muy bien.
Con el nuevo canal de importación de activos, hemos eliminado la asignación de GUID a nombre de archivo. Dado que se rastrean las dependencias de un activo en particular, podemos combinarlas para crear una revisión para el resultado de importación de un activo. Esto nos permite tener múltiples revisiones por activo, lo que significa que ya no estamos limitados por una asignación de GUID a nombre de archivo. No tener este requisito nos permite tener resultados de importación que funcionan en diferentes configuraciones. Para un cambio rápido de plataforma, podríamos tener un resultado de importación por plataforma, de modo que cuando cambie de plataforma de un lado a otro, el resultado de importación ya esté allí, lo que hace que el cambio de plataforma sea muchos órdenes de magnitud más rápido que con Asset Import Pipeline V1.

A medida que realiza cambios en los activos, Unity genera una serie de archivos nuevos que se generarán. Esto ocupará más espacio de almacenamiento en su disco. Sin embargo, la forma en que hemos decidido abordar este problema es eliminar los resultados de importación no utilizados cuando se reinicia Unity. Realizamos un seguimiento del último resultado de importación por plataforma para que el cambio rápido de plataforma aún pueda realizarse mientras se eliminan los resultados de importación más antiguos, lo que lo ayuda a liberar parte de su espacio en disco.
El nuevo canal de importación de activos está disponible con la versión beta de Unity 2019.3. Si tiene un proyecto existente, puede actualizarlo al nuevo canal de importación de activos mediante la ventana Configuración del proyecto en el Editor:


Al seleccionar la Versión 2, le indicará al editor que ahora desea utilizar el nuevo canal de importación de activos junto con este proyecto, y al reiniciar su proyecto lo volverá a importar utilizando el código del nuevo canal de importación de activos. Esto básicamente tiene el mismo efecto que eliminar la carpeta Biblioteca, pero sin eliminarla. Al cambiar para usar Asset Import Pipeline V2, los resultados de importación del Asset Import Pipeline original no se eliminan ya que V2 crea su propia estructura de carpetas para almacenar sus resultados de importación.
Los proyectos que haya creado en Unity 2019.2 o una versión anterior seguirán utilizando el canal de importación de activos original de forma predeterminada. Cuando abra un proyecto de este tipo en Unity 2019.3 por primera vez, tendrá la opción de actualizar al nuevo canal de importación de activos. Si rechazas, tu proyecto continuará utilizando el canal de importación de activos original. Además, la versión seleccionada se almacena en el archivo EditorSettings.asset de su proyecto, por lo que se puede controlar su versión.

Al crear un nuevo proyecto con Unity 2019.3 o una versión más reciente, el nuevo canal de importación de activos se ha convertido en la nueva forma predeterminada de trabajar. Todos los proyectos nuevos que crees lo utilizarán.
En Unite Copenhagen 2019, nuestro equipo presentó dos charlas. Mi charla es una introducción general a los temas tratados en esta publicación del blog y puede guiar su toma de decisiones para sus propias estrategias de gestión de activos. Mi colega Jonas Drewsen habló sobre las próximas características orientadas a hacer que el flujo de activos sea más extensible y garantizar la estabilidad del proyecto:
Obtenga la versión beta de Unity 2019.3 y pruebe el nuevo canal de importación de activos. ¡Esperamos escuchar tu opinión en el foro! También puedes ponerte en contacto conmigo en Twitter si tienes más preguntas.
