Ви можете використовувати функції шуму для генерації випадкових висот. Найпростіший з них - значення шуму, який працює точно так само, як і ваш опис: ви генеруєте кілька випадкових цілих висот, а потім інтерполюєте висоти між ними. Найпоширенішим методом інтерполяції є кубічне відображення S-кривої:
Припустимо, у вас є висота h0
в точці x0
і висота h1
в точці x1
. Потім для отримання висоти в будь-якій точці x
( x0<=x<=x1
) ви використовуєте
t = (x-x0)/(x1-x0); // map to [0,1] range
t = t*t*(3 - 2*t); // map to cubic S-shaped curve
h = h0+t*h1;
Висоти, отримані таким чином, будуть плавними, випадковими, але не дуже цікавими. Щоб покращити свою місцевість, ви можете використовувати фрактальний шум . Це працює так: припустимо, ви створили функцію, h(x)
яка повертає висоту за заданою координатою (використовуючи метод вище). Ця функція має частоту, визначену частотою вихідних міжгірських висот. Щоб зробити з нього фрактал, ви комбінуєте функції з кількома частотами:
fbm(x)=h(x) + 0.5*h(2*x) + 0.25*h(4*x) + 0.125*h(8*x);
У цьому прикладі я поєдную чотири частоти - оригінальну, подвійну, 4-кратну та 8-кратну оригінальну, при цьому більш високі частоти мають меншу вагу. Теоретично фрактали проходять весь шлях до нескінченності, але на практиці потрібно лише кілька термінів. fbm
У формулі позначає дробове броунівський рух - це ім'я цієї функції.
Це потужна техніка. Ви можете грати з множником частоти, з вагами різної частоти або додавати деякі функції для спотворення шуму. Наприклад, щоб отримати більше відчуттів, h(x)
можна змінити 1-abs(h(x))
(припускаючи -1<=h(x)<=1
)
Однак, хоча все це приємно, ця методика має серйозні обмеження. При підході, що базується на "висоті", ви ніколи не можете мати "перегини" на місцевості. І я уявляю, що це дуже приємна особливість мати у грі, подібній до "Moon Buggy".
Додавання приємних нависів - важке завдання. Одне, що я можу придумати, - ви можете почати з фрактальної "висоти", а "тесселяти" її в ряд сплайнів або кривих Безьє. Тоді лінія місцевості буде визначена декількома «ключовими точками». До цих ключових моментів застосуйте трохи тремтіння - це призведе до випадкової деформації місцевості, ймовірно, утворить якісь цікаві форми. Однак самопересічення рельєфу місцевості може стати проблемою при такому підході, особливо при великій кількості тремтіння.