Dicas para seu render V-Ray

Essas dicas podem ser muito úteis para diminuir o tempo do seu render de 3 horas para 20 minutos. Muitas pessoas não compreendem que no caso de settings para render, mais não significa necessariamente melhor. Pelo contrário, após um determinado limite, a lentidão aumenta exponencialmente sem melhora visível na imagem e você ainda começa a introduzir ruído na imagem. Pra complicar um pouco mais, as opções de render geralmente influenciam umas as outras. Ainda farei um post (provavelmente em vídeo) explicando todas as opções, mas até lá, espero que essas dicas sejam úteis.

1 – Use a escala do mundo real

Você pode não saber, mas é essencial que você modele os objetos usando seu tamanho real. Com isso, você tem a certeza que as luzes da sua cena funcionarão como as luzes do mundo real. Todo programa tem em suas configurações, uma opção para configurar as medidas usadas. Se está fazendo algo pequeno e delicado, talvez seja interessante trabalhar  com centímetros, se está modelando uma casa, use metros… E por aí vai.

2 – Preocupe-se com sua geometria

Primeiro, preocupe-se com a contagem de polígonos do seu objeto/cena. Se o mesmo objeto pode ser representado com menos polígonos, melhor, seu render ficará mais leve.

 Geometria

Preste atenção em vértices duplicados, arestas que sobrepõem-se umas as outras, etc. E não é só na hora da iluminação que isso ficará extremamente aparente. Ao aplicar um turbosmooth ou deformar o objeto, também.

3 – Use Linear Workflow (LWF)

Utilizando LWF você terá renders mais realísticos e renderizados em menos tempo, pois a maneira como arquivos 8-bit são salvos torna a imagem aparentemente mais escura do que realmente são. Veja mais aqui.

4 – Use a V-Ray Physical Camera

A V-Ray Physical Camera tem muitas (muitas!) vantagens sobre a câmera comum dos pacotes 3D. Ela funciona como uma câmera fotográfica real, te permitindo ajustar exposição, velocidade do obturador e white balance como você faria como uma câmera normal. Na prática, ao invés de aumentar a intensidade da sua luz (ou diminuí-la) você pode simplesmente configurar a câmera para capturar a luz da maneira desejada. Algumas pessoas aplicam vignette  e depth of field, mas eu não recomendo, pois são operações que pesam no render e ficam lá permanentes. Melhor aplicar na pós-produção.

Estude fotografia!

5 – Renderize em passes

Geralmente, muitas pessoas ignoram esse passo por considerá-lo difícil, trabalho e/ou desnecessário. Mas no longo prazo, realmente vale a pena. Renderize diferentes passes e quando precisar alterar somente uma reflexão ou um specular highlight, renderize somente aquele passe novamente. Além do mais, isso te permitirá total controle na pós-produção da sua imagem. Passes te dão controle sobre canais de difusão, specular e reflexão, depth of field e muito mais. Escolha o que quer renderizar no pop-up Render Elements… O mínimo ? Specular, reflection, z-depth e Material ID.

6 – Não exagere nos níveis de transparência/reflexão

2 ou 3 no máximo. (Render Options -> Global Switches)

7 – Sempre salve o seu Irradiance Map

Simplesmente acelera o seu render. Se você não vai mais ficar modificando a iluminação, o ganho é significativo.

8 – Não use muitos light bounces

Óbvio, mas render settings é uma área onde as pessoas costumam pensar no ‘mais é melhor’ e meter lá em cima as configurações. O primeiro já é o suficiente para a maior parte dos casos.

9 – Use Light Cache

Sempre marque Use Light Cache for Glossy Rays… Isso diminui muito o tempo se você tem muitas reflexões glossy.

10 – Preste atenção no tamanho das suas texturas

 Se você fez download de uma textura de madeira de 3k e a usa num objeto pequeno no fundo da imagem, você pesa seu render desnecessariamente. Seja esperto e redimensione o tamanho das suas texturas de acordo com a distância da câmera e tamanho do objeto.

11 – Render Setup

Se está usando Indirect Illumination como método, vá de Irradiance Map + Light Cache. Para AA, Adaptive DMC funciona bem na maior parte dos casos. Se sua cena está do lado extremo dos detalhes e reflexões borradas, Fixed pode ser interessante.

Sempre marque Show Calc. Phase, isso te permitirá ver o mapa enquanto está sendo calculado e após algum tempo você já terá uma noção da iluminação da cena antes mesmo dela ser finalizada, te permitindo abortar se necessário e economizando tempo.

12 – Ajuste o limite de memória

Por padrão, o V-Ray é conservador. Mas lembre-se, você não. Mude o Dynamic Memory Limit para mais ou menos metade da sua memória RAM e seja feliz.

Use Facebook to Comment on this Post

Python e Maya – Selecionando e Listando

Para listar tudo:

from maya import cmds

nodes = cmds.ls()

Para listar somente objetos selecionados:

selected = cmds.ls(selection=True)

Para listar objetos de um determinado tipo:

shapes = cmds.ls(type='geometryShape')

O uso de wildcards para detectar padrões, também é possível:

poly_list = cmds.ls('poly*')

Isso irá listar todo e qualquer objeto que inicie com ‘poly’, retornando uma lista com o nome dos mesmos.

Selecionando

cmds.select('locator1')

Esse comando seleciona o Locator de nome locator1, como um exemplo. É possível também passar uma lista de objetos a serem selecionados (suportando também wildcards):

selection_ls = ['polyCube1', 'polySphere*']
cmds.select(selection_ls)

Seleciona o objeto de nome ‘polyCube1’ e todos os que iniciarei com ‘polySphere’.

É possível utilizar os dois comandos em conjunto também. Se você quiser selecionar todos os nós do tipo shape, basta:

cmds.select(cmds.ls(type='shape'))

Use Facebook to Comment on this Post

Python e Maya – Deletando

Deletando objetos selecionados

from maya import cmds

cmds.delete()

Deletando um conjunto específico de objetos

from maya import cmds

cmds.delete('polyCube1', 'surface1', 'polySphere1')

Deletando Histórico

Simples, basta:

from maya import cmds

cmds.delete('polyCube1', constructionHistory=True)

Onde ‘polyCube1’ é o nome do objeto que você deseja apagar o histórico.

Deletando todas expressões de uma cena

from maya import cmds

cmds.delete(all=True, expressions=True)

Use Facebook to Comment on this Post

Python e Maya – Uma Introdução – Parte 1

Essa série supõe que você tem conhecimentos básicos de Python, afinal há material de qualidade o suficiente espalhado pela internet. Porém há pouco material em português versando sobre Python e Maya em conjunto. Vamos lá.

Para executar um código, basta abrir o Script Editor e clicar na aba denominada ‘Python’. Você pode digitar, colar ou abrir um arquivo… Para executar o código basta apertar ctrl + enter. A execução apaga o código escrito na janela, por padrão. Se você não quiser isso (é um saco), basta ter o código todo selecionado na hora de executá-lo, assim o Maya não apaga o mesmo. Eu sempre uso ctrl+a para selecionar tudo e em seguida ctrl+enter para executar. Atalhos são um presente e você deve utilizá-los. Importante lembrar que você pode executar somente uma linha do código, basta selecioná-la e apertar ctrl+enter, assim, somente a linha selecionada será executada. Útil para entender linha-a-linha como um código funciona.

Criando um objeto:

from maya import cmds

cmds.polySphere()

Esse comando cria uma esfera com os atributos padrões. Mas e se eu quiser especificar os argumentos como nome ou radius, etc ?

from maya import cmds

cmds.polySphere(name='testSphere', radius=5)

Para descobrir quais são os argumentos possíveis, existem algumas opções. Uma delas é selecionar o comando e utilizar o Marking Menu para um acesso rápido a documentação. Veja por você mesmo, selecione ‘polySphere’, segure o botão direito do mouse e clique em “Command Documentation”, uma página abrirá no seu mouse e você terá acesso a documentação do comando selecionado.

Uma outra maneira é utilizar o próprio interpretador Python para descobrir.

from maya import cmds

print cmds.help('polySphere')

A saída do comando será:

Synopsis: polySphere [flags] [String...]
Flags:
   -e -edit
   -q -query
  -ax -axis                 Length Length Length
 -cch -caching              on|off
  -ch -constructionHistory  on|off
 -cuv -createUVs            Int
   -n -name                 String
 -nds -nodeState            Int
   -o -object               on|off
   -r -radius               Length
  -sa -subdivisionsAxis     Int
  -sh -subdivisionsHeight   Int
  -sx -subdivisionsX        Int
  -sy -subdivisionsY        Int
  -tx -texture              Int

Command Type: Command

O que isso significa ? A primeira linha é a sintaxe do comando caso você chame-o via MEL (Maya Embedded Language). O resto, divido em três colunas, são respectivamente, nome curto, nome longo e tipo de dado esperado. Ou seja, você pode passar um parâmetro tanto com o nome longo ou com o nome curto. Eu recomenda usar sempre o nome longo, para fins de legibilidade. 6 meses depois, você irá agradecer a você mesmo. Entretanto, é perfeitamente possível escrever o código anterior como:

from maya import cmds

cmds.polySphere(n='testSphere', r=5)

A terceira coluna simplesmente define o tipo esperado. Radius espera um Int (integer), ou seja, se você passar uma string, python subirá uma exceção TypeError. O tipo Length é um número decimal (mas também pode ser um inteiro), como 12.5 e afins. Note que ‘axis’ recebe 3 valores do tipo Length, ou seja, você passa os 3 valores dentro de uma tupla (uma sequência de objetos envolvidos por parênteses). Exemplo:

from maya import cmds

cmds.polySphere(name='testSphere', radius=2.5, axis=(1,0,0))

On/Off é simplesmente um Boolean, ou seja, você passa True ou False quando o tipo requerido for On/Off.

Edit Mode

A maior parte dos comandos tem ao menos o modo de Criação, que é o que vemos até agora. Mas e se você quiser editar um objeto já criado ou simplesmente pegar informações de um objeto já existente ? Para isso, existem outros modos que os comandos suportam. Temos o Edit Mode e o Query Mode. Para exemplificarmos-o, vamos editar a esfera de nome testSphere que criamos no exemplo anterior.

from maya import cmds

cmds.polySphere('testSphere', edit=True, radius=4)

Simples como parece ser, o raio da esfera criada agora é 4. Mas como ? Quando queremos editar um objeto já existente, simplesmente passamos o nome dele como primeiro argumento e ativamos o argumento ‘edit’ (sim, também poderia ser a versão curta ‘e’). Isso faz com o que comando entre em modo de Edição. Agora a esfera possui raio 4. Quanto queremos editar um objeto, é importante notar que o primeiro argumento sempre deve ser o nome do mesmo.

Query Mode

Esse modo permite-nos requisitar informações de um determinado objeto. Veja um exemplo:

from maya import cmds

cmds.polySphere('testSphere', query=True, radius=True)

Temos como resultado:

# Result: 4.0 #

O princípio é o mesmo, o argumento query ativa o Query Mode. Porém, diferentemente do Edit Mode, não passamos o valor desejado e sim somente ‘True’. Você não precisa passar valor nenhum, somente identificar que argumento você gostaria de ver o valor.

Na documentação dos comandos (Help -> Python Command Reference), tem uma seção denominada Flags, lá é onde você fica sabendo que modos um determinado comando suporta. As possibilidades são C (Create), E (Edit), Q (Query) e M (Multiuse).

Por último (por hoje), vamos ver como guardar um objeto que criamos para depois editá-lo ou queryá-lo (ha!). Bem, ao criarmos um objeto com um comando, o Maya retorna uma lista contendo 2 strings (o transform node e o shape node). Vejamos:

from maya import cmds

cubeNodes = cmds.polyCube()

Se você executar um print spNodes, verá que o resultado é similar a isso:

[u'pCube1', u'polyCube1']

Ou seja, se você esperava poder acessar o objeto diretamente, expectativa frustrada. Não é um comportamento exatamente inteligente do Maya, mas é como as coisas são. Sendo assim, para editar o cubo, você faria:

cmds.polyCube(cubeNodes[1], e=True, height=3)

Para um exemplo mais completo, criarei um esfera, depois pegarei o raio dela e multiplicarei por 3.

spNodes = cmds.polySphere()
spRadius = cmds.polySphere(spNodes[1], query=True, radius=True)
cmds.polySphere(spNodes[1], edit=True, radius=spRadius*3)

Por hoje é só! Qualquer dúvida, comentário, sugestão ou pedido, não hesitem!

Use Facebook to Comment on this Post