M aya
por Gustavo L. Braga
ACELERE SEU RENDER NO MAYA 2
Figura 1 - Cena exemplo sem nenhum tipo de otimização.
INTRODUÇÃO
A correta utilização do render é uma
grande preocupação nos estúdios de
animação 3D atualmente. Horas de
máquina mal utilizadas em um render
podem acabar facilmente com a viabilidade de um trabalho, ou ainda pior,
acarretar em um atraso na entrega da
animação para o cliente. Inúmeras
vezes nos deparamos com uma data de
entrega para um material e normalmente somos obrigados a adequar a
cena ao tempo. O render do Maya é
muito flexível a este tipo de adequação
e oferece inúmeras maneiras de se
otimizar uma cena melhorando o tempo de render sem perda de qualidade.
Não é uma regra fazer a otimização
depois de terminada a cena, sendo
que todos os procedimentos dados
neste artigo podem ser feitos durante
as fases de modelagem e iluminação/texturização. Os procedimentos estão divididos por área de
abrangência, o que facilita a localização no caso de uma busca futura.
A CENA
A imagem que usaremos como exemplo (figura 1) faz parte de uma animação onde um espremedor de frutas, espreme o limão e o arremessa
em direção a tela. Através desta
imagem será demonstrado, quando
aplicável, o resultado de diversas
formas de otimização, além dos problemas típicos que acontecem quando alguns atributos têm seus valores
modificados de maneira incorreta.
TESTANDO A CENA
Após termos trabalhado os processos
usuais de produção e chegarmos a um
resultado satisfatório para a cena, o
primeiro passo da otimização é rodar
o comando File>Optimize Scene Size.
Este comando remove elementos sem
uso ou inválidos na cena e o seu resultado é mostrado no Script Editor (Window > General Editors > Script Editor).
Como no exemplo da Figura 2 onde
foram apagados diversos nós de materiais e de posicionamento de textura
que não estavam sendo utilizados.
O próximo passo é executar o comando
Render Diagnostics (Render > Render
Diagnostics). Este comando faz vários
testes para diagnosticar algumas incoerências nos ajustes para o render. Os
resultados destes testes são mostrados
36
ED13 - Outubro 99
na forma de warnings e conselhos no
Script Editor como mostrado na Figura
3. Estes resultados nos ajudarão a guiar
os próximos passos da otimização.
LUZES E SOMBRAS
Com relação as luzes, o principal é:
fazer o link das superfícies somente
com as luzes que as afetam diretamente. Quando é criada uma luz,
esta iluminará todas as superfícies
na sua cena e da mesma forma,
quanto é criada uma superfície
nova, todas as luzes da cena irão
iluminá-la. Para fazer o "link" da
luz com as texturas e/ou superfícies
usamos o Relationship Editor (Windows > Relationship Editors > Light
Linking). Na cena de exemplo,
temos para cada Shading Group
luzes lincadas (figura 4).
Para calcular a sombra, sempre é mais
rápido o cálculo através das sombras
Depth Map. Sombras em raytracing só
devem ser usadas para objetos transparentes. Um fator importante é notar
quais superfícies realmente precisam
fazer sombra na cena. Para as superfícies onde a sombra é desnecessária
desligue a opção Cast Shadows.
Figura 2 - Script Editor com o resultado do comando Optimize
Scene Size.
www.digitaldesigner.com.br
Para o cálculo das sombras Depth
Map o Maya calcula o mapa de profundidade para cada luz a cada
frame da animação durante o render. As sombras podem ser geradas
antes do render e salvas no diretório depth do seu projeto o que,
além de diminuir o tempo de render, torna as sombras reutilizáveis
desde que não haja mudança na
animação das luzes e objetos. No
quadro abaixo estão algumas situações onde podemos otimizar o uso
das sombras Depth Map.
Figura 3 - Script Editor com o resultado do comando Render
Diagnostics.
37
Figura 4 - Relationship Editor mostrando os "links" das luzes
com os Shading Groups.
Figura 5 - Cena com sombras Depth Map.
38
Se você está ...
Ajuste o atributo ...
... renderizando um único
frame várias vezes, sendo que
em cada render estão sendo
feitos ajustes somente nas propriedades das luzes e dos objetos e NÃO está movendo luzes
nem objetos. O mapa de profundidade não mudará e
poderá ser reutilizado.
... Disk Based Dmaps para
Reuse Existing Dmap(s). O
Maya vai calcular o mapa de
profundidade na primeira vez
que você renderizar e salvar em
disco. Nas próximas vezes o
mapa será reutilizado
... renderizando uma animação
em que a luz e os objetos que
são iluminadas por elas NÃO se
movem. Por exemplo: A
câmera movendo-se em um
cenário. O mapa de profundidade não mudará de um frame
para outro e pode ser reutilizável.
... Disk Based Dmaps para
Reuse Existing Dmap(s) e
desligue a opção Dmap Frame
Ext. O Maya irá calcular o mapa
de profundidade na primeiro
frame da animação e este será
reutilizado para os frames
seguintes.
... renderizando um frame ou
uma animação, que tem seu
mapa de animação salvo em
disco e as luzes ou objetos
foram movidos, o mapa de profundidade NÃO poderá ser
reutilizado
... Disk Based Dmaps para
Overwrite e renderize o quadro
novamente. O Maya irá calcular
e sobrescrever o mapa de profundidade salvo em disco. Se
ainda for necessário ajustes na
cena, ajuste novamente o atributo Disk Based Dmaps para
Reuse Existing Dmap(s).
Além da reutilização dos mapas de profundidade ainda
podemos otimizar os cálculos para geração da sombra. Na
seção Depth Map Shadows dentro de cada luz existem
várias opções para otimização. O que mais afeta a qualidade e o tempo de cálculo são os atributos Dmap Resolution e Dmap Filter Size, respectivamente a resolução do
mapa de profundidade e o tamanho do filtro de suavização da sombra. O atributo Dmap Resolution é relacionado
à resolução do mapa de profundidade. Se o valor para
este atributo é baixo a borda da sombra ficará mal definida, com aparência granulada e haverá "flicker" durante a
animação. Um valor inicial bom é o maior valor da resolução da imagem final. Por exemplo: uma imagem de
640x480, o valor inicial para testes é de 640, normalmente quando a cena é animada este valor é o mínimo
necessário para que não aconteçam problemas. Já o Dmap
Filter Size controla a suavidade da borda, quanto maior o
valor mais suave a borda da sombra e também mais lento
será o render.
Quando usamos point lights é possível uma customização ainda maior. Dependendo do posicionamento das
Point Lights usadas na cena não é necessário que a luz
produza sombras em todas as direções X, Y e Z. Desligue
as direções que não são necessárias na seção Dmap Attributes (X+Dmap, X-Dmap, Y+Dmap, Y-Dmap, Z+Dmap, ZDmap).
ED13 - Outubro 99
Para a figura 5 em relação a figura
1 foram trocadas as sombras em
ray tracing para Depth Map. Como
a imagem foi renderizada em
720x486 para uma animação, foi
usado o valor de 800 para o Dmap
Resolution . Foi usado o valor de 3
para o Dmap Filter, suavizando assim a borda da sombra.
SUPERFÍCIES
Quando a cena estiver pronta para o
render devemos apagar o histórico de
construção das superfícies onde o histórico é desnecessário. Isto evita cálculos
desnecessários a cada frame. Outro procedimento é transformar as superfícies
que não serão visualizadas por dentro
em single sided surfaces. Para fazer isto
desligue a opção Double sided surfaces
no Attribute Editor de cada superfície.
O mais importante quando se comenta
em otimização de superfícies é o número
de triângulos que a superfície será dividida durante a fase de tecelagem da
superfície para o render. Quanto maior o
número de triângulos, mais perfeito é o
render do objeto, porém o tempo também crescerá proporcionalmente a este
aumento. Nesta etapa o fundamental é
conseguir diminuir ao máximo o número
de triângulos sem que haja um facetamento visível da superfície.
Figura 6a - Visualização de como será a tecelagem do ralador
no render.
Figura 6b - Render do ralador com facetamento devido ao
pequeno número de triângulos.
Figura 7a - Visualização da uma nova tecelagem, agora com
mais triângulos.
Figura 7b - Render do ralador sem nenhum tipo de facetamento.
www.digitaldesigner.com.br
39
MOTION BLUR
Figura 8 - Textura do limão criada no Studio Paint 3D.
O Motion Blur é calculado baseado no ângulo de
abertura da câmera e na movimentação do objeto
de um frame para o outro. No Maya 2 foi introduzido mais um algoritmo para o cálculo do
Motion Blur, o 2D Motion Blur (Window>Render
Globals, seção Motion Blur). Este novo método é
uma maneira muito mais rápida de calcular o
motion blur, através de um maneira aproximada e
que pode ser usado com ótimos resultados em
quase todas as situações.
Podemos ainda diminuir o tempo de cálculo não
renderizando toda a cena com o motion blur.
Renderizando separadamente somente os objetos
que queremos que recebam o motion blur
agilizará o cálculo, devido ao fato do render não
precisar calcular a movimentação de objetos que
não receberão o motion blur.
Também influi no tempo de cálculo o valor do
atributo Blur by Frame (Window>Render Globals,
seção Motion Blur) que define o número de
quadros anteriores que serão levados em conta
para o cálculo do motion blur no quadro atual.
Por exemplo: Blur by Frame com valor 3, a movimentação dos últimos três quadros ao atual é
computada. Quanto maior o valor de frames mais
demorado é o cálculo do motion blur.
TEXTURAS
Figura 9 - Cena Final com todas as otimizações e sem perda de
qualidade.
No Maya, quando estamos trabalhando em Shaded Mode,
podemos visualizar como uma superfície será dividida
ligando a opção Display Render Tesselation, na divisão
Tesselation no Attribute Editor. Para alterar a qualidade da
tecelagem altere os atributos U e V Divisions Factor. Como
exemplo podemos comparar as figuras 6a e 6b onde
temos o ralador com um número insuficiente de triângulos
(ocorrendo o facetamento no render - figura 6b), com as
figuras 7a e 7b onde o número de triângulos é suficiente e
não há nenhum sinal de facetamento na figura 7b.
Aplicar a maior e mais detalhada textura possível a
uma geometria normalmente é um exagero que
cometemos sem perceber. Este exagero acarreta
normalmente uma maior demora no render sem que
tenhamos diferença na imagem final. Objetos que
estão em segundo plano e que ocupam uma área
reduzida na imagem final não necessitam de um
arquivo com uma resolução grande. Na cena exemplo, temos a textura do limão (figura 8) que é um
arquivo de 512x512 pixels e mesmo tendo um
tamanho reduzido não acarreta nenhum problema
de detalhe no limão.
Transformar as texturas procedurais em arquivos
através do comando Convert Solid Texture também
ajuda a melhorar o desempenho do render. Além de
transformar estas texturas procedurais em arquivos,
devemos transformar todos os arquivos de textura
em arquivos BOT (block ordered texture) e ligar o
atributo Use Cache para cada arquivo. Arquivos BOT
são o formato comprimido nativo que o Maya usa
para fazer o cache de textura, possibilitando o rápido carregamento de retângulos da imagem quando
necessários durante o processo de render. Caso as
imagens não sejam transformadas em BOT antes do
render, toda vez que a textura for para o cache ela
terá que ser transformada em BOT pelo render.
40
ED13 - Outubro 99
RAY TRACING
Os atributos que influem bastante no
tempo do ray tracing são os que definem a qualidade das reflexões, refrações e sombra (Window>Render
Globals, seção Raytracing Quality). A
melhor forma de ajustar estes atributos
é achar o menor valor que faça com
que a imagem final tenha a qua-lidade
de reflexão e refração desejada. A
imagem do exemplo foi renderizada
com valores de reflexão 4 (o valor do
atributo Shadows não afeta o tempo
deste render devido ao fato de terem
sido usadas sombras Depth Map).
DEFINIÇÕES DO RENDER
O Maya tem como formato padrão de
imagens o Maya iff e o sgi. Todo o render que tiver como imagem final um
destes dois formatos será mais rápido,
devido ao fato do Maya não precisar
fazer nenhum tipo de conversão.
Renderizando elementos de uma
cena separadamente pode levar
menos tempo do que renderizando a
cena completa em um somente um
passo. Além disto, podem ser feitos
ajustes finos depois do render em
cada camada e caso ocorra algum
problema só será necessário renderizar novamente a camada com
problema.
Finalmente, quando for renderizar
uma animação o faça no shell. Feche
todos os programas inclusive o Maya
e deixe executando somente o shell
que contém o render. No IRIX ainda
podemos rodar o processo do render
em background usando o operador &
e dar logout da máquina para liberar
ainda mais memória.
de animação. Normalmente conseguimos diminuir de 10% a 30% o
tempo do render por quadro sem
perda de qualidade na imagem final,
somente seguindo estes procedimentos. Na nossa imagem exemplo o
render sem otimização demorou 17
minutos e 32 segundos e o render
com a cena otimizada (figura 9)
demorou 12 minutos e 10 segundos,
uma melhora de aproximadamente
30%. Os procedimentos acima dão
ganhos de desempenho diferentes
em cada cena e alguns só se aplicam
em algumas situações por isso sempre reserve um tempinho para testes
de otimização antes de começar um
render grande.
CONCLUSÃO
O quanto vamos ganhar otimizando
uma cena depende de como ela foi
construída e quanto tempo teremos
Gustavo L. Braga é diretor técnico na Amazing
Graphics do Brasil, empresa de computação gráfica e
efeitos especiais. Você pode encontrá-lo através do
e-mail: [email protected]
41
www.digitaldesigner.com.br
Download

ACELERE SEU RENDER NO MAYA 2