Одна функція шуму, стовпчиком на собі
Реальні ландшафти виглядають грубо на кожному рівні одночасно: континентні збурення, пагорби та великі камені. Одна гладка функція шуму не може цього зробити — вона виглядає як туман, що ковзає. Виправлення – фрактальна бруттоавійна рух (fBm) – майже занадто просте, щоб повірити: візьміть гладку функцію шуму, відтворіть її кілька разів з подвоєною частотою та зменшеним амплітудою, і додайте результати разом.
height(x, y) = Σ amplitude^i · noise(frequency^i · x, frequency^i · y) для i = 0..octaves типова: frequency = 2 (назване "lacunarity") amplitude = 0.5 (назване "persistence" або "gain") кожна додана октава називається октавою. Перша октава (низька частота, висока амплітуда) укладає континенти та гори; наступна октава додає пагорби з подвоєною частотою та напівогоркою; подальші октави додають схили, потім каміння, потім текстуру на рівні каменів, кожна з яких вносить менше, ніж попередня. П'ять або шість октав зазвичай достатньо, щоб обдурити око, бачачи ландшафт із деталями на кожному рівні, тому що це справді поведінка спектру потужності реального рельєфу — добре відомий результат у геоморфології полягає в тому, що природний рельєф висоти приблизно слідує за законом степеня близьким до закону фрактальної бруттоавійної рух.
height(x, y) = Σ amplitude^i · noise(frequency^i · x, frequency^i · y) for i = 0..octaves
typical: frequency = 2 (called "lacunarity")
amplitude = 0.5 (called "persistence" or "gain")
Noise Generation
The base noise is usually Perlin noise (Ken Perlin, 1983 — originally built for the movie Tron) or its faster cousin Simplex noise. Both work by scattering pseudo-random gradient vectors on a lattice and smoothly interpolating between them, which produces noise that is continuous and differentiable — no sharp jumps — unlike naive per-pixel random numbers, which look like static rather than terrain.
Erosion: the step that makes it believable
Raw fBm terrain looks like noise wearing a landscape costume — technically fractal, but geologically implausible, because it never accounts for the fact that water moves material downhill. Hydraulic erosion simulation fixes this by tracking simulated rain droplets: each droplet picks up sediment proportional to its speed and the slope beneath it, carries that sediment downhill, and deposits it wherever the droplet slows down — at the base of a slope, in a natural basin, at the edge of a lake. Run thousands of droplets and ridgelines sharpen, valleys carve themselves out, and sediment naturally piles up into fans and deltas exactly where real rivers would leave it.
for each droplet (thousands): pos = random point on the map while droplet has velocity and is on the map: slope = gradient(heightmap, pos) velocity += slope * gravity capacity = velocity * water_volume if sediment > capacity: deposit the excess else: erode min(capacity - sediment, maxErodeDepth) pos += velocity This is a particle-based erosion model — cheap enough to run thousands of droplets in real time — as opposed to the grid-based shallow-water erosion models used offline in film production, which solve the full fluid equations over the heightmap and are far more expensive but capture braided rivers and standing water more faithfully.
for each droplet (thousands):
pos = random point on the map
while droplet has velocity and is on the map:
slope = gradient(heightmap, pos)
velocity += slope * gravity
capacity = velocity * water_volume
if sediment > capacity: deposit the excess
else: erode min(capacity - sediment, maxErodeDepth)
pos += velocity
Sea level and biomes are just thresholds
Once the heightmap exists, turning it into a recognisable landscape is mostly thresholding. Anything below the chosen sea level renders as ocean; a narrow band just above it becomes beach; biome colouring beyond that typically keys off both elevation and a second, independently generated noise field standing in for moisture or temperature — cold and high becomes rock or snow, warm and wet becomes forest, warm and dry becomes desert. None of this needs new physics: it is the same fBm technique generating a second, uncorrelated map that gets combined with the first.
Пояснення, чому такий самий метод повторюється скрізь
fBm проявляється далеко за межами місцевості: текстури хмар і марблів, поверхні планет, узбережжя та навіть генератори цін на акції використовують ту ж саму техніку багатошарових октав, оскільки одна й та сама статистична сигнатура — самоподібний грубий шар у різних масштабах — збігається з описом величезної кількості природних процесів. Це також пояснює наукову цінність цієї техніки: фундаментальна робота Бенуа Мандельброта про фрактали в 1970-х роках використовувала узбережжя та рельєф як конкретні приклади природних фракталів із вимірюваним фрактальним діапазоном між 1 і 2.
Frequently asked questions
Чому рельєф, згенерований з одного шару шуму, виглядає неправильно?
Один шумовий октав має один характерний розмір «зморшку», тому він виглядає як туман, а не ландшафт — справжній рельєф має деталі на багатьох рівнях одночасно. З'єднання кількох октав шуму з подвоєнням частоти та зменшенням амплітуди (фрактальне бродячий рух) відтворює цю багатошарову шорсткість.
Що саме змінює ерозія у висотному полі?
Симульовані краплі води видаляють матеріал з крутих, швидких ділянок (вирізаючи гребені та западини) і відкладають його там, де вони сповільнюються, наприклад, у долинах та біля основи схилів. Цей один прохід перетворює математично фрактальне, але геологічно неправдоподібне висотне поле на щось, що виглядає так, ніби його дійсно сформували дощі та річки.
Чи є шум Перліна випадковим?
Це псевдовипадковий, але навмисне гладкий: він інтерполює між випадково орієнтованими векторами градієнта, розміщеними на решітці, тому сусідні точки дають подібні значення, і результат не має різких стрибків — на відміну від чистого випадкового шуму піксель за пікселем, який виглядає як статичне зображення телевізора, а не ландшафт.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте Terrain Generator і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію Terrain Generator