Terrasses des montagnes

10

Je cherche à reproduire un effet de terrain procédural que j'ai trouvé sur un site portfolio / blog il y a quelques jours.

Terrain en terrasses

Citant le site, le terrassement a été généré par «la multiplication [de la hauteur finale] par une certaine valeur d'amortissement dans une certaine plage de hauteur, pour créer de magnifiques caractéristiques du canyon».

Je me demandais, quelqu'un pourrait-il fournir un exemple ou une procédure plus technique pour procéder à ce sujet? Au cours de la semaine dernière, j'ai beaucoup étudié et étudié les méthodes et pratiques procédurales de terrain / texture, mais je n'ai encore rien trouvé qui explique en détail ce qu'est le `` serrage '', et je commence à être frustré.

Judicieusement
la source
Huh, c'est vraiment bien. Je ne peux pas comprendre ce qu'il veut dire non plus. Avez-vous essayé d'envoyer un e-mail au mec (il est disponible sous "contact")?
Draco18s ne fait plus confiance au SE
FYI: Dans votre citation et source, le terme est «amortissement», mais plus tard dans votre question, vous utilisez plutôt le «serrage».
Pikalek

Réponses:

11

Je ne sais pas ce que fait leur projet mais vous pouvez appliquer une fonction de remodelage à la hauteur. Voici un exemple qui prend hde 0,0 à 1,0 et renvoie une nouvelle hauteur de 0,0 à 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;
}

C'est une fonction qui ressemble à ceci lorsqu'elle est tracée - l'axe x est la hauteur d'origine et l'axe y est la nouvelle hauteur:

Fonction de remodelage de la hauteur

Je l'ai appliqué à mon propre code et j'ai obtenu ceci:

Sortie de la fonction de terrassement

Vous pouvez ajouter n'importe quelle sorte de fonction de remodelage ou les enchaîner pour obtenir des effets soignés. Vous obtenez des terrasses lorsqu'il y a des sections plates de la sortie.

amitp
la source
Je jure qu'il y a un chemin lisse dans la question du demandeur qui monte sur une terrasse, mais en le regardant à nouveau, je suis presque sûr que c'est une illusion. Mais mes yeux insistent toujours sur le fait que non, il y a un changement de hauteur (centre de l'image vers le coin supérieur / bord supérieur gauche). S'il n'y a pas d'augmentation, cette réponse est correcte.
Draco18s ne fait plus confiance au SE
1

L'amortissement est un terme physique pour une influence à l'intérieur ou sur un système oscillatoire qui a pour effet de réduire, de restreindre ou d'empêcher ses oscillations.

Je soupçonne que votre article source pourrait avoir une faute de frappe et signifier un serrage , ce qui fait généralement référence à la restriction d'une valeur à une plage donnée.

En ce qui concerne l'effet visuel, vous pourriez être en mesure d'obtenir quelque chose de similaire en bloquant des bandes de bruit pendant la construction du terrain, mais la solution proposée par @amitp correspond plus étroitement à la description d'origine et est probablement plus facile à mettre en œuvre et à régler.

Une troisième option pourrait être d'utiliser des techniques d'érosion. En voici un pour créer une combinaison falaise et plage en laissant tomber une section de terrain en pente. En voici un autre qui peut éroder les pics en plateaux .

Pikalek
la source
0

Après une très longue pause, je comprends maintenant comment l'effet a été obtenu, et c'est incroyablement simple. Il y a 4 parties à cet effet:

  • La hauteur initiale du terrain
  • Définition d'une «plage» de terrasse, la hauteur la plus basse de la terrasse étant h1 et la hauteur la plus élevée de la terrasse étant h2
  • Une valeur d'amortissement qui aplatit le sol dans la plage de hauteur de terrasse
  • Une deuxième carte de hauteur à plus longue portée pour modifier les valeurs h1 et h2, qui est la façon dont les rampes continues entre les terrasses sont formées (une troisième carte de hauteur pourrait être utilisée pour augmenter ou diminuer h1 et h2 indépendamment l'une de l'autre, créant des terrasses plus ou moins grandes)

Voici la procédure pour créer l'effet:

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

(th, bien sûr, est la hauteur du terrain après l'application de l'effet de terrassement)

Judicieusement
la source