Disney and Sony release open source 3-D modeling utilities
Autor original: Nathan Willis
Publicado originalmente no: lwn.net
Tradução: Roberto Bechtlufft
Não apenas um, mas dois estúdios de cinema de Hollywood – Disney e Sony Pictures Imageworks – lançaram software de código aberto em janeiro. A indústria do cinema vive uma relação de amor e ódio com o movimento do software livre – em um momento, se opõe veementemente em questões como o DMCA; no outro, faz uso pesado do software livre para economizar dinheiro em suas fazendas de renderização de efeitos visuais. Não por acaso, os produtos sobre os quais vamos falar estão na categoria de efeitos visuais; são ferramentas para modelagem tridimensional. O projeto da Disney automatiza o mapeamento de texturas, e o da Sony é uma nova linguagem para shading. Os dois projetos podem se beneficiar da comunidade de código aberto.
Ptex
A Ptex da Disney é uma biblioteca que simplifica a demorada tarefa de mapear a superfície de um modelo tridimensional para duas dimensões, com o propósito de pintá-la com uma textura ou “pele” de imagem bidimensional. O método tradicional abre a superfície do modelo em um modelo de imagem 2-D chamado mapa UV (o nome se refere aos eixos de coordenadas U e V, usados no mapa para distinção do sistema de coordenadas X, Y e Z do modelo original). Um mapa UV pode ser criado automaticamente, mas quase sempre exige que ajustes manuais sejam realizados por um artista 3-D para minimizar junções esquisitas, sobreposições e outros artefatos difíceis de pintar. Além disso, modelos complexos geralmente são divididos em vários arquivos de texturas, para simplificar os mapas resultantes nos quais a geometria em si é complicada, e proporcionar texturas com resoluções maiores em áreas importantes.
A Ptex agiliza o processo de diversas maneiras. Para começar, ela armazena uma textura separada para cada face do modelo 3-D original, eliminando a necessidade do usuário abrir dolorosamente a superfície do modelo e ajustar o mapa UV para a otimização. Além disso, ela armazena de forma compacta todas as texturas de cada face do modelo em um único arquivo, junto com as informações de adjacência, reduzindo a carga de E/S no sistema de animação. Ela também permite o uso de resoluções diferentes em cada face, e a troca dessas resoluções, eliminando a necessidade de dividir um modelo em várias texturas e permitindo ao artista fazer ajustes diretamente no aplicativo de pintura. Para completar, usa os dados de adjacência para aplicar filtros às junções entre faces vizinhas (mesmo que tenham resoluções diferentes), resultando em uma textura final suave e harmoniosa.
A Disney usou a Ptex pela primeira vez no curta animado Glago’s Guest de 2008, e posteriormente em “praticamente todas as superfícies” do longa Bolt. Há uma apresentação disponível no site da Ptex descrevendo a economia de tempo computacional e de fluxo de trabalho dos artistas. A Ptex reduziu o número de chamadas de E/S para a renderização de um modelo por um fator de 2.000, e cortou o número de ciclos de CPU em outro modelo por um fator de 13.
Igualmente importante é o fato de que a incorporação da Ptex em aplicativos de modelagem e pintura usados nos estúdios de animação agiliza o fluxo de trabalho criativo da equipe. A necessidade de cuidar manualmente do mapeamento UV de cada modelo obrigava os artistas de modelagem tridimensional a pensar em como o modelo deveria ser pintado – coisa que não deveria ser da alçada deles – e forçava os artistas de pintura a aprender e a ajustar periodicamente os mapas UV.
A equipe da Ptex postou um vídeo no YouTube demonstrando como os artistas interagem com uma textura da Ptex. O vídeo é interessante até para quem não está familiarizado com modelagem e animação 3-D; o narrador destaca várias etapas no processo nas quais a Ptex permite a ele pintar o modelo sem se preocupar com a geometria subjacente, enquanto um sistema mais antigo exigiria interrupções ou alterações no mapa UV.
O código fonte da Ptex está disponível pelo Github, sob uma licença MIT. O site do projeto também inclui a documentação da API da biblioteca Ptex e uma especificação de formato de arquivo. Um paper de 2008 também está disponível, oferecendo informações mais detalhadas sobre o formato e a filtragem. Vale observar que quando a documentação foi escrita, a Ptex suportava apenas um tipo de malha 3-D, superfícies Catmull-Clark que usam faces de quatro lados. De lá para cá, a Ptex foi expandida, e agora tem suporte a outros tipos de malha, incluindo malhas Catmull-Clark não quadriláteras e superfícies de subdivisão de loop.
Open Shading Language
A OSL (Open Shading Language, ou linguagem aberta de shading) da Sony é uma linguagem para a criação de shaders, que são algoritmos usados para calcular efeitos de iluminação simulados de alta qualidade no estágio final da renderização em animações 3-D. Os shaders podem fazer tudo, desde modelar a forma como uma superfície reflete e difunde a luz até o jeito como a luz se transforma ao passar por um volume espacial (como por neblina). A complexidade de shaders de alta qualidade pode ser arbitrária, daí a necessidade de criá-los em uma linguagem de programação.
A linguagem de shading mais popular é a RSL (RenderMan Shading Language) desenvolvida pela Pixar. A RSL conta com suporte de uma ampla variedade de ferramentas livres e proprietárias, e várias linguagens de programação usam a mesma sintaxe básica semelhante ao C, usada pela RSL.
A especificação [PDF] da OSL está hospedada no Google Code, e é distribuída sob uma licença BSD. A OSL dá fim a diversas distinções feitas na RSL e em outras linguagens de shading, como no tratamento de fontes de luz como um tipo distinto de shader e da transparência como uma propriedade distinta. Em vez disso, os shaders da OSL calculam a “cobertura da radiação luminosa”, uma representação simbólica de como a superfície ou volume em questão afeta a luz. Uma fonte de luz é apenas uma cobertura que emite uma quantidade positiva de luz, e um material semitransparente é meramente uma cobertura que permite que uma certa quantidade de luz passe por ela.
As coberturas também são diferentes dos shaders típicos da RSL porque, sendo uma representação abstrata do comportamento de uma superfície ou volume, podem ser avaliadas a partir de qualquer direção – os shaders da RSL só podem ser avaliados como um valor fixo que representa a cor final, calculada para um ângulo de exibição específico. A OSL permite que as coberturas sejam gravadas para avaliação posterior e que sejam usadas como amostras ou referenciadas sem uma nova renderização. Uma cena da OSL pode ser descrita como uma rede conectada de coberturas que são “integradas” conforme a necessidade pelo renderizador. Dependendo do ângulo da exibição e da iluminação de um pixel renderizado específico, algumas coberturas podem nem ser avaliadas, e essas dependências são determinadas automaticamente.
A consequência prática da OSL é que os criadores de shaders podem se concentrar mais na modelagem das propriedades físicas de uma superfície ou volume, sem ter que se preocupar explicitamente com os detalhes de implementação impostos por outras linguagens de shaders mais estruturadas. Em compensação, a OSL exige mudanças expressivas no renderizador para que sua abordagem diferenciada funcione. Até agora, só a Sony possui um renderizador desses.
A implementação disponibilizada atualmente pelo projeto oferece alguns shaders da OSL como amostra, um compilador para tradução dos shaders da OSL para uma forma de bytecode intermediária, uma biblioteca que interpreta shaders da OSL e um programa de exemplo chamado testshade que pode executar um shader para produzir uma imagem de teste.
A página de introdução à OSL (em inglês) avisa aos visitantes sobre o estado de pré-produção do código, mas observa que a Sony implementou a OSL em seu fluxo de trabalho de produção e que já está começando a usá-la em projetos reais. No momento, a OSL é mais lenta do que outras linguagens de shaders, e a equipe isolou algumas funcionalidades ausentes que precisam ser incluídas na linguagem.
A equipe da OSL está confiante de que vai atingir seus objetivos de produção, e promete liberar atualizações do código público num futuro próximo. Ela também está interessada em construir back-ends alternativos que possam traduzir shaders da OSL em código executável em GPUs, e em fazer experiências com o compilador LLVM como uma alternativa à abordagem atual do bytecode.
Integração de código aberto
Como os dois projetos são muito novos, não se sabe ao certo que futuro terão com as ferramentas 3-D de código aberto existentes, como o Blender. Os dois projetos atraíram bastante atenção na comunidade, sendo discutidos em sites como o Blenderartists.org e o BlenderNation. A reação tem sido positiva, como geralmente acontece com novos utilitários de código aberto.
Como era de se esperar, os artistas que usam o Blender parecem mais empolgados com a possibilidade de usar a Ptex, já que ela irá livrá-los da tarefa nada artística do mapeamento UV. Ainda não se sabe ao certo o que será da OSL, que ainda precisa evoluir para poder ser avaliada em casos de uso reais. A Sony tem boa reputação com seus projetos de código aberto – ela lançou ferramentas de código aberto para gerenciamento de banco de dados, armazenamento de voxels e manipulação de strings do Python em 2009, e está sempre atualizando o código.
Os desenvolvedores de código aberto que só lembram dos estúdios de Hollywood quando se fala em suas investidas legais contra tecnologias de descriptografia de DVDs ou contra o Bittorrent, deveriam conferir os passos dos estúdios de animação. Seja qual for a postura dos mais altos setores de gerência, os animadores e desenvolvedores de ferramentas têm muita coisa em comum com a comunidade, e seria um erro deixar esse trabalho escoar pelo ralo.
Créditos a Nathan Willis – lwn.net
Tradução por Roberto Bechtlufft <info at bechtranslations.com.br>
Deixe seu comentário