Террасивные горные сооружения

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

 Terraced terrain

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

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

10 голосов | спросил Juddily 5 FebruaryEurope/MoscowbFri, 05 Feb 2016 21:44:23 +0300000000pmFri, 05 Feb 2016 21:44:23 +030016 2016, 21:44:23

3 ответа


0

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

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

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

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

ответил Juddily 3 +03002016-10-03T10:40:13+03:00312016bEurope/MoscowMon, 03 Oct 2016 10:40:13 +0300 2016, 10:40:13
12

Я не знаю, что делает их проект, но вы можете применить функцию перестройки к высоте. Вот пример, который принимает 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 6 FebruaryEurope/MoscowbSat, 06 Feb 2016 06:30:05 +0300000000amSat, 06 Feb 2016 06:30:05 +030016 2016, 06:30:05
1

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

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

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

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

ответил Pikalek 7 FebruaryEurope/MoscowbSun, 07 Feb 2016 19:17:32 +0300000000pmSun, 07 Feb 2016 19:17:32 +030016 2016, 19:17:32

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132