FROM THE BLOG

Mental Ray mia_material shader

Finalmente consegui finalizar o post sobre o mia_material, do Mental Ray. Eu me preocupei em mostrar os principais atributos do mia_material, tentando criar uma referência visual, mostrando as configurações em três softwares diferentes: Maya, Softimage e 3ds Max, porém, a ênfase será no Maya.

O mia_material

Através do mia_material shader, também conhecido como Architectural (Autodesk Softimage) e Arch&Design (Autodesk 3ds Max), é possível criar quase todo tipo de materiais. É o shader mais indicado para trabalhar com Mental Ray. A partir da versão 3.8, substitui completamente os shaders DGS e Dieletric.

As vantagens em usá-lo são:

  • Fácil de usar
  • É fisicamente correto (obedece à 1º Lei da Termodinâmica)
  • Permite configurar a performance das reflexões
  • Permite configurar manualmente o BRDF (comportamento da reflexão em relação ao ângulo de visão do observador)
  • Permite configurar a transparência como solida ou fina
  • Permite arredondar quinas vivas dos objetos
  • Possui controle da Iluminação Indireta
  • Usa o algorítimo Oren-Nayar para criar aparência fosca, porosa como argila
  • Possui Ambient Occlusion embutido, destacando os detalhes
  • Todos os shaders em um (controla photon e sombra)
  • Multiplos passos de render

Conservação de energia

Uma das características mais importantes do shader mia_material, é que ele conserva energia. Isso significa que cor + reflexão + refração <= 1. Em outras palavras, nenhuma energia é criada “magicamente” e a energia vinda das luzes é distribuída corretamente entre os componentes diffuse (cor), reflection (reflexão) e refraction (refração) mantendo a primeira lei da termodinâmica.

Por exemplo, ao aumentar a reflexão, a energia deve ser tirada de algum lugar. Por isso, os níveis de diffuse e transparência serão reduzidos automaticamente. Adicionando transparência, reduz-se o componente diffuse.

As regras são:

  • A transparência usa energia do componente diffuse: se o material for 100% transparente, não haverá nenhuma cor (ex.: vidro incolor).
  • A reflexão usa energia dos componentes diffuse e transparência: se o material for 100% reflexivo, não haverá cor nem transparência (ex.: espelho).
  • A translucidêz é um tipo de transparência e o atributo Translucency Weight define a porcentagem da transparência versus a translucidez (ex.: plásticos, pele, papel).

Por causa da conservação de energia, o nível do brilho specular do material está diretamente ligado à polidez desse mesmo material. Superfícies polidas geram brilhos mais agudos e intensos, enquanto superfícies mais foscas geram brilhos mais espalhados e menos intensos. Isso acontece porque a energia se espalha e se dissipa em grandes áreas.

Gamma e controle de exposição

É altamente recomendado que se trabalhe com correção de gamma (ver Linear Work Flow) e controle de exposição (Exposure Control, também conhecido como Tone Mapping), como, por exemplo, o mia_exposure_photographic shader. Isso garantirá a eficácia física do material, resultando em imagens melhores.

Use o Final Gathering e o Global Illumination

O mia_material foi desenvolvido para ser usado de forma realista usando as técnicas de iluminação indireta. No Mental Ray, elas são o Final e Gathering e o Global Illumination (photons), e, para ter bons resultados, um deles deve ser usado (recomendo somente o Final Gather ou o Global Illumination + Final Gather).

Use as luzes de forma fisicamente correta

Configure as luzes com atenuação/decay real. Na nossa atmosfera, a intensidade da luz é inversamente proporcional ao quadrado da distância (1/d²). Esse modo é denominado Quadradic.

Se você usar luzes sem atenuação, somente com Final Gather, o render ainda ficará bom, pois o Final Gather apenas transporta a luz de uma superfície para outra. Porém, ao usar photons, que é um método mais preciso de gerar iluminação indireta, acontece estouros de luz, uma claridade mais intensa do que esperado. Isso porque os photons são emitidos da luz. É importante que o mia_material reaja de forma correta a essa energia.

É importante, também, que o shader que controla a luz e o shader que controla a emissão dos photons trabalhem bem juntos. As luzes Photometrics (ex.: Physical Sun and Sky, Portal Lights, Photometric shader) fazem isso muito bem.

Grupo Diffuse

descricaodiffuse_grp

Color

Esse atributo especifica a cor ou textura aplicada no material, a forma como a luz interage com a superfície opaca do objeto (esse termo, “diffuse”, será usado mais vezes).

diffusecolor

Weight

Controla a intensidade do componente diffuse. Quanto mais baixo, mais aparentes ficam os reflexos, sempre dependendo dos valores de Reflectivity e Transparency.

diffuseweight1

Roughness

Quanto mais alto o valor, maior a aparência de material fosco e poroso. Lembrando que para esse material ser convincente, os valores de Reflectivity e Glossiness devem ser baixos.

diffuseroughness

Grupo Reflection

descricaoreflection_grp

Color

Tinge as áreas claras do reflexo com a cor escolhida. Também influencia a intensidade da reflexão (cores claras = intensidade maior. Cores escuras = intensidade menor).

reflectioncolor

Reflectivity

Controla a intensidade da reflexão. Este atributo também depende do BRDF (descrito mais abaixo).

reflectionreflectivity

Glossiness

Controla a polidez do material. No valor máximo (1 = totalmente polido) a reflexão gera imagens nítidas. Valores menores que 1 geram imagens desfocadas (borradas). 0 (zero) também gera reflexo nítido.

reflectionglossiness

Glossy Samples

Ajusta a qualidade da reflexão desfocada. Quando o valor de Glossiness é muito baixo, ele tende a granular o desfoque da imagem. Aumentando o valor de Glossiness Samples, aumenta-se a quantidade de amostras por pixel que gera esse efeito, suavizando-o.

reflectionglossysamples

Highlights Only

Quando habilitado, não renderiza o reflexo, porém mantém o brilho specular do material.

reflectionhighlightsonly

Metal Material

Faz com que o material tenha aparência metálica. Funciona melhor com Glossiness menor que 1.

reflectionmetalmaterial

Grupo Advanced Reflection

descricaoadvreflection_grp

Use Max Distance: faz com que o reflexo apareça dentro do limite estipulado no campo “Max Distance”.

reflectionadvreflectionmaxdistance

Fade to End Color: se “Use Max Distance” estiver habilitado, ao habilitar o “Fade To End Color”, a área na qual o reflexo for limitado assumirá a cor designada em “End Color”. A cor preta não surtirá efeito.

reflectionadvreflectionfadetocolor

Max Trace Depth: limita a quantidade de reflexões que o material pode fazer, impedindo que o cálculo do render se extenda infinitamente (ex.: um espelho em frente a outro). No caso do Maya, apesar do valor padrão deste campo ser 5, ele só faz 1 reflexão, pois o valor global, presente no Render Settings, é 1. Logo, deve-se acessar Render Settings > Quality > Raytracing e aumentar o valor de Reflections. Lembrando que a quantidade total de traçamento da luz (Max Trace Depth) = Reflections + Refractions.

reflectionadvreflectionmaxtracedepth

No highlights for visible lights: se houverem luzes visíveis na cena e esta opção estiver habilitada, as luzes não gerarão brilhos speculares.

reflectionadvreflectionnohighlightsforvisiblelights

Skip Reflections On Inside: quando habilitado, não permite que o verso de uma face reflita o ambiente a sua volta.

reflectionadvskipreflectionsoninside

Grupo Refractions e Translucency

descricaorefraction_grp

Transparency: controla a intensidade da transparência. 0 (zero), material totalmente opaco. 1, material totalmente transparente.

refractiontransparency

Color: especifica a cor da transparência. A cor preta deixa o material 100% opaco.

refractioncolor

Index of Refraction (Índice de Refração): todo material transparente possui um índice de refração. Quanto mais distante de 1, maior a distorção dos objetos atrás do objeto transparente. Alguns índices: água (1.333), vidro (1.5), diamante (2.42), ar quente (0,96).

refractionior

Glossiness: valores menores que 1 deixam a transparência desfocada.

refractionglossysamples

Translucency

Habilita o efeito de translucidez do material. O atributo “Weight” define a intensidade do efeito.

translucency

O atributo “Color” define a cor do efeito mesclado à cor da transparência.

translucencycolor

Grupo Advanced Refraction

descricaoadvrefraction_grp1

Use Max Distance: limita o efeito da transparência à distância configurada neste atributo. Os volumes do objeto que excederem essa distância são substituídos por uma cor ou textura (exemplo contido na figura abaixo, junto com o atributo “Use Color At Max Distance”).

Use Color At Max Distance: substitui a área com limitação da transparência com a cor ou mapa designado neste atributo.

refractionusemaxdistance

Max Trace Depth

Antes da versão 3.8 do Mental Ray, esse atributo funcionava como na reflexão, ou seja, se vários objetos transparentes fossem colocados um atrás do outro, limitava-se até quando a transparência era computada. Ao chegar no limite, as seguintes refrações eram bloqueadas, mostrando uma mancha preta. Segundo a documentação do Mental Ray (clique aqui para ter acesso ao documento em inglês), isso não acontece mais, pois todos querem ver o resultado da transparência sem limites. O que o “Max Trace Depth” controla agora é a curvatura da refração. Valores baixos, menos distorção. Nos meus testes, acima de 5 não alterou nada. O atributo “Cutoff Threshold” funciona como um limitador dos raios da refração. Caso queira fazer com que o “Max Trace Depth” funcione como nas versões anteriores, use o valor -1 e controle o limite usando o atributo “Refractions” localizado na configuração Global do mental Ray (Render Settings > Quality > Raytracing).

refractionmaxtracedepth

No Maya, apesar do valor padrão de Max Trace Depth ser 5, na verdade o valor padrão usado é 1, pois 1 é o valor presente no campo “Refractions” nas configurações Globais (Render Settings > Quality > Raytracing).

Thin Walled x Solid

A opção “Solid” gera refração e a distorção da mesma se baseia no objeto sólido e também no Índice de Refração. Já a opção “Thin Walled” não computa a refração do material transparente, não apresentando as distorções.

thinwalled_x_solid

Refractive Caustic x Transparent Shadow

Quando o Caustic (efeito que simula a convergência da luz que atravessa o material transparente, levando em conta o índice de refração) não estiver habilitado, “Transparente Shadow” é a melhor opção. Se o Caustic estiver habilitado, além de melhorar o desempenho do render, o efeito será melhor com “Refractive Caustic”.

refractivecaustics_x_transparentshadow

Backface Culling

Quando habilitado, não renderiza as faces inversas às Normais (vetores perpendiculares que saem do centro das faces. O lado cuja a Normal aponta é o lado visível da face). O objeto abaixo está com todas as Normais apontando para dentro.

backfaceculling

Propagate Alpha

Permite salvar o canal Alpha corretamente, baseando-se no nível de transparência e distorção causada pelo IOR do material.

propagatealpha

Grupo Anisotropy

descricaoanisotropy_grp

Anisotropia (anisotropy) significa:

Característica peculiar a certos meios em que uma ou mais propriedades dependem da direção em que são observadas no meio.” (definição do dicionário Michaelis).

No caso, as propriedades em questão são a reflexão e o brilho especular (highlight). Materiais anisotrópicos deformam essas propriedades porque existem microfissuras em sua superfície. Assim, tando a reflexão quanto o brilho especular tendem a seguir a direção dessas fissuras, que podem ser ranhuras causadas por ferramentas ou um conjunto de fios super finos, como cabelos e a trama de alguns tecidos.

Se uma superfície anisotrópica é girada contra a direção dos sulcos (microfissuras), o formato e a localização do brilho irão mudar, dependendo de como a direção dos sulcos se altera” (Aprendendo Autodesk Maya 2008 | Manual de efeitos especiais).

(Veja também a resposta de André Agenor no fórum da 3D4All: http://www.3d4all.org/foruns/showthread.php?16375-Oq-%C3%A9-material-anisotropico&p=157656)

Como exemplo, podemos citar os seguintes materiais como geradores de efeito anisotrópico: cetim, seda, náilon, CDs, metais escovados, cabelos agrupados, etc.

Anisotropy

Define a forma do brilho specular. Valor 1 significa anisotropia desabilitada. Valores negativos, além de mudarem a forma do brilho, deixarão a reflexão do material mais desfocada. Por causa da própria definição de anisotropia, é necessário configurar o Reflection > Glossiness com um valor menor que 1.

Nas imagens abaixo, eu estou usando uma luz spot pontual (não Area) para demonstrar melhor o efeito.

anisotropy

Rotation

Configura a angulação do efeito.

anisotropyrotation

Channel

Caso queira usar uma textura para guiar a direção do brilho specular, o atributo Channel estipula como essa textura será usada. O valor -1 usa a UV do objeto como guia. Na imagem abaixo, usei um Ramp (Gradient) do tipo Tartan com 15 repetições. Se optar por usar um bitmap, não esqueça de retirar o filtro que costuma desfocar o bitmap. No Maya, essa opção fica no node File > File Attributes > Filter Type. O valor padrão desse campo é Quadratic. Altere para Off.

anisotropychannel

Grupo BRDF

descricaobrdf_grp

No mundo real, o grau de reflexão de uma superfície depende do ângulo de visão do observador. O termo usado para esse efeito é BRDF (Bi-directional Reflectance Distribution Function), ou seja, é a forma de definir quanto uma superfície reflete quando vista de diversos ângulos.

Muitos materiais apresentam esse comportamento. Vidro, água e outros materiais dielétricos com efeito Frenel (onde a dependência angular é guiada estritamente pelo índice de refração) são os exemplos mais claros, mas outros materiais em camadas como madeira laqueada, plásticos, etc, possuem características similares.

O mia_material permite simular esses efeitos, baseado no Índice de Refração e também configurando valores de reflexão para:

  • 0 graus (superfícies vistas de frente)
  • 90 graus (superfícies vistas num ângulo próximo a 90 graus)

Use Frenel Reflection

Quando habilitado, a dependência angular da intensidade será definida pelo índice de refração (Index Of Refraction) do material.

fresnel

A segunda forma de configurar o BRDF é manualmente através dos atributos 0 Degree Reflection, 90 Degree Reflection e Brdf Curve.

0 Degree Reflection define a intensidade de reflexão quando a câmera está olhando diretamente para a superfície. 90 Degree Reflection define a intensidade de reflexão quando a câmera está olhando para a superfície num ângulo perpendicular (90 graus). O atributo Brdf Curve é a curva de declíneo entre os dois atributos.

brdf

brdf_curve

Essa forma é mais usada para materiais híbridos ou metais. A maior parte dos materiais possuem maior intensidade de reflexão quando o ângulo de visão é perpendicular à superfície. Metais tendem a ter reflexão mais uniformemente distribuída pela superfície, então, o valor de 0 Degree Reflection é alto (de 0.8 a 1). Muitos outros materiais em camadas como piso envernizado, madeira laqueada, etc, possuem baixo valor de 0 Degree Reflection (de 0.1 à 0.3).

Grupo Indirect Illumination Options

descricaoindirectillumination_grp

Esse grupo possui atributos que controlam a qualidade da iluminação indireta (GI) gerada pelo material.

Grupo Ambient Occlusion

descricaoao_grp

Ambient Occlusion é o método usado para emular a aparência de iluminação global usando shaders que calculam quão ocluída (bloqueada) uma área é de receber luz, gerando as sombras de contato. Se chamam assim, porque as áreas escuras se formam entre objetos ou suas partes.

Quando usado sozinho, um shader de AO cria uma imagem em escala de cinza, sendo claras as áreas onde a luz alcança e escuras onde a luz é bloqueada.

aopure

Observando as imagens acima, perceba que a imagem da esquerda tem pouca luz bloqueada, fazendo com que os detalhes de reentrâncias  fissuras, etc, fiquem mais visíveis (valor baixo do atributo Distance). Já a imagem da direita, a aparência é mais semelhante a iluminação global (valor alto do atributo Distance).

Um aspecto importante do AO é que a distância de oclusão pode ser configurada para controlar o quanto a luz é bloqueada  criando um efeito localizado do AO, pois só as superfícies que estiverem dentro do raio de ação serão consideradas oclusas (o que também deixa o render mais rápido). O resultado prático é uma definição melhor das sombras de contato e de pequenos detalhes.

Abaixo, segue uma comparação de um render sem AO e com. A diferença é sutil, pois o AO já está composto junto com todos os componentes dos materiais da cena (Diffuse, Reflexão, Brilho, etc). Porém, dá pra perceber que algumas sombras estão mais nítidas, principalmente em áreas de contato e reentrâncias.

aocomparacao

Existem duas formas de usar o AO embutido no mia_material :

  • Método Tradicional onde simula-se um shader de AO.
  • Usar o AO para melhorar os detalhes em conjunto com iluminação global (Final Gather ou Photons).

O segundo método é especialmente interessante quando o efeito da iluminação indireta é bem suave (ex. photons com raios grandes ou Final Gather com densidade bem baixa), podendo perder detalhes pequenos da cena.

Samples

Configura o número de raios emitidos pelo AO. Valores altos geram um efeito mais suave, porém, com render mais lento. Valores baixos são mais rápidos para renderizar, mas geram um efeito mais granulado. 64 costuma ser um bom valor para a maioria das situações.

Distance

Define o raio que abrange os objetos ocluídos. Valores pequenos restringe o efeito do AO fixando detalhes e é mais rápido para renderizar. Valores maiores cobre áreas maiores e mais lento para renderizar.

Quando o atributo Use Detail Distance for On, o AO atuará evidenciando os detalhes. Ele funciona junto com o Final Gather e/ou Photons.

Quando o atributo Use Detail Distance for With color bleed, o AO passa a funcionar de um modo mais sofisticado (opção introduzida no Mental Ray 3.6). Ao invés de produzir uma simples oclusão, adicionando áreas escuras em vários graus, o shader irá olhar as cores ao redor e usá-la como cor escura, no lugar do habitual preto. É um processo mais lento, porém, mais realista.

Abaixo, a imagem da esquerda mostra um render feito com AO normal, enquanto a da direita com a opção With color bleed. O efeito fica fácil de ver em materiais auto-iluminados e áreas de penumbra.

ao_usedetaildistance

O efeito é sutil, mas dá pra perceber na parte da frente dos pés que que em um o sombreamento é preto e no outro é a cor do material mais escura.

Ambient Shadow Color

Configura a cor escura das sombras criadas pelo AO. Na prática: cor preta fará com que as áreas escuras fiquem bem escuras, enquanto um cinza claro deixará o efeito menos notável. Se o atributo Use Detail Distance estiver como With color bleed, ele vai fazer uma mistura da cor escolhida com as cores dos objetos próximos:

(1-Ambient Shadow Color) * (cores dos objetos) + preto * Ambient Shadow Color.

Ambient Light Color

É usado para fazer um AO mais tradicional. Enquanto o AO tradicional é renderizado sem iluminação indireta, ele pode ser combinado com a iluminação indireta existente. É um efeito não fisicamente correto, porém pode ajudar a clarear cantos muito escuros.

Grupo Interpolation

descricaointerpolation_grp

Reflexos e Refrações podem ser interpolados, gerando efeitos suaves, não reais, e diminuindo o tempo de render. A interpolação funciona pre-calculando os reflexos num grid que cobre toda a imagem. O número de amostras (raios) existentes em cada ponto do grid é determinado pelo atributo Reflection Samples e Refraction Samples (reflexão e refração, respectivamente). A resolução do grid é configurado através do atributo Grid Density.

Porém, a interpolação pode causar artefatos (manchas). Por usar um grid de baixa resolução, o efeito pode perder detalhes, e por mesclar amostras vizinhas nesse mesmo grid de baixa resolução, pode gerar uma suavização exagerada. Por isso, é mais útil usá-la em superfícies planas. Superfícies não planas, muito detalhadas ou que usem bump não ficarão bem com interpolação. Outra coisa: como o grid usa o espaço da tela, animações de câmera não são recomendadas, pois isso pode revelar a existência do grid na imagem.

Existem 6 valores possíveis para o Grid Density:

  • 2 (double) = resolução do grid é o dobro do render
  • 1 (same as rendering) = resolução do grid é a mesma do render
  • 1/2 (half resolution) = resolução do grid é a metade do render
  • 1/3 (third resolution) = resolução do grid é um terço do render
  • 1/4 (quarter resolution) = resolução do grid é um quarto do render
  • 1/5 (fifth resolution) = resolução do grid é um quinto do render

Abaixo, seguem imagens comparando diferentes valores para Grid Density:

reflectioninterpolation_griddensity

Abaixo, seguem imagens comparando diferentes valores para Reflection Samples

reflectioninterpolation_samples

A reflexão real, tende a desfocar com a distância da imagem. Logo, a imagem que está perto do objeto é mais nítida. Observe que usando a interpolação, toda a imagem refletida fica desfocada. Para corrigir isso, existe o atributo Use High Detail Distance:

reflectioninterpolation_highdetail

Refraction Interpolation

Usado para simular transparência leitosa economizando tempo de render. Quanto maior o valor de Refraction Samples, mais suave é o efeito e mais rápido será o render.

reflectioninterpolation_refraction

Bump e Round Corner

O parâmetro bump aceita um shader que perturba as Normais para criar a ilusão de relevo. Você pode usar uma imagem em tons de cinza, uma textura procedural, também em tons de cinza, ou uma imagem no formato Normal Map.

Quando a opção No Diffuse Bump (“Turn Off Bumps for Diffuse Only”, no Softimage. “Do not apply bumps to the diffuse shading”, no 3ds Max) estiver desabilitado, o bump é aplicado em todos os componentes do material (diffuse, highlights, reflections, refractions… ). Quando estiver habilitado, o bump é aplicado em todos os componentes, exceto o diffuse. Ou seja, o efeito do relevo é visto nas reflexões, refrações, highlights, etc, porém, não será visto onde somente for mostrado o componente difuso. É como se o material fosse liso, porém coberto com uma camada de laca ou verniz.

No Maya e Softimage, existem dois tipos de bump: Standard Bump e Overall BumpOverall Bump sempre aplica o bump nos componentes diffuse e specular, mesmo que a opção No Diffuse Bump estiver habilitada. O propósito do Overall Bump é permitir que se conecte o shader mia_roundcorners, enquanto o bump normal é conectado no Standard Bump. Dessa forma, o efeito do mia_roundcorners é aplicado tanto no componente diffuse quanto no specular. Ou seja, você pode conectar uma textura no Standard Bump para gerar o relevo e o mia_roundcorner no Overall Bump para, ao mesmo tempo, ter as quinas do objeto arredondadas.

Nos testes de bump abaixo, foi usada um Noise (textura procedural) para criar o relevo:

bump

roundcorner

Specular Balance, Cutout e Additional Color

specularbalancecutoutadditionalcolor

Specular Balance controla a intensidade do componente specular do material. Lembrando que o specular é o reflexo da fonte de luz. No exemplo abaixo, os testes foram feitos com uma Spot Light, não area, que gera brilho circular.

specularbalance

Com o Cutout Opacity, é possível criar recortes no objeto usando imagens bitmaps em preto e branco ou procedurais. Onde for preto, não haverá geometria. Onde for branco, a geometria será mostrada 100%. Tons de cinza irão mostrar a geometria com menos ou mais intensidade. O teste abaixo foi feito usando o Checker, uma textura procedural xadrez:

cutoutopacity

O campo Additional Color permite criar o efeito de material aceso, como uma lâmpada. Se o Final Gather estiver ligado, o material emite luz de verdade. No Maya e Softimage, basta escolher uma cor e o efeito será reproduzido. No 3ds Max, o melhor é habilitar o Self Illumination (Glow), no grupo Self Illumination. Eu recomendo, no Maya e Softimage, conectar na porta Additional Color o shader mia_light_surface para ter mais controle sobre a incandescência. No campo Color do mia_light_surface, pode-se conectar o shader mib_blackbody e escolher entre as faixas de core na escala Kelvin (Temperatura de cor):

additionalcolor