Tutorial: compor uma cena com o Azure BatchTutorial: Render a scene with Azure Batch

O Azure Batch fornece capacidades de composição à escala da cloud num modelo de faturação de pagamento por utilização.Azure Batch provides cloud-scale rendering capabilities on a pay-per-use basis. O Azure Batch suporta aplicações de composição, incluindo o Autodesk Maya, 3ds Max, Arnold e V-Ray.Azure Batch supports rendering apps including Autodesk Maya, 3ds Max, Arnold, and V-Ray. Este tutorial mostra-lhe os passos para compor uma pequena cena com o Batch, através da Interface de Linha de Comandos do Azure.This tutorial shows you the steps to render a small scene with Batch using the Azure Command-Line Interface. Saiba como:You learn how to:

  • Carregar uma cena para o armazenamento do AzureUpload a scene to Azure storage
  • Criar um conjunto do Batch para composiçãoCreate a Batch pool for rendering
  • Compor uma cena com um único fotogramaRender a single-frame scene
  • Dimensionar o conjunto e compor uma cena com vários fotogramasScale the pool, and render a multi-frame scene
  • Transferir o resultado compostoDownload rendered output

Neste tutorial, irá compor uma cena 3ds Max com o Batch, através do compositor Arnold de traçado de raios.In this tutorial, you render a 3ds Max scene with Batch using the Arnold ray-tracing renderer. O conjunto do Batch utiliza uma imagem do Microsoft Azure Marketplace com gráficos pré-instalados e aplicações de composição que oferecem licenciamento de pagamento por utilização.The Batch pool uses an Azure Marketplace image with pre-installed graphics and rendering applications that provide pay-per-use licensing.

Pré-requisitosPrerequisites

Precisa de uma subscrição pay as you go ou de outra opção de compra do Azure para utilizar aplicações de composição no Batch no modelo de faturação de pagamento por utilização.You need a pay-as-you-go subscription or other Azure purchase option to use rendering applications in Batch on a pay-per-use basis. O licenciamento de pagamento por utilização não será suportado se utilizar uma oferta gratuita do Azure que oferece um crédito monetário.Pay-per-use licensing isn't supported if you use a free Azure offer that provides a monetary credit.

A cena 3ds Max de exemplo para este tutorial encontra-se no GitHub, em conjunto com um script Bash de exemplo e ficheiros de configuração JSON.The sample 3ds Max scene for this tutorial is on GitHub, along with a sample Bash script and JSON configuration files. A cena 3ds Max é proveniente dos ficheiros de exemplo do Autodesk 3ds Max.The 3ds Max scene is from the Autodesk 3ds Max sample files. (Os ficheiros de exemplo do Autodesk 3ds Max estão disponíveis com uma licença de Atribuição Semelhante à Partilha Não Comercial da Creative Commons.(Autodesk 3ds Max sample files are available under a Creative Commons Attribution-NonCommercial-Share Alike license. Copyright © Autodesk, Inc.)Copyright © Autodesk, Inc.)

Utilizar o Azure Cloud ShellUse Azure Cloud Shell

O Azure hospeda Azure Cloud Shell, um ambiente de shell interativo que você pode usar por meio de seu navegador.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Você pode usar o bash ou o PowerShell com Cloud Shell para trabalhar com os serviços do Azure.You can use either Bash or PowerShell with Cloud Shell to work with Azure services. Você pode usar o Cloud Shell comandos pré-instalados para executar o código neste artigo sem precisar instalar nada em seu ambiente local.You can use the Cloud Shell preinstalled commands to run the code in this article without having to install anything on your local environment.

Para iniciar Azure Cloud Shell:To start Azure Cloud Shell:

OpçãoOption Exemplo/linkExample/Link
Selecione Experimentar no canto superior direito de um bloco de código.Select Try It in the upper-right corner of a code block. A seleção de try não copia automaticamente o código para Cloud Shell.Selecting Try It doesn't automatically copy the code to Cloud Shell. Exemplo de teste para Azure Cloud Shell
Vá para https://shell.azure.comou selecione o botão Iniciar Cloud Shell para abrir Cloud Shell em seu navegador.Go to https://shell.azure.com, or select the Launch Cloud Shell button to open Cloud Shell in your browser. iniciar Cloud Shell em uma nova janelaLaunch Cloud Shell in a new window
Selecione o botão Cloud Shell na barra de menus superior direita na portal do Azure.Select the Cloud Shell button on the top-right menu bar in the Azure portal. Botão Cloud Shell no portal do Azure

Para executar o código neste artigo em Azure Cloud Shell:To run the code in this article in Azure Cloud Shell:

  1. Iniciar Cloud Shell.Start Cloud Shell.

  2. Selecione o botão copiar em um bloco de código para copiar o código.Select the Copy button on a code block to copy the code.

  3. Cole o código na sessão de Cloud Shell selecionando Ctrl+Shift+v no Windows e Linux ou selecionando cmd+Shift+v no MacOS.Paste the code into the Cloud Shell session by selecting Ctrl+Shift+V on Windows and Linux or by selecting Cmd+Shift+V on macOS.

  4. Selecione Enter para executar o código.Select Enter to run the code.

Se optar por instalar e utilizar a CLI localmente, este tutorial requer a execução da versão 2.0.20 ou posterior da CLI do Azure.If you choose to install and use the CLI locally, this tutorial requires that you are running the Azure CLI version 2.0.20 or later. Executar az --version para localizar a versão.Run az --version to find the version. Se precisar de instalar ou atualizar, veja Instalar a CLI do Azure.If you need to install or upgrade, see Install Azure CLI.

Criar uma conta do BatchCreate a Batch account

Se ainda não o tiver feito, crie um grupo de recursos, uma conta do Batch e uma conta de armazenamento ligada na sua subscrição.If you haven't already, create a resource group, a Batch account, and a linked storage account in your subscription.

Crie um grupo de recursos com o comando az group create.Create a resource group with the az group create command. O exemplo seguinte cria um grupo de recursos com o nome myResourceGroup na localização eualeste2.The following example creates a resource group named myResourceGroup in the eastus2 location.

az group create \
    --name myResourceGroup \
    --location eastus2

Utilize o comando az storage account create para criar uma conta de Armazenamento do Microsoft Azure no seu grupo de recursos.Create an Azure Storage account in your resource group with the az storage account create command. Para este tutorial, utilize a conta de armazenamento para armazenar uma cena 3ds Max de entrada e a saída composta.For this tutorial, you use the storage account to store an input 3ds Max scene and the rendered output.

az storage account create \
    --resource-group myResourceGroup \
    --name mystorageaccount \
    --location eastus2 \
    --sku Standard_LRS

Crie uma conta do Batch com o comando az batch account create.Create a Batch account with the az batch account create command. O exemplo seguinte cria uma conta do Batch com o nome mybatchaccount em myResourceGroup e associa a conta de armazenamento que criou.The following example creates a Batch account named mybatchaccount in myResourceGroup, and links the storage account you created.

az batch account create \
    --name mybatchaccount \
    --storage-account mystorageaccount \
    --resource-group myResourceGroup \
    --location eastus2

Para criar e gerir conjuntos e tarefas de computação, tem de autenticar com o Batch.To create and manage compute pools and jobs, you need to authenticate with Batch. Inicie sessão na conta com o comando az batch account login.Log in to the account with the az batch account login command. Depois de iniciar sessão, os comandos az batch utilizam este contexto de conta.After you log in, your az batch commands use this account context. O exemplo seguinte utiliza a autenticação de chave partilhada, com base no nome da conta e chave do Batch.The following example uses shared key authentication, based on the Batch account name and key. O Batch também suporta a autenticação através do Azure Active Directory, para autenticar utilizadores individuais ou uma aplicação autónoma.Batch also supports authentication through Azure Active Directory, to authenticate individual users or an unattended application.

az batch account login \
    --name mybatchaccount \
    --resource-group myResourceGroup \
    --shared-key-auth

Carregar uma cena para o armazenamentoUpload a scene to storage

Para carregar a cena de entrada para o armazenamento, tem de, em primeiro lugar, aceder à conta de armazenamento e criar um contentor de destino para os blobs.To upload the input scene to storage, you first need to access the storage account and create a destination container for the blobs. Para aceder à conta de armazenamento do Azure, exporte as variáveis de ambiente AZURE_STORAGE_KEY e AZURE_STORAGE_ACCOUNT.To access the Azure storage account, export the AZURE_STORAGE_KEY and AZURE_STORAGE_ACCOUNT environment variables. O primeiro comando da shell do Bash utiliza o comando az storage account keys list para obter a primeira chave de conta.The first Bash shell command uses the az storage account keys list command to get the first account key. Depois de definir estas variáveis de ambiente, os comandos de armazenamento utilizam este contexto de conta.After you set these environment variables, your storage commands use this account context.

export AZURE_STORAGE_KEY=$(az storage account keys list --account-name mystorageaccount --resource-group myResourceGroup -o tsv --query [0].value)

export AZURE_STORAGE_ACCOUNT=mystorageaccount

Agora, crie um contentor de blobs na conta de armazenamento para os ficheiros de cenas.Now, create a blob container in the storage account for the scene files. O exemplo seguinte utiliza o comando az storage container create para criar um contentor de blobs com o nome scenefiles que permita o acesso de leitura público.The following example uses the az storage container create command to create a blob container named scenefiles that allows public read access.

az storage container create \
    --public-access blob \
    --name scenefiles

Transfira a cena MotionBlur-Dragon-Flying.max do GitHub para um diretório de trabalho local.Download the scene MotionBlur-Dragon-Flying.max from GitHub to a local working directory. Por exemplo:For example:

wget -O MotionBlur-DragonFlying.max https://github.com/Azure/azure-docs-cli-python-samples/raw/master/batch/render-scene/MotionBlur-DragonFlying.max

Carregue o ficheiro de cenas do seu diretório de trabalho local para o contentor de blobs.Upload the scene file from your local working directory to the blob container. O exemplo seguinte utiliza o comando az storage blob upload-batch, que pode carregar vários ficheiros:The following example uses the az storage blob upload-batch command, which can upload multiple files:

az storage blob upload-batch \
    --destination scenefiles \
    --source ./

Criar um conjunto de composiçãoCreate a rendering pool

Crie um conjunto do Batch para composição, com o comando az batch pool create.Create a Batch pool for rendering using the az batch pool create command. Neste exemplo, especifique as definições do conjunto num ficheiro JSON.In this example, you specify the pool settings in a JSON file. Na sua shell atual, crie um ficheiro com o nome mypool.json e, em seguida, copie e cole o seguinte conteúdo.Within your current shell, create a file name mypool.json, then copy and paste the following contents. Certifique-se de que copia todo o texto corretamente.Be sure all the text copies correctly. (Pode transferir o ficheiro do GitHub.)(You can download the file from GitHub.)

{
  "id": "myrenderpool",
  "vmSize": "standard_d2_v2",
  "virtualMachineConfiguration": {
    "imageReference": {
      "publisher": "batch",
      "offer": "rendering-windows2016",
      "sku": "rendering",
      "version": "1.3.2"
    },
    "nodeAgentSKUId": "batch.node.windows amd64"
  },
  "targetDedicatedNodes": 0,
  "targetLowPriorityNodes": 1,
  "enableAutoScale": false,
  "applicationLicenses":[
         "3dsmax",
         "arnold"
      ],
  "enableInterNodeCommunication": false 
}

O Batch suporta nós dedicados e nós de baixa prioridade, e pode utilizar um ou ambos nos conjuntos.Batch supports dedicated nodes and low-priority nodes, and you can use either or both in your pools. Os nós dedicados estão reservados para o conjunto.Dedicated nodes are reserved for your pool. Os nós de prioridade baixa são disponibilizados a um preço reduzido a partir da capacidade excedente da VM no Azure.Low-priority nodes are offered at a reduced price from surplus VM capacity in Azure. Os nós de prioridade baixa ficam indisponíveis se o Azure não tiver capacidade suficiente.Low-priority nodes become unavailable if Azure does not have enough capacity.

O conjunto especificado contém um único nó de baixa prioridade que executa uma imagem do Windows Server com o software para o serviço Batch Rendering.The pool specified contains a single low-priority node running a Windows Server image with software for the Batch Rendering service. Este conjunto está licenciado para compor com 3ds Max e Arnold.This pool is licensed to render with 3ds Max and Arnold. Num passo posterior, irá dimensionar o conjunto para um grande número de nós.In a later step, you scale the pool to a larger number of nodes.

Crie o conjunto, ao transferir o ficheiro JSON para o comando az batch pool create:Create the pool by passing the JSON file to the az batch pool create command:

az batch pool create \
    --json-file mypool.json

Demora alguns minutos para aprovisionar o conjunto.It takes a few minutes to provision the pool. Para ver o estado do conjunto, execute o comando az batch pool show.To see the status of the pool, run the az batch pool show command. O comando seguinte obtém o estado de alocação do conjunto:The following command gets the allocation state of the pool:

az batch pool show \
    --pool-id myrenderpool \
    --query "allocationState"

Continue para os passos seguintes para criar tarefas enquanto o estado do conjunto é alterado.Continue the following steps to create a job and tasks while the pool state is changing. O conjunto está completamente aprovisionado quando o estado de atribuição for steady e os nós estiverem em execução.The pool is completely provisioned when the allocation state is steady and the nodes are running.

Criar um contentor de blobs para a saídaCreate a blob container for output

Nos exemplos neste tutorial, todas as tarefas no trabalho de composição criam um ficheiro de saída.In the examples in this tutorial, every task in the rendering job creates an output file. Antes de agendar a tarefa, crie um contentor de blobs na sua conta de armazenamento como o destino para os ficheiros de saída.Before scheduling the job, create a blob container in your storage account as the destination for the output files. O exemplo seguinte utiliza o comando az storage container create para criar o contentorjob-myrenderjob com acesso de leitura público.The following example uses the az storage container create command to create the job-myrenderjob container with public read access.

az storage container create \
    --public-access blob \
    --name job-myrenderjob

Para escrever ficheiros de saída para o contentor, o Batch tem de utilizar um token de Assinatura de Acesso Partilhado (SAS).To write output files to the container, Batch needs to use a Shared Access Signature (SAS) token. Crie o token com o comando az storage account generate-sas.Create the token with the az storage account generate-sas command. Este exemplo cria um token para gravar em qualquer contêiner de blob na conta e o token expira em 15 de novembro de 2020:This example creates a token to write to any blob container in the account, and the token expires on November 15, 2020:

az storage account generate-sas \
    --permissions w \
    --resource-types co \
    --services b \
    --expiry 2020-11-15

Tome nota do token devolvido pelo comando, que é semelhante ao seguinte.Take note of the token returned by the command, which looks similar to the following. Irá utilizar este token num passo posterior.You use this token in a later step.

se=2020-11-15&sp=rw&sv=2019-09-24&ss=b&srt=co&sig=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Compor uma cena com um único fotogramaRender a single-frame scene

Criar uma tarefaCreate a job

Crie uma tarefa de composição para executar no conjunto, com o comando az batch job create.Create a rendering job to run on the pool by using the az batch job create command. Inicialmente, o trabalho não tem tarefas.Initially the job has no tasks.

az batch job create \
    --id myrenderjob \
    --pool-id myrenderpool

Criar uma tarefaCreate a task

Utilize o comando az batch task create para criar uma tarefa de composição no trabalho.Use the az batch task create command to create a rendering task in the job. Neste exemplo, especifique as definições da tarefa num ficheiro JSON.In this example, you specify the task settings in a JSON file. Na sua shell atual, crie um ficheiro com o nome myrendertask.json e, em seguida, copie e cole o seguinte conteúdo.Within your current shell, create a file named myrendertask.json, then copy and paste the following contents. Certifique-se de que copia todo o texto corretamente.Be sure all the text copies correctly. (Pode transferir o ficheiro do GitHub.)(You can download the file from GitHub.)

A tarefa especifica um comando 3ds Max para compor um único fotograma da cena MotionBlur-DragonFlying.max.The task specifies a 3ds Max command to render a single frame of the scene MotionBlur-DragonFlying.max.

Modifique os elementos blobSource e containerURL no ficheiro JSON, para que incluam o nome da sua conta de armazenamento e o token SAS.Modify the blobSource and containerURL elements in the JSON file so that they include the name of your storage account and your SAS token.

Dica

O containerURL termina com o seu token SAS e é semelhante a:Your containerURL ends with your SAS token and is similar to:

https://mystorageaccount.blob.core.windows.net/job-myrenderjob/$TaskOutput?se=2018-11-15&sp=rw&sv=2017-04-17&ss=b&srt=co&sig=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{
  "id": "myrendertask",
  "commandLine": "cmd /c \"%3DSMAX_2018%3dsmaxcmdio.exe -secure off -v:5 -rfw:0 -start:1 -end:1 -outputName:\"dragon.jpg\" -w 400 -h 300 MotionBlur-DragonFlying.max\"",
  "resourceFiles": [
    {
        "httpUrl": "https://mystorageaccount.blob.core.windows.net/scenefiles/MotionBlur-DragonFlying.max",
        "filePath": "MotionBlur-DragonFlying.max"
    }
  ],
    "outputFiles": [
        {
            "filePattern": "dragon*.jpg",
            "destination": {
                "container": {
                    "containerUrl": "https://mystorageaccount.blob.core.windows.net/job-myrenderjob/myrendertask/$TaskOutput?Add_Your_SAS_Token_Here"
                }
            },
            "uploadOptions": {
                "uploadCondition": "TaskSuccess"
            }
        }
    ],
  "userIdentity": {
    "autoUser": {
      "scope": "task",
      "elevationLevel": "nonAdmin"
    }
  }
}

Adicione a tarefa ao trabalho, com o seguinte comando:Add the task to the job with the following command:

az batch task create \
    --job-id myrenderjob \
    --json-file myrendertask.json

O Batch agenda a tarefa, e a tarefa é executada assim que um nó no conjunto estiver disponível.Batch schedules the task, and the task runs as soon as a node in the pool is available.

Ver resultado das tarefasView task output

A tarefa demora alguns minutos para ser executada.The task takes a few minutes to run. Utilize o comando az batch task show para ver detalhes sobre a tarefa.Use the az batch task show command to view details about the task.

az batch task show \
    --job-id myrenderjob \
    --task-id myrendertask

A tarefa gera dragon0001.jpg no nó de computação e carrega-o para o contentor job-myrenderjob da sua conta de armazenamento.The task generates dragon0001.jpg on the compute node and uploads it to the job-myrenderjob container in your storage account. Para ver o resultado, transfira o ficheiro do armazenamento para o computador local, com o comando az storage blob download.To view the output, download the file from storage to your local computer using the az storage blob download command.

az storage blob download \
    --container-name job-myrenderjob \
    --file dragon.jpg \
    --name dragon0001.jpg

Abra dragon.jpg no seu computador.Open dragon.jpg on your computer. A imagem composta é semelhante à seguinte:The rendered image looks similar to the following:

Fotograma composto dragon 1

Dimensionar o conjuntoScale the pool

Agora, modifique o conjunto para preparar um trabalho de composição maior, com vários fotogramas.Now modify the pool to prepare for a larger rendering job, with multiple frames. O Batch fornece várias formas de dimensionar os recursos de computação, incluindo o dimensionamento automático que adiciona ou remove nós à medida que a tarefa requer alterações.Batch provides a number of ways to scale the compute resources, including autoscaling which adds or removes nodes as task demands change. Para este exemplo básico, utilize o comando az batch pool resize para aumentar o número de nós de baixa prioridade no conjunto para 6:For this basic example, use the az batch pool resize command to increase the number of low-priority nodes in the pool to 6:

az batch pool resize --pool-id myrenderpool --target-dedicated-nodes 0 --target-low-priority-nodes 6

O conjunto demora alguns minutos a redimensionar.The pool takes a few minutes to resize. Durante o processo, configure as tarefas seguintes para serem executadas no trabalho de composição existente.While that process takes place, set up the next tasks to run in the existing rendering job.

Compor uma cena com vários fotogramasRender a multiframe scene

Tal como no exemplo de fotograma único, utilize o comando az batch task create para criar tarefas de composição no trabalho com o nome myrenderjob.As in the single-frame example, use the az batch task create command to create rendering tasks in the job named myrenderjob. Aqui, especifique as definições de tarefas num ficheiro JSON denominado myrendertask_multi.json.Here, specify the task settings in a JSON file called myrendertask_multi.json. (Você pode baixar o arquivo do GitHub.) Cada uma das seis tarefas especifica uma linha de comando Arnold para renderizar um quadro da cena 3ds Max MotionBlur-DragonFlying. Max.(You can download the file from GitHub.) Each of the six tasks specifies an Arnold command line to render one frame of the 3ds Max scene MotionBlur-DragonFlying.max.

Crie um ficheiro na sua shell atual com o nome myrendertask_multi.json e copie e cole o conteúdo do ficheiro transferido.Create a file in your current shell named myrendertask_multi.json, and copy and paste the contents from the downloaded file. Modifique os elementos blobSource e containerURL no ficheiro JSON, para incluir o nome da sua conta de armazenamento e o token SAS.Modify the blobSource and containerURL elements in the JSON file to include the name of your storage account and your SAS token. Não se esqueça de alterar as definições para cada uma das seis tarefas.Be sure to change the settings for each of the six tasks. Guarde o ficheiro e execute o seguinte comando para colocar as tarefas em fila:Save the file, and run the following command to queue the tasks:

az batch task create --job-id myrenderjob --json-file myrendertask_multi.json

Ver resultado das tarefasView task output

A tarefa demora alguns minutos para ser executada.The task takes a few minutes to run. Utilize o comando az batch task list para ver o estado das tarefas.Use the az batch task list command to view the state of the tasks. Por exemplo:For example:

az batch task list \
    --job-id myrenderjob \
    --output table

Utilize o comando az batch task show para ver detalhes sobre tarefas individuais.Use the az batch task show command to view details about individual tasks. Por exemplo:For example:

az batch task show \
    --job-id myrenderjob \
    --task-id mymultitask1

As tarefas geram ficheiros de saída com o nome dragon0002.jpg - dragon0007.jpg nos nós de computação e carregam-nos para o contentor job-myrenderjob da sua conta de armazenamento.The tasks generate output files named dragon0002.jpg - dragon0007.jpg on the compute nodes and upload them to the job-myrenderjob container in your storage account. Para ver o resultado, transfira os ficheiros para uma pasta para o computador local, com o comando az storage blob download-batch.To view the output, download the files to a folder on your local computer using the az storage blob download-batch command. Por exemplo:For example:

az storage blob download-batch \
    --source job-myrenderjob \
    --destination .

Abra um dos ficheiros no seu computador.Open one of the files on your computer. O fotograma composto 6 é semelhante ao seguinte:Rendered frame 6 looks similar to the following:

Fotograma composto dragon 6

Limpar recursosClean up resources

Quando já não for necessário, pode utilizar o comando az group delete para remover o grupo de recursos, a conta do Batch, os conjuntos e todos os recursos relacionados.When no longer needed, you can use the az group delete command to remove the resource group, Batch account, pools, and all related resources. Elimine os recursos da seguinte forma:Delete the resources as follows:

az group delete --name myResourceGroup

Passos seguintesNext steps

Neste tutorial, ficou a saber como:In this tutorial, you learned about how to:

  • Carregar cenas para o armazenamento do AzureUpload scenes to Azure storage
  • Criar um conjunto do Batch para composiçãoCreate a Batch pool for rendering
  • Compor uma cena com um único fotograma através do ArnoldRender a single-frame scene with Arnold
  • Dimensionar o conjunto e compor uma cena com vários fotogramasScale the pool, and render a multi-frame scene
  • Transferir o resultado compostoDownload rendered output

Para saber mais sobre a composição à escala da cloud, consulte as opções para o serviço Batch Rendering.To learn more about cloud-scale rendering, see the options for the Batch Rendering service.