Terraços em terraços


10

Estou procurando replicar um efeito procedimental do terreno que encontrei em um portfólio / blog há alguns dias.

Terreno em socalcos

Citando o local, o terraço foi gerado através da "multiplicação [da altura final] por algum valor de amortecimento dentro de uma certa faixa de altura, para criar belos recursos de desfiladeiro".

Eu queria saber, alguém seria capaz de fornecer um exemplo ou procedimento mais técnico para fazer isso? Na semana passada, estive pesquisando e aprendendo muito sobre métodos e práticas de terreno / textura procedimentais, mas ainda não encontrei nada que explique em detalhes o que é 'fixação' e estou começando a ficar frustrado.


Huh, isso é realmente legal. Também não consigo entender o que ele quer dizer. Você já tentou enviar um e-mail para o cara (está disponível em "contato")?
Draco18s não confia mais em

FYI: Na sua citação e fonte, o termo é 'amortecimento', mas mais tarde na sua pergunta, você usa 'fixação'.
Pikalek

Respostas:


11

Não sei o que o projeto deles faz, mas você pode aplicar uma função de remodelagem à altura. Aqui está um exemplo que leva hde 0,0 a 1,0 e retorna uma nova altura de 0,0 a 1,0:

function R(h) {
    var W = 0.4; // width of terracing bands
    var k = Math.floor(h / W);
    var f = (h - k*W) / W;
    var s = Math.min(2 * f, 1.0);
    return (k+s) * W;
}

É uma função que se parece com isso quando plotada - o eixo x é a altura original e o eixo y é a nova altura:

Função de remodelação da altura

Apliquei-o ao meu próprio código e obtive o seguinte:

Saída da função de terraços

Você pode colocar qualquer tipo de função de reformulação, ou encaderná-las, para obter efeitos puros. Você obtém terraços quando há seções planas da saída.


Juro que há um caminho tranqüilo na pergunta do solicitante que sobe a um terraço, mas, olhando de novo, tenho certeza de que é uma ilusão. Mas meus olhos ainda insistem que não, há uma mudança de altura lá (centro da imagem no canto superior / borda superior esquerda). Se não houver aumento, então esta resposta está correta.
Draco18s não confia mais no SE

1

Amortecimento é um termo físico para uma influência dentro ou sobre um sistema oscilatório que tem o efeito de reduzir, restringir ou impedir suas oscilações.

Suspeito que seu artigo de origem possa ter um erro de digitação e ter significado fixação , o que geralmente se refere à restrição de um valor a um determinado intervalo.

Quanto a obter o efeito visual, você poderá obter algo semelhante, restringindo faixas de ruído à medida que o terreno está sendo construído, mas a solução fornecida pelo @amitp corresponde mais à descrição original e provavelmente é mais fácil de implementar e ajustar.

Uma terceira opção pode ser o uso de técnicas de erosão. Aqui está um para criar uma combinação de penhasco e praia , derrubando uma seção de terreno inclinado. Aqui está outro que pode erodir picos em platôs .


0

Depois de uma muito longa pausa, agora eu entendo como o efeito foi conseguido, e é incrivelmente simples. Existem 4 partes para esse efeito:

  • O mapa de altura inicial do terreno
  • Definindo o 'intervalo' de um terraço, sendo a altura mais baixa do terraço h1 e a altura mais alta do terraço sendo h2
  • Um valor de amortecimento que nivela o solo dentro da faixa da altura do terraço
  • Um segundo mapa de altura de maior alcance para modificar os valores h1 e h2, que é como as rampas contínuas entre terraços são formados (um terceiro mapa de altura pode ser usado para aumentar ou diminuir h1 e h2 independentemente um do outro, criando terraços maiores ou menores)

Aqui está o procedimento para criar o efeito:

h1 = 1
h2 = 2
damp = .01

h = gen_noise(position)
hm = heightmod_noise(position)
if h1+hm <= initial_terrain_height =< h2+hm
  th = h * damp
elseif h2+hm < h
  th = h - (h2-h1) * damp
else
  th = h

(é claro, é a altura do terreno após a aplicação do efeito de terraços)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.