Шум Перлина: вычисление псевдослучайных градиентов узлов сетки

Кажется, у меня возникли проблемы с пониманием эта статья Perlin Noise. Мне нужна помощь в понимании того, как работает вычисление псевдослучайных градиентов для каждой ограничивающей точки. Автор дает функцию:

g(xgrid, ygrid) = (gx, gy)

Затем он дает изображение:

4 псевдослучайных градиента?

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


person CoderTheTyler    schedule 22.11.2012    source источник


Ответы (1)


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

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

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

Так что, вероятно, он делает что-то вроде

srand(CONSTANT_VALUE);

for (y = 0; y < GridHeight; y++)
{
    for (x = 0; x < GridWidth; x++)
    {
        r1 = rand();
        r2 = rand();
        gradient[y][x] = some_function(r1, r2);
    }
}

так что в каждой точке градиент псевдослучайный, он всегда одинаков для одних и тех же x и y и распределяется равномерно. Затем он обращается к матрице gradient для выполнения остальных вычислений.

person LSerni    schedule 22.11.2012
comment
Хороший ответ, но во всех реализациях Perlin Noise, которые я видел, ничего подобного не использовалось. «Градиенты» не кажутся настоящими градиентами. Но я не уверен. - person CoderTheTyler; 22.11.2012
comment
Согласитесь, что они не очень похожи на градиенты — я бы назвал их скорее векторами. Или даже versors, они выглядят так, будто имеют фиксированную длину. Тем не менее, это то, что ОН сказал :-D - person LSerni; 23.11.2012
comment
Я думаю, что это градиенты в том смысле, что они представляют скорость изменения шума в этой точке, как вектор нормали. Фиксированная длина — это то, что помогает максимумам шума быть последовательными. Если бы они были действительно случайными, шум имел бы тусклые пятна. Я думаю. - person James Clark; 12.02.2013