Como automatizar a renderização de imagens usando o ZYNC

Neste tutorial, mostramos como automatizar a renderização 3D usando o ZYNC, um serviço que é útil para implantar renderizações 3D no Google Cloud Platform (GCP). Este tutorial é um complemento de Como automatizar o aprendizado de máquina sobre a Internet das Coisas (IoT na sigla em inglês) e algumas das etapas descritas não se aplicam a outros fluxos de trabalho.

Engenheiros, arquitetos, artistas de efeitos visuais e pesquisadores precisam lidar com enormes quantidades de dados geométricos, normalmente armazenados em formatos como OBJ, FBX e Alembic. Esses conjuntos de dados têm um imenso potencial de visualização, simulação ou aprendizado de máquina (ML, na sigla em inglês), mas criar uma biblioteca visual desses recursos pode ser um processo complicado e demorado. Devido às centenas ou milhares de modelos individuais, é desafiador garantir uma aparência consistente, como exemplificado na Figura 1.

Uma coleção de recursos 3D renderizados consistentemente.
Figura 1: uma coleção de recursos 3D consistentemente renderizados, cortesia de Andrew Averkin.

E se fosse possível renderizar cada recurso usando um modelo simples e reproduzível? E se fosse possível automatizar o processo para renderizar novos recursos simplesmente mudando um arquivo de texto?

Ao automatizar o processo de renderização para vários recursos, você poderá manter um ambiente estável de animação e iluminação, impor convenções de nomenclatura e preencher consistentemente os metadados. Assim que os dados são gerados, eles são bem organizados, o que é um requisito para o treinamento de ML automatizado ou outros aplicativos que requerem um conjunto estruturado e marcado de recursos.

Neste tutorial, você aprenderá como criar cenas 3D por meio de procedimentos usando modelos de arquivo e como renderizá-las usando a API para Python do ZYNC. O farm de renderização do ZYNC funciona com pacotes de criação de conteúdo digital (DCC, na sigla em inglês) conhecidos. É possível acessá-lo com uma API para Python.

Terminologia da renderização

Um render é uma unidade genérica de trabalho no canal de produção de efeitos visuais. Renderizar significa processar computacionalmente um arquivo de cena para produzir uma imagem. Executar um render refere-se ao envio do arquivo de cena para um farm de renderização, em que cada máquina renderiza um frame, processando computacionalmente os dados desse frame.

Objetivos

  • Gerar de maneira processual imagens a partir de uma biblioteca de dados de geometria.
  • Enviar um grande número de jobs para o ZYNC para renderização no GCP.
  • Criar um script YAML simples para realizar tarefas repetitivas.

Custos

Neste tutorial, usamos o ZYNC Render. A realização da tarefa está sujeita a custos de faturamento por minuto pelo uso do software, renderizador e tipo de máquina. Os recursos e renders sincronizados são armazenados no Cloud Storage. Consulte a página de preços do ZYNC para saber mais.

Use a calculadora de preços do ZYNC para gerar uma estimativa do custo com base no uso previsto. A configuração padrão usada aqui renderiza com Maya/Arnold em uma instância preemptiva do tipo zync-16vcpu-32gb. Os novos usuários do GCP podem estar qualificados para uma avaliação gratuita.

Usando a configuração padrão deste tutorial, a resolução de renderização e as opções de software, a renderização de cada peça custa aproximadamente US$ 4,00. A renderização de todas as três peças no ZYNC custará cerca de US$ 12,00, conforme demonstrado no detalhamento de custos a seguir:

detalhamento de custos

Antes de começar

Para seguir este tutorial, é necessário ter acesso ao shell a partir de um computador que possa executar o aplicativo cliente do ZYNC e tenha um visor gráfico. Você pode executar este tutorial na sua estação de trabalho local usando Terminal no MacOS, PowerShell no Windows ou Remote Desktop Protocol em uma instância de Windows Server no Compute Engine.

Observação sobre o Windows: este tutorial requer o uso de um ambiente Linux ou semelhante e de uma interface de linha de comando. No Windows, use ferramentas como o Cygwin ou o PowerShell.

Configuração

  1. No Console do GCP, na página do seletor de projetos, selecione ou crie um projeto do GCP.

    Acesse a página do seletor de projetos

  2. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform. Saiba como confirmar que o faturamento está ativado para seu projeto.

  3. Ative a(s) ZYNC e Cloud Storage APIs necessária(s).

    Ativar a(s) APIs

  4. Instale e inicialize o SDK do Cloud..
  5. Clone o repositório Git deste tutorial contendo os scripts do projeto:
    git clone https://github.com/GoogleCloudPlatform/automating-zync-renders

    O diretório resultante, automating-zync-renders, será seu diretório de trabalho.

  6. Navegue até o diretório de trabalho antes de continuar:
    cd automating-zync-renders
  7. Para isolar o ambiente antes da instalação, execute virtualenv:
    virtualenv --python=python2.7 env
    source env/bin/activate

    Saiba mais sobre o virtualenv.

  8. Verifique se você tem todos os pacotes do Python necessários instalados no seu ambiente:
    pip install -r requirements.txt
  9. Registre sua conta do ZYNC gratuita e reserve um URL do ZYNC.
    1. Use o código do projeto criado na primeira etapa no campo Código do projeto do Google. Se você não souber esse número, poderá localizar o código.
    2. Escolha um URL do ZYNC exclusivo, com base no seu nome, no nome da empresa ou algum outro identificador exclusivo. Você receberá um URL de [NAME].zync.io.
    3. Depois de se registrar, aguarde alguns minutos para que seu URL seja disponibilizado.
  10. Faça o download da Python API do ZYNC no diretório de trabalho. Anote o caminho do diretório porque você o usará mais tarde, quando atualizar o arquivo de configuração. Para garantir a compatibilidade com este tutorial, a versão de commit específica está incluída aqui. Substitua [NAME] pelo URL exclusivo que você escolheu quando registrou sua conta do ZYNC:
    git clone https://github.com/zync/zync-python
    cd zync-python
    git checkout 927ea857782a0e3245cff3470f749892e572c55c
    echo 'ZYNC_URL = "https://[NAME].zync.io"' > config.py
  11. Faça o download, instale e inicie o aplicativo cliente do ZYNC na sua estação de trabalho local.

Se você navegar para o URL https://[NAME].zync.io reservado como parte do processo de registro do ZYNC, poderá acompanhar o uso do ZYNC no painel Divisão por trabalhos em Minha conta > Uso.

Saiba mais sobre como configurar seu projeto na página de documentação do ZYNC.

Como detalhar o canal de produção

Não é necessário acessar o software 3D para concluir este tutorial. No entanto, se você não tiver acesso, não conseguirá editar os recursos ou o ambiente. O repositório deste tutorial inclui arquivos originalmente criados no Autodesk Maya, que podem ser encontrados no diretório rigs.

Se você quiser modificar o ambiente de renderização ou adicionar outros requisitos de software, precisará modificar o canal para adaptá-lo às diferenças entre aplicativos.

A Figura 2 mostra uma visão geral do processo de renderização.

O pipeline de produção de renderização
Figura 2: o canal de produção de renderização.

Noções básicas sobre os componentes

Cada recurso é renderizado em um ambiente idêntico. Esse ambiente consiste na combinação de uma série de modelos ou rigs. Todos os arquivos de modelo estão no diretório de trabalho, no diretório rigs, no formato mayaAscii, que é formato de arquivo legível para humanos nativo do Maya. Estão incluídos os rigs a seguir.

Modelo ou rig Nome do arquivo Descrição
Modelo de base base_scene_template.ma Um arquivo ASCII do Maya vazio que executa a substituição de string para fazer referência aos rigs de câmera e luz e a cada recurso individual.
Rig de câmera cam_rig.ma Um arquivo ASCII do Maya que contém uma câmera animada.
Rig de luz light_rig.ma Um arquivo ASCII do Maya que contém um plano de fundo de ambiente contínuo e três luzes. Este arquivo também contém configurações para realizar uma renderização Arnold.

Como preparar os modelos

Neste exemplo, use uma biblioteca de recursos de geometria 3D ("peças") baseada em uma coleção de peças mecânicas aleatórias comumente conhecida como kitbash. É necessário que a colocação de cada modelo em 3D no espaço de mundo (orientação, escala e localização) seja consistente para que os rigs de luz e câmera tratem as peças da mesma maneira. Veja na Figura 3 um exemplo de renderização consistente, com três peças e a colocação delas no espaço de mundo.

O canal de produção de renderização
Figura 3: três recursos preparados para a renderização. Fila de cima: exibição em aramado. Fila de baixo: imagem renderizada final. Cada recurso está centralizado na origem com iluminação e colocação em escala consistentes.

Para preparar os modelos para renderização, é necessário verificar se cada peça:

  • está em um arquivo próprio;
  • está em conformidade com uma convenção de nomenclatura consistente;
  • está centralizada na origem;
  • foi colocada em escala em relação a todas as outras peças.

Todos os arquivos incluídos neste tutorial atendem a esses requisitos.

Como autenticar no GCP

Crie uma chave de conta de serviço, para permitir que o ZYNC na estação de trabalho local se comunique com o GCP.

  1. No console, acesse a página Credenciais em APIs e serviços > Credenciais.
  2. Selecione Criar credenciais > Chave de conta de serviço.

    criar credenciais

  3. Digite os valores abaixo. Após você preencher o campo Nome da conta de serviço, o campo Código da conta do serviço é preenchido automaticamente. No entanto, será possível editá-lo com outro valor da sua escolha.

    • Conta de serviço: New service account
    • Nome da conta de serviço: zync-api
    • Papel: Storage Admin

      Para definir o Papel, clique em Selecionar um papel, role para baixo a lista até Storage e selecione Administrador do Storage.

    • ID da conta de serviço: zync-api

    • Tipo de chave: JSON

    valores de credenciais

  4. Clique em Criar. É feito o download de um arquivo JSON na sua estação de trabalho local. Mova-o para a raiz do diretório de trabalho.

Como atualizar o arquivo de configuração

O canal executa um script em Python que lê um arquivo de configuração YAML localizado no diretório de trabalho. O arquivo de configuração contém caminhos para todos os arquivos, incluindo o arquivo de autenticação e outras configurações específicas do projeto e do ZYNC.

  1. No diretório de trabalho, encontre o arquivo de configuração do modelo projectData.config-template.

  2. Duplique o arquivo de configuração no diretório de trabalho e o renomeie como projectData.config:

    cp projectData.config-template projectData.config
    

Noções básicas sobre o arquivo de configuração

Alguns valores padrão no arquivo de configuração de exemplo precisam ser preenchidos com seus dados de usuário, caminhos locais e nomes de arquivos. Para executar este tutorial, é necessário modificar os seguintes valores padrão de configuração: gcp_project, base_path, auth_file e zync_lib_path.

A lista a seguir mostra as variáveis na ordem que aparecem no arquivo de configuração projectData.config-template:

gcp_project
O código do projeto do Cloud que você está usando neste tutorial.
base_path
O caminho absoluto para seu diretório de trabalho.
auth_file
O caminho relativo ou absoluto para o arquivo de autorização gerado em Como autenticar no GCP.
zync_lib_path
O caminho absoluto para a Python API do ZYNC que você instalou durante a etapa de instalação.
scene_template
O caminho relativo para base_scene_template.ma.
camera_rig
O caminho relativo para cam_rig.ma.
light_rig
O caminho relativo para light_rig.ma.
scene_dir
O caminho relativo para o diretório em que os arquivos de cena montados estão gravados. Depois que esses arquivos são gerados, é feito o upload deles no ZYNC para a renderização.
image_dir
O caminho relativo para o diretório em que as imagens renderizadas finais estão gravadas.
parts_dir
O caminho relativo para o diretório que contém os arquivos de geometria individuais.
parts
A lista de nomes dos arquivos de geometria individuais (somente nome, sem o caminho) a serem iterados.

Como executar um render

Após o arquivo de configuração ser preenchido corretamente, inicie o primeiro render no ZYNC usando o script render.py. Na linha de comando, acesse o diretório do projeto e inicie um render:

cd automating-zync-renders
./render.py --config projectData.config

Na primeira vez que o script for executado, você poderá ser solicitado a autenticar sua Conta do Google em um navegador.

O script render.py gera uma saída detalhando o processo descrito em Como detalhar o pipeline de produção. Observe que o nível de geração de registros padrão está definido como 4 (INFO). Você pode modificá-lo para fornecer ainda mais saídas, usando o sinalizador --verbose. Para saber mais, use o sinalizador --help.

Como monitorar os renders

Após executar o script, verifique se os jobs estão sendo executados acessando o URL https://[NAME].zync.io reservado durante o processo de registro no ZYNC. O ZYNC pode levar até cinco minutos para implantar e alocar uma instância de render. As instâncias estão listadas no painel Máquinas, como demonstrado na Figura 4.

O Console do ZYNC
Figura 4: o console do ZYNC.

Após os jobs serem enviados para renderização, o aplicativo cliente do ZYNC faz o upload dos arquivos da estação de trabalho local para Cloud Storage. Você pode ver o progresso do upload no painel Detalhes do job e no aplicativo cliente do ZYNC, na guia Registro.

Depois de executar o script render.py, você verá três jobs de renderização do ZYNC. Cada um está renderizando os frames de 1 a 1.000 de uma peça diferente, extraída da lista de arquivos Alembic em parts, em projectData.config.

É possível iniciar quantos jobs você quiser com o ZYNC. Ele enfileira os jobs automaticamente com base na disponibilidades de recursos e na prioridade de cada job. Neste tutorial, envie os jobs para o ZYNC usando a Python API. Você também pode enviar os jobs usando outros aplicativos de 3D conhecidos. Você pode iniciar todos os jobs ao mesmo tempo ou um de cada vez.

Leia a documentação do ZYNC para saber mais.

Como renderizar sua própria geometria

Para renderizar sua própria geometria nesse canal, é necessário ter acesso a um aplicativo de 3D que possa exportar arquivos no formato Alembic. Siga estas etapas:

  1. Prepare as peças conforme descrito em Como preparar os modelos.
  2. Exporte os modelos no formato Alembic para o diretório parts.
  3. Renomeie todos os arquivos exportados no diretório parts para que estejam de acordo com esta convenção de nomenclatura: part#.abc. O script render.py aceitará um número de peça de qualquer tamanho. Os números inferiores a 1000 serão complementados para ter quatro dígitos.
  4. Substitua a lista de peças padrão pelos nomes dos seus arquivos Alembic em projectData.config.
  5. Siga as instruções em Como executar um render.

Como enviar renders finais para o Cloud Storage

Após a conclusão de todas as renderizações, o aplicativo cliente do ZYNC automaticamente faz o download dos renders para o diretório de trabalho em images/[PART_NAME].

Durante o envio de um job, é criado um intervalo do Cloud Storage com o nome gs://[PROJECT-ID]-renders.


  1. Depois que a renderização e o download de todo o intervalo de frames forem concluídos, acesse o diretório images e copie o diretório da imagem no intervalo usando o gsutil:

    cd images/
    
    gsutil -m cp -r [PART-NAME] gs://[PROJECT-ID]-renders/
    

    Exemplo:

    gsutil -m cp -r part01 gs://cad-iot-ml-renders
    
  2. Também é possível usar o recurso rsync do gsutil para fazer upload de todos os diretórios dentro do diretório images para o intervalo de renderização.

    gsutil -m rsync -r . gs://[PROJECT-ID]-renders
    

Resolver problemas

Este tutorial depende de fluxos de trabalho locais e baseados na nuvem. Portanto, algumas etapas talvez não funcionem como esperado. Nesta seção, falamos sobre alguns desafios comuns e como resolvê-los.

Seu diretório de trabalho

Grande parte deste tutorial depende do diretório de trabalho que você criou na 5ª etapa em Configuração. Alguns dos scripts incluídos lidam com caminhos absolutos e relativos, mas arquivos como o projectData.config dependem de caminhos relativos para localizar os arquivos e rigs necessários para a implantação do ZYNC Render.

Verifique se:

  • após o download, todos os conteúdos no diretório de trabalho permaneceram dentro dele;
  • você tem permissão para ler e gravar no diretório de trabalho, bem como para criar novos diretórios dentro dele.

Garantir que as bibliotecas Python estão instaladas

O script render.py requer uma série de bibliotecas do Python para ser executado. Essas bibliotecas, listadas em requirements.txt, são instaladas durante a etapa 8 em Configuração. Para garantir que essas bibliotecas foram instaladas corretamente, abra um shell do Python e digite o seguinte:

from google.cloud import storage
import yaml

Se nenhum erro foi retornado, as bibliotecas estão presentes. Se elas não estiverem presentes, você verá mensagens de erro, como:

ImportError: No module named yaml
ImportError: cannot import name storage

Erros de autenticação no render.py

Se você encontrar erros de autenticação ao executar o script render.py, verifique se a chave criada em Como autenticar no GCP tem um nome de conta de serviço exclusivo. A reutilização de nomes de conta de serviço pode resultar em falhas de autenticação.

Erros ao enviar jobs do ZYNC

Se ocorrer um erro de conexão com o ZYNC ao executar o script render.py, como:

zync.ZyncConnectionError: ZYNC is down at URL: https://[NAME].zync.io

Verifique se:

  • seu URL do ZYNC está funcionando. Para isso, acesse-o em um navegador;
  • o valor de ZYNC_URL em config.py é exatamente o mesmo do seu URL do ZYNC, conforme explicado na etapa 9 da Configuração.

Arquivos não encontrados

Se ocorrerem erros 'Files not found' durante o envio para o ZYNC, verifique se todos os arquivos no diretório de trabalho podem ser lidos.

Como visualizar os registros de renderização

No Console do ZYNC, todos os subjobs ("blocos") estão listados no painel Tarefas:

como visualizar os registros de renderização

Na coluna Registro, clique no link maya para ver a saída do registro do bloco associado. Os registros de renderização são o primeiro lugar que você deve verificar se as renderizações falharem.

Falha no download de renders

O ZYNC Render tenta automaticamente fazer o download das imagens renderizadas para sua estação de trabalho após cada pedaço ser concluído. Se você colocar o computador em suspensão ou sair da sua conta do Google ou do aplicativo cliente do ZYNC, o job de renderização continuará e os frames renderizados serão armazenados no armazenamento de sua conta do ZYNC. Quando você voltar a se conectar, faça novamente o login ou inicie o aplicativo cliente do ZYNC, para que ele recomece o download de frames.

No caso de uma falha no job de download, force o download dos blocos fazendo o seguinte:

  1. Selecione os blocos para fazer o download clicando na caixa de seleção na coluna esquerda do painel Tarefas.
  2. Clique no menu em Tarefa, no canto superior direito, e selecione Tarefas de novo download.

    tarefas de novo download

Como monitorar a atividade do ZYNC

Toda a comunicação entre a estação de trabalho local e o ZYNC Render passa pelo aplicativo cliente do ZYNC. Você pode ver os registros de atividade do ZYNC selecionando a guia Registro no aplicativo cliente do ZYNC:

registros de atividades do ZYNC

Como fazer a limpeza

Para evitar cobranças dos recursos usados neste tutorial na conta do Google Cloud Platform:

  1. No Console do GCP, acesse a página Gerenciar recursos.

    Acessar a página Gerenciar recursos

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

Como excluir recursos do ZYNC

As instâncias implementadas pelo ZYNC são excluídas automaticamente quando as tarefas resultam em erro ou são concluídas e eliminadas. Nenhuma ação é necessária para excluir esses recursos.

Como excluir dados armazenados

Os recursos sincronizados e os renders finalizados são armazenados no Cloud Storage e faturados mensalmente. Você será cobrado pelo armazenamento até excluir os dados. Se você não precisar manter os dados de um projeto no ZYNC, exclua-os na guia Projetos da página Minha Conta no console da Web do ZYNC.

Como sair do virtualenv

Se você usou o virtualenv, digite deactivate no shell para sair desse ambiente temporário.

A seguir