2014-10-01 10 views
2

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

Проблема в том, что биомы не охватывают все возможные комбинации температур осадков. Например, нет биома с высоким уровнем осадков и низкой температурой, как показано на этом рисунке.

Как можно по-прежнему использовать Перлин шума, но никогда не достигает области, которые не охвачены биомами?

+1

Самое простое решение - просто перезапустить шум Perlin (со слегка измененными значениями, очевидно) в любое время, когда вы не попали на карту. Не уверен, что это будет делать с вашим общим распределением очков. И это может занять некоторое время, чтобы выбраться из этой «плохой» области. –

+0

Да, самая безопасная вещь - просто отказаться от любых результатов, которые выходят за пределы допустимой области. – StilesCrisis

ответ

0

Вы можете закрепить значения в допустимом диапазоне (например, максимально допустимое осаждение в области с температурой 0 ° C составляет 100 см).

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

  • Сначала создайте карту температуры.
  • Когда вы генерируете каждое случайное значение для дождя, генерируйте значение в диапазоне, соответствующим уменьшенному диапазону значений, допустимых по температурной карте.

Пример: Если будет генерировать случайное значение в диапазоне 0 - 250 мм (около 50% от максимально возможного количества осадков, для одного из слоев низких частот шума), обратите внимание на температуру в этом пикселе, видеть, что это 10 ° C, поэтому диапазон случайного значения будет уменьшен до 0-100 мм (50% от 0-200 мм, допускаемого этой температурой).

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

Я не знаю, насколько это реалистично и насколько важен реализм для вас. Что именно предотвращает большие осадки от низких температур? Решение, которое я предложил, может довольно эффективно имитировать такие факторы, как уменьшение испарения в низкотемпературных зонах.

EDIT:

Еще одна идея, которая может в конечном итоге эквивалентно моему первому решению:

  • Сформировать как карту температуры и карта осадков независимо друг от друга.
  • Умножить карту осадков по температурной карте (масштабируется до диапазона < 0, 1>). Это уменьшит количество осадков в районах с низкой температурой.