Більшість алгоритмів шуму перлін дозволить вам отримати значення шуму в будь-якому даному місці, з чимось подібним noise(x,y,z)
. Це робить досить тривіальним генерувати шум на шматках. Все, що вам потрібно зробити, це пройти глобальну позицію, а не позицію шматка.
for(int i = 0; i < CHUNKMAX_X; i++)
for(int j = 0; j < CHUNKMAX_Y; j++)
for(int k = 0; k < CHUNKMAX_Z; k++)
if(isSolid(perlinNoise.get(chunkPosition.x + i,
chunkPosition.y + j,
chunkPosition.z + k))
thisChunk[i,j,k] = new Voxel(solid);
else
thisChunk[i,j,k] = new Voxel(air);
Отже, ви можете бачити, що ми генеруємо місцевість для шматка, перебираючи межі, і перевіряємо, чи є ця глобальна позиція твердою чи ні. Це, мабуть, та сама методика, яку ви використовуєте для загальної генерації рельєфу.
perlinNoise.get
займає глобальне положення і повертає свою щільність. Де isSolid
було б просто простий тест, щоб зрозуміти, чи є воксель "досить щільним", щоб мати право на твердий.
perlinNoise.get
може бути складнішим, ніж просто простий алгоритм шуму. Ви можете перевіряти на основі глибини вокселя у вашому світі. Наприклад, якщо воксель нижче того, що ви вирішили, є "абсолютним базовим рівнем", то він може використовувати алгоритм черв'яків перлін для повернення щільності, якщо він вище абсолютної бази, він може використовувати функцію нормальної щільності, щоб дати вам більш різноманітна місцевість. Я б порекомендував трохи змішати між собою.
Поєднання різних функцій шуму Perlin - це лише те, з чим вам доведеться грати і дивитися, що працює. Найкраще налаштувати своє оточення так, щоб ви могли просто змінити деякі значення та гаряче обміняти місцевість, не потребуючи перезавантаження своєї гри. Щасливі експерименти.