Террасные горы

10

Я пытаюсь воспроизвести эффект процедурного ландшафта, который я нашел на сайте портфолио / блога несколько дней назад.

Террасная местность

Цитируя сайт, террасирование было сгенерировано путем «умножения [конечной высоты] на некоторое значение демпфирования в пределах определенного диапазона высот, чтобы создать красивые особенности каньона».

Мне было интересно, кто-нибудь сможет привести более технический пример или процедуру для этого? За прошедшую неделю я много изучал и изучал процедурные методы и методы рельефа / текстуры, но до сих пор не нашел ничего, что бы подробно объясняло, что такое «зажим», и я начинаю разочаровываться.

Juddily
источник
Да, это действительно здорово. Я не могу понять, что он имеет в виду. Вы пытались отправить чуваку электронное письмо (оно доступно в разделе «контакт»)?
Draco18s больше не доверяет SE
К вашему сведению: в вашей цитате и источнике термин «демпфирование», но позже в вашем вопросе вы используете вместо него «зажим».
Пикалек

Ответы:

11

Я не знаю, что делает их проект, но вы можете применить функцию изменения формы к высоте. Вот пример, который принимает hот 0,0 до 1,0 и возвращает новую высоту от 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;
}

Это функция, которая выглядит следующим образом при построении графика - ось x является исходной высотой, а ось y - новой высотой:

Функция изменения высоты

Я применил это к своему собственному коду и получил это:

Выход функции террасирования

Вы можете добавить любую функцию изменения формы или объединить их в цепочку, чтобы получить четкие эффекты. Вы получаете террасы, когда есть плоские участки выхода.

amitp
источник
Клянусь, в вопросе Аскера есть плавный путь, который поднимается на террасу, но, глядя на него снова, я почти уверен, что это иллюзия. Но мои глаза все еще настаивают, что нет, там есть изменение высоты (центр изображения к верхнему углу / верхнему левому краю). Если подъема нет, тогда этот ответ правильный.
Draco18s больше не доверяет SE
1

Демпфирование - это физический термин, обозначающий влияние внутри или на колебательную систему, которая уменьшает, ограничивает или предотвращает ее колебания.

Я подозреваю , что ваш источник статьи , возможно, опечатка и означали зажим , который обычно относится к ограничению значения в заданном диапазоне.

Что касается достижения визуального эффекта, вы можете получить что-то похожее, зажимая полосы шума при построении ландшафта, но решение, данное @amitp, более точно соответствует исходному описанию и, вероятно, проще в реализации и настройке.

Третьим вариантом может быть использование методов эрозии. Вот один для создания комбинации скалы и пляжа , опуская часть наклонной земли. Вот еще один, который может разрушить пики в плато .

Pikalek
источник
0

После очень долгого перерыва я теперь понимаю, как был достигнут эффект, и это невероятно просто. Есть 4 части на этот счет:

  • Начальная карта высот местности
  • Определение «диапазона» террасы, при этом самая низкая высота террасы равна h1, а самая высокая высота террасы равна h2.
  • Значение демпфирования, которое выравнивает землю в пределах высоты террасы
  • Вторая карта высот с большим диапазоном для изменения значений h1 и h2, которая формирует непрерывные рампы между террасами (третья карта высот может использоваться для увеличения или уменьшения h1 и h2 независимо от друг друга, создавая большие или меньшие террасы)

Вот процедура для создания эффекта:

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, конечно, высота ландшафта после применения эффекта Terracing)

Juddily
источник