Usando Python para Automatizar Workflows 3D com OpenUSD

por Justine Lin

O Universal Scene Description (OpenUSD) oferece um ecossistema poderoso, aberto e extensível para descrever, compor, simular e colaborar em mundos 3D complexos. Desde o manuseio de conjuntos de dados massivos e a automação de workflows para gêmeos digitais até a renderização em tempo real para jogos e a simplificação das operações industriais em manufatura e energia, está transformando a forma como as indústrias trabalham com dados 3D. 

Os recursos de script e a facilidade de uso do Python o tornam o parceiro perfeito para o OpenUSD, ajudando a automatizar tarefas e acelerar o desenvolvimento. 

Vídeo 1. Por que você deve usar o OpenUSD 

Nesta postagem do blog, exploraremos a sinergia entre Python e USD e forneceremos recursos para ajudá-lo a começar.  

Por que o Python é essencial para o OpenUSD 

O OpenUSD é implementado principalmente em C++, fornecendo uma estrutura eficiente e de alto desempenho para manipulação de cenas 3D. A API C++ é dividida em vários pacotes de chaves. 

  • Base: contém módulos fundamentais que são independentes de aplicativos. 
  • USD: inclui módulos para criação, leitura e composição de arquivos USD. Ele define interfaces de plug-in para estender e adaptar o USD. 
  • Imagem: Abriga o renderizador de hardware Hydra e outros serviços de imagem de baixo nível. 
  • USD Imaging: Conecta USD e Hydra, fornecendo adaptadores para leitura e visualização eficientes de dados. Inclui ferramentas como usdview para inspecionar arquivos USD. 

No entanto, o USD fornece ligações Python para a maioria de suas bibliotecas, tornando-o acessível para prototipagem, script e automação rápidos sem a necessidade de experiência em C++. 

Figura 1. As associações do Python para C++ facilitam a interação entre o Python e a biblioteca principal do C++ USD

Para otimizar os workflows do OpenUSD com o Python, é importante entender seus conceitos básicos. A NVIDIA oferece cursos gratuitos para desenvolvedores melhorarem suas habilidades em OpenUSD, que são essenciais para dominar a codificação USD Python e navegar na API. Confira-os em Learning OpenUSD: Foundations 

Pontos fortes do Python: Prototipagem Rápida, Integração de Ferramentas e Manipulação de Cenas 

O Python é usado para prototipagem porque é extremamente flexível e não requer compilação ou Makefiles. Ele permite que o usuário se concentre em suas tarefas, como automatizar a criação de cenas, validar ativos dinamicamente e otimizar cenas, sem ficar atolado em detalhes de baixo nível, como gerenciamento de memória. Isso o torna perfeito para usuários do OpenUSD que podem não ter formação técnica, mas ainda desejam usar esses recursos poderosos. 

Veja a seguir os componentes do NVIDIA Omniverse, uma plataforma de APIs, SDKs e serviços que permitem aos desenvolvedores integrar OpenUSD, tecnologias de renderização NVIDIA RTX e IA física generativa em ferramentas de software e fluxos de trabalho de simulação existentes. 

O SDK do USD Exchange acelera a adoção do OpenUSD ajudando os desenvolvedores a projetar, criar e testar suas próprias soluções de entrada e saída do USD. Ele fornece funções de conveniência de nível superior para criar estágios, definir nomes de exibição e muito mais, para complementar os conceitos de USD de nível inferior, facilitando o mapeamento de fontes de dados nativas para o OpenUSD e garantindo ativos USD consistentes e corretos em diversos ecossistemas 3D.  

O USD Asset Validator é uma extensão do Omniverse que verifica a compatibilidade dos ativos OpenUSD realizando a validação baseada em regras. Ele pode validar diferentes componentes, como camadas, estágios e primitivos individuais, fornecendo vetores de erro detalhados para ajudar a identificar e corrigir problemas. 

O Otimizador de cena é um conjunto de ferramentas que permite reduzir a memória necessária para desenvolver suas cenas e acelerar suas renderizações. Ele otimiza materiais, complexidade geométrica e aproveita a instanciação, permitindo manipulação e renderização mais rápidas da janela de visualização. 

Explore o Repositório de exemplos de código OpenUSD no GitHub para obter trechos de código úteis em Python, C++ e USD. Esses exemplos abrangem tarefas e conceitos comuns focados na criação e manipulação de cenas, gerenciamento de atributos e metadados e gerenciamento de estágios e camadas, ajudando você a aprender e experimentar o OpenUSD.  Explore exemplos totalmente renderizados no NVIDIA OpenUSD Documentação de exemplos de código página. 

Para saber mais sobre como interagir com o Omniverse usando Python, confira este vídeo do YouTube de Shane Reetz. 

Vídeo 2.  Omniverse, Python e você 

Casos de Uso Comuns para Python com OpenUSD 

Além das ferramentas mencionadas acima, vamos nos aprofundar em alguns casos de uso comumente usados com Python e OpenUSD. 

Extraindo e Transformando Dados em USD 

O primeiro passo para começar a usar o USD é colocar seus dados no formato USD. O Catálogo de troca de dados do USD contém importadores, exportadores e conversores que simplificam a integração de ativos existentes em fluxos de trabalho do USD. 

Para saber mais, confira a postagem técnica do blog Como usar o OpenUSD e o Learn OpenUSD: Developing Data Exchange Pipelines, onde você ganhará experiência prática em técnicas de extração e transformação de dados.   

Validando e Aplicando Correções 

Os scripts de validação automatizados detectam erros antecipadamente, evitando problemas de pipeline. O Python pode ser usado para criar ferramentas de monitoramento para rastrear o status e o desempenho do pipeline. 

O Omni Asset Validator, uma estrutura Python, usa a estrutura USD Compliance Checker para validar ativos, garantindo uma integração suave do fluxo de trabalho. Os principais casos de uso incluem:  

  • Regras básicas: Verifique se o USD básico está correto. 
  • Regras de geometria: valide a topologia da malha, esquemas de subdivisão e remova elementos não utilizados ou de área zero. 
  • Regras de layout: garanta os prims padrão corretos e valide os especificadores de prim. 
  • Desempenho: Verifique se há camadas que podem se beneficiar do uso do formato USDC. 

Automatizando a Construção de Cenas 

Os scripts Python podem automatizar a construção de cenas, reduzindo o esforço manual e garantindo a consistência. Isso acelera os fluxos de trabalho e permite a criação de cenas mais complexas. Exemplos de criação de luzes, materiais e muito mais estão disponíveis na documentação do GitHub de exemplos do USD Exchange 

Uma estrutura de ativos bem definida é crucial para gerenciar cenas 3D complexas. A modularidade é um princípio fundamental que envolve a divisão de ativos em componentes menores e reutilizáveis e o uso de arcos de composição. A natureza orientada a objetos do Python o torna ideal para o desenvolvimento de código modular e reutilizável, auxiliando no gerenciamento de ativos complexos. 

Interessado em obter experiência direta na estruturação de ativos e melhorar a eficiência do pipeline? Confira o curso gratuito do DLI, Aprenda OpenUSD: Princípios de Estrutura de Ativos e Agregação de Conteúdo.   

Criar Ferramentas de Criação de Cena 

O Python permite a criação de ferramentas personalizadas adaptadas a fluxos de trabalho específicos, simplificando a criação de conteúdo 3D. Essas ferramentas podem ser compartilhadas com a comunidade, aprimorando a colaboração. 

Por exemplo, usar o método UsdGeomSphere esquema, você pode definir um prim Sphere usando Python. O script 1 criará um arquivo chamado “simple_scene.usda”, mostrado no script 2, com o seguinte conteúdo: 

from pxr import Usd, UsdGeom, Sdf
# Create a new stage
stage = Usd.Stage.CreateNew("simple_scene.usda")
# Define a new Xform prim (transformable object)
xform_prim = UsdGeom.Xform.Define(stage, "/MyXform")
# Set the translation of the Xform
xform_prim.AddTranslateOp().Set( (1, 2, 3) )
# Define a new Sphere prim under the Xform
sphere_prim = UsdGeom.Sphere.Define(stage, "/MyXform/MySphere")
# Set the radius of the sphere
sphere_prim.GetRadiusAttr().Set(5.0)
# Save the stage to a file
stage.Save()

Script 1

#usda 1.0
(
    defaultPrim = "MyXform"
    upAxis = Z
)
def Xform "MyXform"
{
    double3 xformOp:translate = (1, 2, 3)
    uniform token[] xformOpOrder = ["xformOp:translate"]
    def Sphere "MySphere"
    {
        double radius = 5
    }
}

Script 2

Um ótimo ponto de partida para criar scripts e ferramentas personalizados é o curso Learn OpenUSD sobre como criar e personalizar uma extensão do omniverse, onde você descobrirá os fundamentos da criação de extensões nativas do OpenUSD no Omniverse com Python.   

Os desenvolvedores podem usar o SDK do Omniverse Kit para começar a criar ferramentas de criação de cenas personalizadas com o OpenUSD. O SDK do Omniverse Kit inclui estruturas USD e UI, bem como integrações SDK para PhysX, Cloud XR, Audio2Face e outras bibliotecas que você também pode achar úteis ao longo do caminho.  

Introdução ao OpenUSD 

Para experimentar o OpenUSD em Python, você pode instalar rapidamente as bibliotecas necessárias executando pip install usd-core. Para uma experiência de desenvolvimento mais suave, adicione suporte de preenchimento automático ao seu IDE com pip install types-usd. 

Para obter mais recursos sobre o OpenUSD, explore nossos Recursos do OpenUSD, assista as Sessões OpenUSD do NVIDIA GTC 2025 sob demanda e interaja com a comunidade no Fórum da Alliance for OpenUSD (AOUSD). 

Pronto para mergulhar?  Inscreva-se no curso gratuito e individualizado Learn OpenUSD, que abrange fundamentos e fluxos de trabalho práticos.  

Para se manter atualizado com todas as coisas do OpenUSD, confira como o Lançamento do OpenUSD v25.05 permite uma interoperabilidade de material mais ampla por meio de iniciativas OpenPBR e Color Interop Forum.