O novo pipeline de importação de ativos: Base sólida para acelerar a importação de ativos

A partir da versão 2019.3, o novo Asset Import Pipeline é o padrão para novos projetos, com o objetivo de economizar seu tempo com trocas de plataforma mais rápidas e estabelecer a base para importações mais rápidas. Também estamos melhorando a escala do pipeline de ativos para projetos muito grandes. Continue lendo para saber mais sobre as novas melhorias, além de nossa motivação e considerações. Sempre que você coloca um novo ativo em seu projeto, ele não se torna parte do projeto até que o Asset Import Pipeline o descubra e importe. A detecção correta do estado do projeto é a responsabilidade do Asset Import Pipeline, permitindo que você consulte esse estado por meio de várias APIs. Em 2017, o trabalho de reescrita do Asset Import Pipeline começou a abrir caminho para uma abordagem mais robusta e escalável, ao mesmo tempo em que abordava uma série de pontos problemáticos relatados por você em seus fluxos de trabalho diários. Com o Unity 2019.3 (agora disponível em beta), o novo Asset Import Pipeline (também conhecido como Asset Import Pipeline V2) será a implementação padrão para novos projetos. Projetos mais antigos podem optar por atualizar para o novo Asset Import Pipeline para obter os benefícios deste novo sistema. Agora é um bom momento para compartilhar algumas das ideias por trás do novo pipeline. Especificamente, queremos compartilhar as considerações tomadas para garantir que o novo sistema seja compatível com as APIs existentes, para que os scripts não precisem ser reescritos ao atualizar para o novo Asset Import Pipeline.
Existem vários fluxos de trabalho que fazem parte de um ciclo de desenvolvimento diário. Identificamos os problemas que mais consomem tempo e implementamos soluções para eles. Importar ativos pode levar muito tempo. Converter os dados de origem para um formato que o Editor Unity, ou uma plataforma, esteja pronto para utilizar não é um processo trivial. Por exemplo, importar um modelo 3D complexo requer um grande número de cálculos e, quando combinado com animação, esse tempo pode aumentar rapidamente. Para resolver isso, há três conceitos-chave que precisam ser abordados como parte da solução:
Com a maioria dos tipos de ativos, o Unity precisa converter os dados do arquivo de origem, dependendo da plataforma de destino dos seus projetos. O resultado pode variar entre formatos de GPU compatíveis, como PVRTC, ASTC ou ETC. Isso ocorre porque a maioria dos formatos de arquivo são otimizados para economizar armazenamento, enquanto em um jogo ou qualquer outro aplicativo em tempo real, os dados dos ativos precisam estar em um formato pronto para uso imediato pelo hardware, como CPU, gráficos ou hardware de áudio. Por exemplo, quando o Unity importa um arquivo de imagem PNG como uma textura, ele não usa os dados originais no formato PNG no tempo de execução. Em vez disso, quando a textura é importada, o Unity cria uma nova representação da imagem em um formato diferente, que é armazenado na pasta Biblioteca do projeto. Esta versão importada é usada pela classe Texture no mecanismo e carregada na GPU para exibição em tempo real. Isso é chamado de Resultado da Importação.
Precisamos saber que tanto você quanto eu obteremos os mesmos resultados de importação no mesmo formato exato quando importamos, mesmo quando usamos hardware diferente. O princípio de obter a mesma saída para uma determinada entrada é o que chamamos de determinismo.
O Asset Import Pipeline monitora todas as dependências de cada ativo e mantém um cache das versões importadas de todos os ativos. As dependências de importação de um ativo são todos os dados que podem influenciar o resultado da importação. Isso significa que se qualquer uma das dependências de importação do seu ativo for alterada, a versão em cache do ativo importado ficará desatualizada e o ativo precisará ser reimportado para refletir essas alterações.
Existem diferentes situações em que a importação pode demorar muito tempo. Identificamos os dois fluxos de trabalho a seguir e implementamos duas soluções para resolver os problemas acima: Importação de novos projetos e troca rápida de plataforma.
Quando você configura um projeto pela primeira vez, é essencialmente o mesmo que quando a pasta Biblioteca é excluída. Isso significa que cada ativo na pasta de ativos precisa ser enumerado e importado pelo Asset Import Pipeline. Esta é naturalmente uma operação cara. No entanto, ao garantir que nosso processo de importação seja determinístico e estável em todas as máquinas, o tempo necessário para recuperar os resultados da importação pode ser reduzido em muitas ordens de magnitude, dependendo do tamanho do Ativo de Origem e do tamanho do Resultado da Importação. Conseguimos isso usando o novo Unity Accelerator , que armazena em cache os resultados de importação na nuvem de qualquer pessoa conectada a ele, permitindo que você baixe diretamente os resultados de importação de um servidor em vez de ter que passar pelo processamento pesado que a importação de um ativo implicaria.
Até o Unity 2019.2 (com o Asset Import Pipeline original), a pasta Biblioteca era composta pelos GUIDs dos Ativos, sendo seus nomes de arquivo. Portanto, alternar de uma plataforma para outra invalidaria o Resultado da Importação na pasta Biblioteca , fazendo com que ele fosse importado novamente toda vez que você alternasse de plataforma.

Se você tivesse que alternar entre plataformas várias vezes por dia, isso poderia facilmente levar horas, dependendo do tamanho do seu projeto.
Alguns de vocês descobriram soluções alternativas para isso, como ter uma cópia do seu projeto por plataforma na sua máquina, mas isso não é muito escalável.
Com o novo Asset Import Pipeline, removemos o mapeamento do GUID para o nome do arquivo. Como as dependências de um ativo específico são rastreadas, podemos fazer um hash de todas elas para criar uma revisão para o resultado da importação de um ativo. Isso nos permite ter várias revisões por ativo, o que significa que não estamos mais vinculados a um mapeamento de GUID para nome de arquivo. Não ter esse requisito nos permite ter resultados de importação que funcionam em diferentes configurações. Para troca rápida de plataforma, poderíamos ter um resultado de importação por plataforma, de modo que, quando você alternar entre plataformas, o resultado da importação já estará lá, tornando a troca de plataforma muito mais rápida do que com o Asset Import Pipeline V1.

À medida que você faz alterações nos ativos, o Unity gera uma série de novos arquivos que serão gerados. Isso ocupará mais espaço de armazenamento no seu disco. No entanto, a maneira como decidimos abordar esse problema é remover os resultados de importação não utilizados quando o Unity for reiniciado. Acompanhamos os resultados de importação mais recentes por plataforma para que a troca rápida de plataforma ainda possa ocorrer enquanto os resultados de importação mais antigos são removidos, ajudando assim você a liberar espaço em disco.
O novo Asset Import Pipeline está disponível com o Unity 2019.3 beta. Se você tiver um projeto existente, poderá atualizar para o novo Asset Import Pipeline usando a janela Configurações do projeto no Editor:


Selecionar a Versão 2 informará ao editor que você deseja usar o novo Asset Import Pipeline junto com este projeto, e reiniciar seu projeto o importará novamente usando o novo código do Asset Import Pipeline. Isso tem basicamente o mesmo efeito que excluir sua pasta Biblioteca, mas sem excluí-la. Ao alternar para usar o Asset Import Pipeline V2, os resultados de importação do Asset Import Pipeline original não são excluídos, pois o V2 cria sua própria estrutura de pastas para armazenar seus resultados de importação.
Projetos que você criou no Unity 2019.2 ou anterior ainda usarão o Asset Import Pipeline original por padrão. Ao abrir um projeto desse tipo no Unity 2019.3 pela primeira vez, você terá a opção de atualizar para o novo Asset Import Pipeline. Se você recusar, seu projeto continuará usando o Pipeline de importação de ativos original. Além disso, a versão selecionada é armazenada no arquivo EditorSettings.asset do seu projeto, para que possa ser controlada por versão.

Ao criar um novo projeto com o Unity 2019.3 ou mais recente, o novo Asset Import Pipeline se tornou a nova maneira padrão de trabalhar. Todos os novos projetos que você criar o utilizarão.
Na Unite Copenhagen 2019, nossa equipe apresentou duas palestras. Minha palestra é uma introdução geral aos tópicos abordados neste post do blog e pode orientar sua tomada de decisão para suas próprias estratégias de gestão de ativos. Meu colega Jonas Drewsen falou sobre os próximos recursos voltados para tornar o pipeline de ativos mais extensível e garantir a estabilidade do projeto:
Obtenha o Unity 2019.3 beta e experimente o novo Asset Import Pipeline. Estamos ansiosos para saber o que você pensa no fórum! Você também pode entrar em contato comigo no Twitter se tiver mais dúvidas.
