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âmetro | O que faz | Valor típico |
|---|---|---|
| lacunaridade | quanto a frequência multiplica a cada oitava | 2 (cada oitava tem detalhe duas vezes menor) |
| persistência | quanto a amplitude multiplica a cada oitava | 0,5 (cada oitava pesa metade da anterior) |
| oitavas | quantas camadas somar | 3 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.