Eu tenho uma pequena pergunta: Existe algum código ou amostra que mostra como o ruído simplex funciona? Não consigo encontrar nada sobre isso ... Como devo implementá-lo, sem o conhecimento de como o algoritmo funciona? ...
A outra pergunta é: o ruído simplex é um bom algoritmo para a geração de ilhas? Preciso de ilhas enormes (realmente enormes), com diferentes camadas (areia, areia, pedra) e diferenças de altura claramente visíveis, com bordas suaves, para que você possa sair / entrar na água sem pular superfícies irregulares.
xna
3d
procedural-generation
terrain
SharpShade
fonte
fonte
Respostas:
Meu gerador de ruído em C #, com base nisso :
Não é comentado, mas as partes principais:
A semente é um valor usado para torná-la aleatória - para que você não gere a mesma coisa sempre. Aqui eu coloquei no NoiseGenerator.
Amplitude, Frequência, Persistência e Oitavas são explicadas no artigo - elas afetam basicamente a aparência do ruído resultante.
NoiseGenerator
A função é literalmente um PRNG - digite uma entrada e gera um número aleatório com isso como uma semente.Noise
é o que você chama para obter um valor de ruído. Eu descobri que os valores estavam em torno de -2,4 a 2,4 (na verdade, cerca de 2.40032483 ou algo assim, eles são fixados) e eu os corrigi para o dobro-1 and 1
.Eu não tive nenhum problema de velocidade com isso. Eu estava renderizando uma grade de 400 x 400 de sprites 1x1 com valores definidos por isso e estava obtendo apenas um pequeno atraso (e isso estava recalculando o ruído a cada quadro).
Para a geração de ilhas, confira esta pergunta - em particular, esse link é quase exatamente o que você deseja, embora no AS3.
fonte
Ok, obrigado a todos pela ajuda :)
2 dias atrás eu encontrei "Libnoise" e uma boa porta C #. Vou pegar esse aqui, porque tem um renderizador que renderiza mapas de altura mais suaves :)
fonte
Se você ainda não o encontrou, o Simplex Noise Demystified de Stefan Gustavson é uma boa explicação de como o algoritmo funciona.
fonte