FROM THE BLOG

Displacement no Maya

Com Displacement é possível criar relevo verdadeiro nas superfícies dos objetos (elevações e depressões), baseados em imagens em tons de cinza ou mapas procedurais em tons de cinza (Checker, Noise, Fractal, etc). Ou seja, a topologia da geometria é alterada, criando formas reais, diferente do que ocorre com Bump, que cria apenas a ilusão de relevo.

displacement_fig01

Ao renderizar um objeto com Displacement aplicado, os renderizadores (no nosso caso, Maya Software e Mental Ray) configuram o chamado Tessellation na malha poligonal ou NURBS.

Tessellation é o processo que os renderizadores usam para converter superfícies NURBS, ou malhas poligonais com displacement, em triângulos. Os triângulos determinam quão suavizado um objeto parecerá quando a câmera estiver próximo a ele. Objetos com poucos triângulos parecerão facetados perto da câmera, mas quando estiverem distantes da mesma, parecerão suavizados.

No Mental Ray, Tessellation é chamado de Approximation.

displacement_fig02

Se o displacement for gerado através de uma imagem bitmap, automaticamente o canal alpha da imagem é conectado ao node displacementShader (node responsável por gerar o displacement). Se a imagem não tiver um canal alpha ou não suportar canal alpha e o displacement não ocorrer, habilite o atributo “Alpha is Luminance” localizado na seção “Color Balance” do node “File”.

displacement_fig03

A intensidade do Displacement (altura) é configurada pelo atributo “Alpha Gain” (veja imagem acima).

O workflow para gerar o Displacement é:

  1. Abra o Hipershade
  2. Insira um novo node de material na Work Area do Hipershade (no meu caso, usei um novo Lambert)
  3. Insira na Work Area um node File, caso use um bitmap, ou node procedural qualquer, seja 2D Texture ou 3D Texture.
  4. Selecione o node File ou outro node procedural e arraste com o botão do meio do mouse até o node do material (no meu caso, lambert2)
  5. Solte o botão e escolha a conexão “displacement map”.
  6. Automaticamente, o node displacementShader é criado e conectado ao node Shading Group do lambert2 (lambert2SG)

A montagem está sendo mostrada na Fig 03, logo acima. Diferente de outros nodes mais comuns, o node displacentShader não é conectado diretamente ao node do material e sim ao seu Shading Group.

Configuração do Displacement no Maya Software

As configurações do Displacement para o Maya Software estão localizadas no node Shape do objeto. No meu caso, como estou aplicando o Displacement num Poly Plane, as configurações estão dentro pPlaneShape1, no Attribute Editor, seção Displacement Map.

displacement_fig04

Feature Displacement

Deixe-o habilitado para que o displacement funcione.

Initial Sample Rate

Esse atributo controla a qualidade do displacement, processando o tessellation. O que ele faz é checar os valores da textura para determinar a diferença entre as alturas do displacement e onde novos vértices devem ser introduzidos. Ele cria um grid de amostras em cada triângulo da malha do objeto. Por exemplo, o valor padrão 6 gera um grid de 6×6.

Na prática, quanto maior esse valor, melhor será a qualidade do displacement. Mas cuidado! Maior também será o tempo de render, pois ele está acrescentando triângulos, lembra? Comece com valores baixos e vá testando aos poucos, até alcançar o resultado esperado.

Extra Sample Rate

Esse atributo é usado para refinar os novos vértices adicionados pelo Initial Sample Rate. Ele ajusta os vértices alinhando-os com o Displacement.

Na prática, quanto mais drástico, “duro” for o resultado do displacement em encontros de planos, maior deverá ser o valor do Extra Sample Rate. Ele suavizará essas áreas do displacement.

O valor padrão é 5, mas é recomendado começar a configurá-lo usando 0 e ir aumentando aos poucos, não passando de 20 (normalmente, 20 é um valor máximo que costuma resolver os casos mais difíceis).

Texture Threshold

Esse atributo é usado para eliminar vértices que não contribuem de forma significativa para o displacement. Qualquer vértice onde a variação for menor que o valor de Texture Threshold não será considerado.

Dicas:

  • Recomenda-se que se for usada uma imagem bitmap para gerar o displacement, que esta tenha boa qualidade, com o mínimo de granulação. Assim, é possível manter o valor do Texture Threshold em 0 (zero).
  • Se o tempo de render estiver muito alto, aumente o valor deste atributo, mas bem pouco (comece com valores decimais).
  • Se na imagem o valor de branco e preto for drástico, sem tons de cinza entre eles para suavizar a transição, então deixe mantenha o valor padrão (zero).
  • Se imagem tiver transição suave entre os valores de branco e preto, então mantenha o valor deste atributo o mais próximo possível de zero.

Normal Threshold

Determina o limiar do ângulo (em graus) entre as normais de dois triângulos adjacentes. Recomenda-se usar o valor padrão de 30 graus.

Abaixo, seguem testes com diferentes valores:

displacement_fig05

Dica Master: a qualidade, o tempo de render e os valores dos atributos acima também dependerão da quantidade de polígonos atual do objeto e da qualidade do Anti-aliasing. Nas comparações acima, o Poly Plane está com 2500 faces e o Antialising (Render Settings > Maya Software > Anti-aliasing Quality) no campo Quality está com o preset “Intermediate quality”.

Configuração do Displacement no Mental Ray

Configurar o Displacement no Mental Ray é mais complicado, pois existe uma gama de atributos que permite ajustes finos em diferentes situações. Então, mostrarei da forma mais fácil e rápido, ou seja, usando presets (configurações pré-estabelecidas). Numa outra ocasião, tentarei escrever um post falando somente dessas configurações.

Nos exemplos a seguir, apliquei o mesmo Lambert no Poly Plane. Só alterei o renderizador para Mental Ray e configurei o Anti-Aliasing.

Ao renderizar, o Mental Ray utiliza as configurações do Maya Software para gerar o Displacement. Para usar as configurações do próprio Mental Ray, faça o seguinte:

  1. Selecione o objeto que possui o Displacement aplicado (no meu caso, polyPlane1)
  2. Acesse Window > Rendering Editors > mental ray > Approximation Editor
  3. Na primeira seção, Displacement, clique no botão Create.
  4. Para ter acesso às configurações, acesse o Attribute Editor (caso não veja as configurações, clique no botão Edit, no Approximation Editor).

Ao clicar no botão Create, o Mental Ray cria um node chamado mentalrayDisplaceApprox1, e o conecta ao objeto.

displacement_fig06

Presets

Lista de presets para executar o Tesselation (Approximation). Você pode usar os presets da forma como estão configurados ou usá-los como um início de configuração, ou seja, você pode alterar os valores da forma que achar melhor (lembrando que não vou falar de cada atributo neste post).

Parametric Grid (Low/Mid/High) Quality

Com esse método, cada patch da superfície (área entre isoparms) é subdividida em uma quantidade fixa de triângulos.

Regular Grid (Low/Mid/High) Quality

Este método subdivide toda a superfície (ao invés de fazê-lo por partes – patches) usando uma quantidade fixa de triângulos.

Angle Tolerance (Low/Mid/High) Quality

Usa um método de tessellation adaptativo no qual mais triângulos são adicionados em áreas de curvatura. O bom desse método é que ele adiciona mais triângulos nas áreas que são mais necessárias (áreas onde a superfície é curva) e adiciona menos triângulos em áreas maiores e planas, onde não são necessários tantos triângulos.

Pixel Length (Low/Mid/High) Quality

Adiciona triângulos com base no tamanho (em pixels) da superfície. As superfícies que estiverem perto da câmera terão muito mais triângulos, enquanto as que estiverem distantes, terão menos triângulos. A vantagem deste método é dar mais atenção nas superfícies que realmente precisam de maior suavização.

Abaixo, seguem alguns testes comparativos:

displacement_fig07