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

3dsmax, V-ray e Linear Workflow

Porquê usar Linear Workflow (LWF) ?

Render sem correção de Gamma

Render sem correção de Gamma

Render com correção de Gamma

Render com correção de Gamma

Qual a diferença entre as duas imagens acima ? Nenhuma, exceto pela maneira como seu monitor as exibe. O problema é simples. Vray e o 3ds Max fazem seus cálculos no espaço ‘linear’, também conhecido como Gamma 1.0. O que por si só, não é nenhum problema, mas por padrão, todos os monitores exibem uma imagem com Gamma 2.2 (sRGB), o que faz com a imagem ‘pareça’ escura, apesar de não estar.  O 3ds Max assume que você está visualizando a imagem em um monitor com Gamma 1.0, o que certamente não é o caso. Então você precisa configurar o 3ds Max (e o seu render engine) para exibir a imagem de maneira correta.

Porquê isso é um problema ?

Quem não sabe dos ajustes de Gamma, utiliza uma série de truques para alcançar o resultado que espera. Por achar a cena por demais escura, aumentam a intensidade das luzes, sobem as configurações de GI, adicionam luzes ambiente, etc. Naturalmente, isso costuma ter um impacto e esse é: tempo de renderização. Note o tempo de renderização da cena exemplo acima, apesar de ser uma cena simples, houve uma diferença significativa no tempo. Felizmente, é só uma questão de ensinar ao programa como exibir a imagem.

Como configurar o 3ds Max ?

Vá em Customize -> Preferences -> Gamma and LUT.

Configurações de Gamma para o 3ds Max

Customize -> Preferences -> Gamma and LUT

Ok, mas o que eu fiz exatamente ?

1. Essa opção diz ao 3ds Max que queremos utilizar a correção de Gamma.

2. Esse é o Gamma de visualização. Ele diz ao 3ds Max que Gamma utilizar para as viewports e para o Frame Buffer. Colocando em 2.2, você ativa a correção de gamma em modo preview. Em outras palavras, a imagem final continuará em Gamma 1.0, mas você já verá como o resultado final parecerá (após fazer correção de Gamma na pós).

3. Com ambos selecionados, a alteração do Gamma 2.2 também se aplicará as cores no seletor de cor do 3ds Max e aos swatches no Material Editor. Isso significa que as cores nessas janelas, corresponderão a saída final.

Affect Color Selector Ativado

Cores exibidas com um Gamma de 2.2, isso significa que as cores vistas aqui são equivalentes as da saída…. E que riqueza de cores vemos agora!

Affect Color Selector Desativado

Cores exibidas com um Gamma de 1.0. Qualquer cor escolhida aqui, ficaria mais brilhante após ser renderizada e corrigida para o Gamma 2.2, por isso ativamos Affect Color Selector.

Affect Material Editor desativado.

Aqui, com Affect Material Editor ativado, o que você vê é como sairá no render. As cores parecem lavadas, mas é normal. Só agora você está vendo toda a informação disponível.

4. Quando setamos Input Gamma para 2,2, estamos essencialmente dizendo ao 3ds Max que o Gamma 2.2 já está aplicado as imagens que você importa (como texturas). Você pode deixar em 1.0, mas para cada imagem que utilizar, você terá que configurar o gamma dela corretamente. Pessoalmente, considero mais simples colocar Input Gamma em 2,2 e alterar o Gamma da imagem importada somente quando estiver importando mapas de bump, displacement, normal e imagens HDR, pois essas imagens estão em Gamma 1.0. Já mantendo Output Gamma em 1.0, nós salvamos o arquivo final ainda sem a alteração de Gamma, tendo assim, acesso a toda informação tonal disponível na pós-produção.

Como configurar o V-Ray ?

De novo, o que eu fiz ?

1. Selecione Linear Multiply.

2.  Aqui você diz ao V-Ray para fazer seus cálculos levando em consideração que a saída final da imagem será em Gamma 2.2.

3. Don’t affect colors (adaptation only) diz ao V-Ray que o Gamma (2.2, no caso) que configuramos só deve ser utilizado para os cálculos e não ser “queimado” permanentemente na saída final – a imagem renderizada. Estamos essencialmente afirmando que ajustaremos o Gamma da imagem somente na pós-produção utilizando um software como AE ou Nuke (não utilizo o Photoshop para esse fim), permitindo uma flexibilidade maior. Com essa mudança, tanto Dark Multiplier quanto Bright Multiplier perdem seu efeito, deixe para ajustar o contraste na pós. Mantenha Affect Background marcado, instruindo a V-Ray a também aplicar o Gamma 2.2 também para o background – aquele que você especifica na janela Environment do 3ds Max.

O V-Ray Frame Buffer (VFB) não leva em consideração o Gamma configurado nas preferências do 3ds Max. Para visualização correta, clique no botão sRGB na barra inferior do VFB. A imagem ficará mais clara, efeito direto das nossas configurações de Gamma. Se você achar que as cores estão lavadas, é meramente uma questão de reconfigurar as luzes e os materiais, que antes não estavam adaptados para funcionar nessa claridade toda! Tenha em mente que com essas configurações, você deve usar o V-Ray Frame Buffer, já que o Frame Buffer padrão do 3ds Max não tem correção de gamma.

Obs.: Não marque Linear Workflow, como o próprio manual do V-Ray aponta, esse é só um atalho para rapidamente converter cenas antigas que não foram configuradas com o LWF em mente.

Em que formato devo renderizar ?

Essa é uma discussão delicada, com cada qual sempre tendo seus favoritos. Mas em resumo, os formatos recomendados são TIF, TGA e EXR. Eu, pessoalmente, utilizo o OpenEXR. Suporta tanto 16-bit quanto 32-bit, compressão sem perda de qualidade e suporte a multichannel, que em outras palavras, permite que você tenha todos os seus render passes no mesmo arquivo.

Renderize sempre pelo menos em 16-bit, para maior informação tonal na imagem. Em alguns casos extremos, 32-bit é recomendado para quando você precisa dessa informação adicional, como em VFX ou para correção de cor extrema. Tudo depende do projeto. Lembre-se que essa escolha vem com um preço, imagens 32-bit são incrivelmente mais pesadas (e nem pensar em usar o Photoshop, quase nada funciona no modo 32-bit).

V-Ray Split Channels

Você pode utilizar um EXR marcando estas opções acima e alterando a extensão para EXR ao clicar em Browse. Após isso, você poderá escolher entre 16-bit e 32-bit, além de ter uma aba para selecionar que render passes serão inclusos no arquivo.

Como abrir essa imagem no Nuke ?

Você só precisa configurar seu colorspace para Linear no seu nó Read e selecionar sRGB no viewer. Ambos já estão ativados por padrão quando a imagem é do tipo EXR. Caso tenha salvo em outro formato, lembre-se de fazer estas alterações.

Ao renderizar, se você quiser queimar a correção de Gamma 2.2, altere o colorspace do nó Write para sRGB ou Gamma2.2.

Veja mais dicas para o seu render V-Ray clicando aqui.

Use Facebook to Comment on this Post