2010-10-25 6 views
3

У меня есть игра с бесконечно обработанной рельефом местности. Я использую шум 1/f для высоты (думаю, это перлинный шум?). Во всяком случае, это выглядит красиво, но его не очень удобно, поскольку на нем нет плоских площадок. Просто уменьшение амплитуды не будет работать, так как я все еще хочу иметь большие вариации в высоте. Кто-нибудь знает о фильтре, который я могу применить к карте высот, чтобы поощрять плоские области при сохранении большого диапазона высот?Playable Heightmap

Написан в C#

EDIT: Я понял, что я хочу, это крутые градиенты, чтобы стать более крутыми, а для плоских градиентов, чтобы стать более пологими. Местность не обязательно реалистична, просто «весело» для FPS.

ответ

2

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

Я посмотрел только через эту страницу, но это может быть приличн: http://www.float4x4.net/index.php/2010/06/generating-realistic-and-playable-terrain-height-maps/

+0

Это выглядит великолепно! Я пытаюсь реализовать его, но шаг эрозии, похоже, не очень хорошо работает на моей карте высот, у меня могут быть только плохие параметры? Я буду играть с ним еще – Hannesh

+0

Ссылка перенаправляет меня на странное объявление. :( – Alaanor

0

Вы можете фильтровать по median filter. он сгладит вашу поверхность. Но это разрушит горы. Это нормально для относительно плоских областей, таких как впадины и плато. Если вы хотите острые горы (с быстрым и большим разбросом по высоте), вы должны применять этот фильтр выборочно.

2

Не уверен, что это поможет, но вы можете сделать так, чтобы диапазон вашей функции с высокой вероятностью превращался в плоскую поверхность. Например, все результаты между 0,1 и 0,3 имеют вероятность конца 80% как поверхность 0,1. Таким образом, вы поощряете плоские поверхности, но сохраняете высокую изменчивость, которую вы хотите.

+0

Это сделало ландшафт очень искусственным, я получил много плоских поверхностей, но все они были на одном уровне. – Hannesh

0

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

Чтобы помочь вашему случаю, вы можете использовать одну функцию для генерации высокочастотного шума, а затем умножить ее на низкочастотный шум. Это приведет к пикам, где низкочастотный шум будет ближе к 1 и плоскостям, где он близок к 0. Какой-то алгоритм сглаживания/эрозии тоже классный. Но вам все равно потребуется много проб и ошибок и тонкая настройка ваших параметров, чтобы получить хотя бы полезные результаты.

Некоторым более сложным теренам может потребоваться более 10 шумовых функций с альфа-смешиванием или сглаживанием и т. Д. Не думайте, что вы получите красивый ландшафт от простого фильтра.

2

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

Dungeon League - прочитайте все это. Качественный товар.

мира статьи поколения на Хроники Doryen:

(Вы можете скачать генератор тоже, но он написан на C++)

+0

Хотя я думаю, что это хорошая идея. Я не думаю, что OP нуждается в таком сложном моделировании, но это даст ему хорошую идею о том, как все работает. – Euphoric

1

Вам нужен "мастер-генератор случайных чисел", который будет решать, как должна выглядеть новая область, с частотой вашего выбора. Для гор выбрать то, что у вас уже есть. Для квартир выбирайте меньше шума.

Смежные вопросы