Войти
ПрограммированиеФорумГрафика

Расчет водной эрозии почвы

Advanced: Тема повышенной сложности или важная.

#0
22:17, 2 апр. 2011

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

#1
22:35, 2 апр. 2011

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

#2
22:37, 2 апр. 2011

Там еще инерцию надо учитывать.
Еще надо учитывать Что частица может как забирать грунт, так и наоборот оставлять.
И это еще не все параметры, как я понял из выкладок математических.
Плюс моделирование по одной капли рискует быть очень медленным. :(

#3
22:42, 2 апр. 2011

Примерно вот так:
Изображение

#4
23:00, 2 апр. 2011

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

#5
2:35, 3 апр. 2011

Наиболее адекватная реализация, из тех что можно потрогать (читай: посмотреть сорец) - это вот эта штука на мой взгляд.

Идея в принципе простая - берем каплю метров дцать в диаметре и начинаем пускать с горы. Зная нормали в каждой точке не трудно угадать куда капля потечет.
Эмпирически можно подобрать красивую формулу ослабевания потока, отношение кол-ва забираемого грунта к кол-ву оседающего. Это все уже сказали. Разве
что "прибавлять нормаль" не надо, для таких дел есть градиенты :) Капель действительно надо много. Разного размера. Иначе овраги получатся слишком все похожие.

Не понял о какой инерции идет речь. "надо учитывать" - как обычно it depends. Зависит от того, на сколько правдоподобная картинка нужна и на сколько этот
параметр влияет на результат.

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

Качественный фейк, который как-то рыл бы канал, похожий на реальный мир, выдумать конечно можно, но идея с переносом частиц имхо проще. Проще тем что не
надо думать :) Она и так работает как реальный мир. Более-менее.

В тулзе по ссылке заюзано некоторое кол-во хаков чтобы "ручейки" получались не то покрасивше не то побыстрее. Как результат, если скормить этому алгоритму
хейтмапу побольше, чем на скринах у них, а детализацию оставить той же, то получится куча одинаковых каналов. Одинаковых в смысле по ширине и "рисунку".
Возможно, для "наземной" камеры ничего страшного (растительность прикроет), но на хейтмапах сразу палится.

Почему имеет смысл заморачиваться и НЕ делать странный фейк который роет каналы? Идея переноса частиц дает тебе один классный бонус - карту материалов, которую
можно поюзать для сплаттинга. Если в каждой точке исходной карты высот указать на сколько твердый грунт в зависимости от высоты, можно вполне успешно убить 2х
зайцев - вымыть песок так, чтобы остались скалы и получить красивые песчаные наносы в основании гор. Далее карту с материалом в текстурку - и вот уже годные исходные
данные для сплаттинга. Всякие коммерческие тулзы типа геоконтрола так и делают, например.

Как адекватная альтернатива вообще расчету эрозии, мне известен только один подход: Terrain Synthesis from DEM, там используются
реальные топографические карты для "фактуры" гор и пользовательские маски чтобы задать расположение хребтов. Картинки красивые, но мозгоубийство в пейпере еще то.
Да и эти самые dem достать проблематично в сколько-нибудь годном разрешении.

Вообще по всем вопросам про ландшафты - vterrain.org в помощь. Там много чего полезного попадается если хорошенько покопать.

#6
17:33, 3 апр. 2011

@!!ex
Тебе нужно код (технологию), или утилиту? Из утилит Bryce неплохо с этим справляется.

#7
19:07, 3 апр. 2011

ChASeR
Попробовал... Что-то нихрена пока не получается....

Mikle
Технологию

#8
1:36, 15 апр. 2011

Ну что вы, девелоперы? Чего заглохли? Желаю услышать ещё дискуссии о генерации ландшафтов! Вот, пока попозорюсь своей картинкою
Изображение

#9
1:59, 15 апр. 2011

MineCraft Style?

Я, лично, на генерацию пока забил и просто беру SRTM данные.

#10
7:44, 15 апр. 2011

ABTOMAT
А вы специально так на фильтрацию забиваете, чтоб уж совсем глаза пользователю сломать?

ПрограммированиеФорумГрафика

Тема в архиве.