Pular para o conteúdo
Materiais · TécnicaIntermediário

Madeira e mármore

Faixas ou anéis periódicos, entortados por ruído para vagar como veios de madeira e de pedra.

PosiçãoUVSuperfície

Cards

Um exemplo ao vivo para ajustar, aprender e copiar.

Como funciona

Madeira, mármore e ágata não se parecem em nada, mas o shader monta os três do mesmo jeito: um padrão que se repete ao longo de uma direção, empurrado para lá e para cá por ruído. A repetição perfeita parece uma listra impressa; é o ruído que faz parecer algo que cresceu ou se formou. Cada material muda só três coisas: ao longo do que a repetição é medida, que forma cada repetição tem e com que força o ruído empurra.

Dois tipos de repetição

  • Anéis se repetem com a distância até um eixo: fract(length(p.xz) * density) recomeça a cada 1 / density unidades a partir do eixo y, que é a ideia polar de medir pela distância até um centro. São os anéis de crescimento de uma árvore: um anel por ano em volta do tronco.
  • Faixas se repetem ao longo de uma coordenada: sin(p.x * frequency) faz listras paralelas, as camadas de sedimento do arenito ou os veios do mármore antes de serem entortados.

A forma da repetição decide o material. fract dá um dente de serra, claro numa ponta de cada repetição e escuro na outra, o que combina com a madeira: o anel de cada ano começa pálido na primavera e escurece até o crescimento parar. sin dá faixas suaves e simétricas. Passar qualquer um dos dois por uma potência ou por smoothstep deixa a borda mais dura ou mais suave.

Entortando

Some ruído ao valor antes de ele se repetir, fract((radius + noise(p) * strength) * density), e cada anel é empurrado um pouco para dentro ou para fora, por uma quantidade que muda suavemente de um lugar para outro. Anéis vizinhos se movem juntos, porque o ruído em pontos próximos é parecido, então os anéis ondulam sem se cruzar. Essa única mudança transforma o padrão de um alvo num tronco.

Quanto detalhe esse empurrão carrega é o que separa os materiais. A madeira precisa de uma só oitava de ruído gradiente, esticada ao longo do tronco para que os anéis vaguem devagar árvore acima. O mármore precisa de várias: os veios dele são dobrados em todas as escalas, então o empurrão é fBm, várias oitavas somadas, e o resultado vira linhas finas e escuras com algo como 1.0 - abs(sin(x)).

Numa malha

Alimente o padrão com a posição da superfície em espaço de mundo ou de objeto, em vez das UVs, e ele vira sólido: os anéis atravessam o volume, então cada face da malha mostra o corte que você veria num bloco entalhado, o topo do tronco nas faces que o cortam transversalmente e listras longas ao longo dele, sem costuras e sem desdobrar UVs. Com UVs, o mesmo código funciona num quad, num painel de interface ou num decalque de terreno. O nó Wave Texture do Blender faz isso de forma nativa, com faixas ou anéis, perfil em dente de serra ou senoide e distorção por ruído com o próprio ajuste de detalhe; escrever à mão é o que permite moldar cada anel e levar o efeito para engines que não têm um nó assim.

Leitura complementar