3. Oitavas: somando camadas de detalhe

Um ruído sozinho é liso demais. Vários, somados, viram montanha.

Uma única chamada de Perlin produz manchas de um só tamanho. Terreno real tem colinas grandes com pedras pequenas em cima. A solução é somar várias cópias do ruído, cada uma com frequência maior e amplitude menor que a anterior. Cada cópia é uma oitava. A soma se chama fBm (fractional Brownian motion).

soma (fBm)
perfil 1D da linha do meio: cada oitava e a soma

Os dois botões novos

ParâmetroO que fazValor típico
lacunaridadequanto a frequência multiplica a cada oitava2 (cada oitava tem detalhe duas vezes menor)
persistênciaquanto a amplitude multiplica a cada oitava0,5 (cada oitava pesa metade da anterior)
oitavasquantas camadas somar3 a 6; acima disso o detalhe fica menor que um pixel
A faixa cresce. Somando oitavas com amplitudes 1 + 0,5 + 0,25 + … a soma pode chegar perto de 2. Se você usar isso direto como altura ou como cor, estoura. Divida pela soma das amplitudes (maxAmp) para voltar a −1..1, ou normalize pelo mín e máx observados no mapa (é o que o Sebastian Lague faz com InverseLerp). O painel mostra o maxAmp atual.
Custo. Cada oitava é uma chamada completa de Perlin. 6 oitavas em um chunk de 100×100 são 60 mil chamadas. Ainda é barato, mas some isso com 9 chunks e uma regeneração por segundo e começa a pesar. Gere em thread separada, ou gere uma vez e guarde.