Madeira e mármore
Faixas ou anéis periódicos, entortados por ruído para vagar como veios de madeira e de pedra.
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ídoUma função pseudoaleatória e suave da posição. Valores ou gradientes aleatórios ficam numa grade e são misturados entre os pontos, então pontos próximos recebem valores parecidos e o resultado não tem padrão visível. Ruído Uma função pseudoaleatória e suave da posição. Valores ou gradientes aleatórios ficam numa grade e são misturados entre os pontos, então pontos próximos recebem valores parecidos e o resultado não tem padrão visível.
Dois tipos de repetição
- Anéis se repetem com a distância até um eixo:
fract(length(p.xz) * density)recomeça a cada1 / densityunidades 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 é fBmUma camada de ruído numa soma fractal. Cada oitava costuma ter o dobro da frequência e metade da amplitude da anterior, acrescentando detalhes mais finos e mais fracos. Oitava Uma camada de ruído numa soma fractal. Cada oitava costuma ter o dobro da frequência e metade da amplitude da anterior, acrescentando detalhes mais finos e mais fracos.fbm(p) = Σ gainᵏ · noise(lacunarityᵏ · p), 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 UVsUma posição 2D numa superfície ou na tela, em geral de 0 a 1 nos dois eixos. Shaders desenham formas e padrões como funções dela. Coordenadas UV Uma posição 2D numa superfície ou na tela, em geral de 0 a 1 nos dois eixos. Shaders desenham formas e padrões como funções dela.uv = gl_FragCoord.xy / resolution
Leitura complementar
- Fractal Brownian Motion (abre em uma nova aba)Livro
- fBM (abre em uma nova aba)Artigo
- Fractional Brownian motion (abre em uma nova aba)Referência
- Improving Noise (abre em uma nova aba)Paper
- Perlin noise (abre em uma nova aba)Referência
- Simplex noise (abre em uma nova aba)Referência
- sin (abre em uma nova aba)Referência
- Sine wave (abre em uma nova aba)Referência
- Shaping functions (abre em uma nova aba)Livro
- atan (abre em uma nova aba)Referência
- Polar coordinate system (abre em uma nova aba)Referência
- Shapes (abre em uma nova aba)Livro
- Wood (abre em uma nova aba)Referência
- MurmurHash (abre em uma nova aba)Referência
- Hash Functions for GPU Rendering (abre em uma nova aba)Paper
- Wave Texture Node (abre em uma nova aba)Documentação
- NoiseTexture3D (abre em uma nova aba)Referência
- length (abre em uma nova aba)Referência
- fract (abre em uma nova aba)Referência
- pow (abre em uma nova aba)Referência
- mix (abre em uma nova aba)Referência