Na semana passada, publiquei um vídeo onde mostrei como mapear um Color Ramp ao longo do eixo Z de um objeto, tanto no modo local quanto global, para criar um gradiente ao longo da altura do objeto.



Transcrição do vídeo

Olá a todos! Na semana passada, publiquei um vídeo onde mostrei como mapear um Color Ramp ao longo do eixo Z de um objeto, tanto no modo local quanto global, para criar um gradiente ao longo da altura do objeto.

Neste tutorial, vou expandir o conceito de mapeamento baseado em eixo para criar tanto um gradiente de cor quanto uma mistura entre dois Shaders. O exemplo concreto será uma barra de progresso colorida, mas os métodos mostrados podem ser aplicados em outros contextos também. Especificamente, ao mover o Empty de controle na horizontal, veremos a barra progredir, colorida com um gradiente que vai do vermelho ao verde, passando pelo amarelo.

Primeiro, vou mostrar como está configurada a cena inicial. Temos um objeto Plane que foi escalado para esticá-lo um pouco ao longo do eixo X. Por conveniência, coloquei o Origin do objeto no canto superior esquerdo. Também apliquei as transformações de rotação e escala nesse objeto. Esse Plane não será mais modificado.

O outro objeto na cena é um Empty, posicionado no mesmo ponto do Origin do Plane, e que também teve suas transformações de rotação e escala aplicadas. Esse Empty vai controlar o progresso da barra, que será implementado inteiramente através do Material do Plane, sem modificar a geometria do Plane.

O Material do Plane precisa ter duas funções. Primeiro, precisamos definir o gradiente ao longo do eixo X do Plane. Depois disso, vamos garantir que todas as partes à direita do Empty fiquem transparentes, enquanto todas as partes à esquerda fiquem coloridas com o gradiente que definimos.

Vamos começar com o gradiente de cor ao longo de todo o objeto. Como no tutorial da semana passada, precisamos de um node Texture Coordinate, um node Separate XYZ e um node Color Ramp, conectados em sequência.

Usamos a saída Generated do node Texture Coordinate, já que estamos interessados nas dimensões do próprio Plane. Do node Separate XYZ, usamos a saída X, que representa o eixo horizontal local do Plane.

O Color Ramp agora deve ser conectado a um node Emission, porque queremos que o Material esteja sempre visível e não seja afetado pela iluminação. Então, substituímos o node Principled padrão por um node Emission.

Agora o Color Ramp pode ser personalizado como quiser. No meu caso, coloco um marcador vermelho à esquerda, um amarelo no centro e um verde à direita, usando interpolação Ease, para que o vermelho e o verde não fiquem limitados apenas aos extremos.

Para colorir apenas a parte à esquerda do Empty e deixar o lado direito transparente, primeiro precisamos adicionar dois nodes Shader no editor. Especificamente, um node Transparent e um node Mix Shader. Atenção para escolher o node Mix Shader, não o node Color Mix.

Em seguida, conecte o node Emission à primeira entrada Shader do node Mix Shader. Conecte o node Transparent, que deve estar totalmente branco, à segunda entrada Shader do node Mix Shader.

Conecte a saída do node Mix Shader à entrada Surface do node Material Output. Neste ponto, temos um Material semi-transparente com um gradiente que vai do vermelho ao verde, passando pelo amarelo.

Em um node Mix, seja ele de cor ou Shader, a segunda entrada só é usada totalmente quando o valor de Factor é 1. Então precisamos de uma forma de fazer com que esse Factor seja igual a 1 no lado direito da posição do Empty.

Para isso, adicione um node Texture Coordinate e um node Separate XYZ ao editor, e conecte a saída X do node Separate XYZ à entrada Factor do node Mix Shader.

Desta vez, no entanto, usamos a saída Object do node Texture Coordinate e especificamos o Empty no campo Object do node.

Agora o Material ficará transparente à direita do Empty e colorido à esquerda, como planejado. No entanto, podemos ver que o Material continua semi-transparente muito além da posição do Empty.

Para fazer com que a transição para o node Emission ocorra de forma brusca exatamente na posição do Empty, inserimos um node Math entre o Separate X e o node Mix Shader, configurado para o modo Greater Than, com o valor Threshold igual a 0.

Dessa forma, o node Greater Than usará a coordenada X do Empty e retornará 1 para todos os valores maiores que essa coordenada. O node Mix Shader então mudará bruscamente para o segundo Shader, ou seja, o node Transparent.

Por fim, podemos tornar o Empty filho do Plane. Assim, poderemos mover o Plane livremente pela cena, com o Empty o acompanhando, mas ainda seremos capazes de mover e animar o Empty separadamente.

Isso é tudo para este tutorial! Até breve!

Pesquisar nos Tutoriais

Digite uma frase ou várias palavras-chave separadas por vírgulas para pesquisar.

Este é um site pessoal e não constitui um canal de vendas. As páginas dedicadas aos modelos 3D documentam uma seleção dos meus trabalhos e não contêm ofertas, preços, formas de compra nem links comerciais. No momento, não aceito solicitações de trabalhos personalizados, consultorias ou outras colaborações profissionais.


INFORMAÇÕES DE POLÍTICA DE PRIVACIDADE AVANÇADAS E USO DOS FICHEIROS DE COOKIES