PIZiadas gráficos

PIZiadas gráficos

Meu mundo está dentro.

Perlin Noise: Funções pseudoaleatorias para geração de terrenos

A criação de ambientes virtuais requer a modelagem de grandes quantidades de dados de treinamento para diferentes cenários recriar superfícies. A natureza fractal do nosso mundo permite o uso de várias funções matemáticas para a automatização das tarefas. Árvores, terra, Nuvens, incêndio, etc. são construídos utilizando diversas técnicas com base na auto-similaridade, famílias com base complexo fractal. As funções que geram o chamado "ruído Perlin" aplicam-se, nestes casos.

expedição

Vamos analisar o conceito aplicado em uma dimensão, a sua generalização a duas dimensões (terra) é imediata, e não fornece nenhum interesse didático inicial.

Funções de ruído: "Funções de ruído (NF)"

O FN é essencialmente um gerador de números pseudo-aleatório tem a propriedade de produzir o mesmo número de um valor de entrada, ou "sementes" determinada.
Qualquer função, como y = cos(x) retorna sempre o mesmo valor de "y" para um determinado valor de "x".

senoide

Se usar esta função para gerar um modelo geométrico, nós re-obter o mesmo modelo mais tarde o uso de variáveis ​​idênticas. No entanto, a função não pode ser usado na representação de um perfil de dunas ou montanhas, porque tem uma repetição periódica, um padrão, naturalidade que subtrai. Dunas do deserto se assemelham, mas não são idênticos.

chão

Um padrão repetitivo resta credibilidade a um cenário. Um padrão pseudo pode criar um perfil, onde você não identificar repetições.

pseudoaleatoria

A função aleatória não é controlável que você não pode restaurar ou recuperar os valores anteriores, pois cada vez que retornar valores diferentes.

racionalVsPseudoaleatoria

Uma "função perlin" para misturar a vantagem de o aleatório (ruído) com o controle de uma função convencional. Outros valores intermediários podem ser obtidos entre os dois valores indicados, dando continuidade, portanto, estas funções. Se aumentarmos a escala de representação precisa obter estes pontos no meio para manter a resolução das imagens geradas. Se fizermos uma representação em diferentes níveis de técnicas de LOD detalhes, Estes aspectos estão entre os mais importantes.

Finalmente, é necessária para facilitar a curva obtida para evitar "picos" e "vales" geralmente muito pronunciados e geralmente indesejável irrealista.
Para obter imagens em diferentes escalas é necessária para manter a resolução dos mesmos adicionando novos pontos. A função deve permitir que esta operação para assegurar uma representação razoável qualidade.

perlinSuavizado

Cada função "ruído Perlin" gerada por dados diferentes que podem se adaptar melhor ou pior que a criação do modelo desejado. Este é um campo de pesquisa atualmente profunda exploração.
En [1] propõe a utilização de um gerador de número psudoaleatorio, baseada no uso de primes, que retorna um número no intervalo [-1,1] para cada valor inteiro que é fornecido.

função Noise (32-bit inteiro: x)

x = (x<<13) ^ X

A = 15731

B = 789221

C = 1376312589
voltar ( 1.0 – ( (x * (x * x * A B) +C) &7fffffff) / 1073741824.0)função Noise final

Função "Noise"

Os três primeiros números são primos. Você pode experimentar com diferentes valores para gerar novas curvas. A utilização das três variáveis (A, B a C) foi feita por clareza de expressão.

O código tem duas linhas principais.

Primeiro "sacudir" o valor de entrada de uma maneira controlada com o deslocamento com os seus bits

x = (x<<13) ^ X

Para gerar o número no intervalo acima [-1,1] usar o valor de sua extremidade superior (1) e subtrair um valor de [0,2].

A obtenção de um valor de subtracção é feita por meio da determinação de um valor novo por intermédio do uso de primes mencionados.

x * ( x * x * A + B) + C

O número gerado deve ser positiva, por que a lógica que você mascarar você colocar o seu primeiro bit a zero (positivo)

&7fffffff

Se dividirmos este último resultado obteria um valor máximo inteiro entre zero e um, por lo que se divide por MaxEntero / 2 = 230

Oitavas

Para compor a função final acrescenta o "Noise" com outro "similar" dobra cujas freqüências são correspondentemente.

A frequência é o inverso do comprimento de onda F = 1 / L, dada noção de periodicidade da onda

freqüência

Enquanto a amplitude nos dá o tamanho (nossa altura de onda)

largura

Cada uma destas funções de duplicação da frequência anterior, de forma semelhante ao espaçamento igual entre duas notas consecutivas de um piano, chamada de "oitava".

A função e sua primeira oitava pode compor uma nova função
A função pseudo-aleatório e sua oitava adicionado

A função pseudo-aleatório e oitavas somados
Você pode adicionar os harmônicos da própria função ou fazer um mix de funções similares, adicionar mais diversidade na criação de muitas oitavas cornering.The incorporar escala add detalhes progressiva. Um maior número de oitavas maior complexidade na curva obtida, permitindo simular penhascos íngremes.

1
2
3
4
5
6
7
8
9

O factor de persistência indica a incidência ou o peso de harmónicas, adicionar um ponto de controle na curva de suavidade.

Persistência acrescentou altos valores de maior mudança ao longo da curva.

Ao reduzir o valor da persistência, a influência das oitavas não geram formas nítidas.

Para uma determinada frequência é uma amplitude única para cada valor da persistência, chamamos “Amplitude de cada freqüência”

Mandelbrot define el ruido, “Ruído”, como “Alta freqüência baixa persistência”

O processo de cálculo é realizado em várias etapas.

Primeiro vamos determinar a função geradora de ruído, Como explicado:

Os valores intermédios entre dois pontos pode ser obtido por interpolação linear, quadrático, etc cúbico.

Em seguida, é “amolece” depois da função de interpolação:

E integrar o conjunto, acoplamento a função somando componentes harmônicas:

[1] Página perlin ruído pseudocódigo explicativo. Esta página é a implementação de referência principal apresentada neste trabalho. "http://freespace.virgin.net / hugo.elias / Noise.htm Perlin"