Pergunta

Eu estava estudando o ruído de Perlin através de alguns exemplos @ http://dindinx.net/opengl/index.php?menu=exemples&submenu=shaders e não pôde deixar de notar que ele make3DNoiseTexture() dentro perlin.c usos noise3(ni) ao invés de PerlinNoise3D(...)

Agora, por que isso? O ruído de Perlin não deveria ser um somatório de diferentes frequências de ruído e amplitudes?

Qestion 2 é o que faz ni, inci, incj, inck apoiar? Por que usar ni em vez de x, y coordenadas? Por que é ni incrementado com
ni[0]+=inci;
inci = 1.0 / (Noise3DTexSize / frequency);
Vejo Hugo Elias criou seu perlin2d com coordenadas X, Y, e o Perlinnoise3D (...).

Desde já, obrigado :)

Foi útil?

Solução

Agora entendo o porquê e vou responder minha própria pergunta na esperança de que isso ajude outras pessoas.

O ruído de Perlin é na verdade uma síntese de ruídos de gradiente. Em seu processo de produção, devemos calcular o produto DOT de um vetor apontando de um dos cantos pisando o ponto de entrada para o próprio ponto de entrada com o vetor de gradiente gerado aleatório.

Agora, se o ponto de entrada fosse um número inteiro, como as coordenadas XYZ de uma textura que você deseja criar, o produto DOT sempre retornaria 0, o que lhe daria um ruído plano. Então, em vez disso, usamos inci, incj, inck como um índice alternativo. Sim, apenas um índice, nada mais.

Agora retornando à pergunta 1, existem dois métodos para implementar o ruído de Perlin:
1.Calcular os valores de ruído separadamente e armazená -los nos slots RGBA na textura
2.Synthesize os ruídos anteriores e armazenam-os em um dos slots RGBA na textura

noise3(ni) é a implementação real do método 1, enquanto PerlinNoise3D(...) sugere o último.

Na minha opinião pessoal, o método 1 é muito melhor porque você tem muito mais flexibilidade sobre como usa cada oitava em seus shaders.

Outras dicas

Meu palpite sobre o motivo de usar noise3(ni) dentro make3DNoiseTexture() Em vez disso, se PerlinNoise3D(...) é que quando você usa essa textura de ruído no seu shader, deseja poder replicar e modificar a funcionalidade de PerlinNoise3D(...) diretamente no shader.

Meu palpite pelo raciocínio por trás ni, inci, incj, inck é que o uso diretamente x, y, z do volume não dê um bom resultado; portanto, escalando o ruído com a frequência, em vez disso, é possível ajustar a resolução do ruído independentemente do tamanho do volume.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top