TGViewer
Dev Math Dev Math @easy_dev_math · 615 subscribers
Post #87 381
Шум Перлина — это не случайные числа. Это случайные стрелки

Наивная идея «шума»: накидать
в узлы сетки случайные значения
и интерполировать между ними.
Это value noise — и он сразу выдаёт себя: сквозь картинку проступает сетка, всё распадается на квадраты.

Перлин сделал хитрее. В узле лежит не число, а случайное направление — градиент, стрелка.
Значение в точке — это скалярные произведения этих стрелок на векторы «от угла к точке», плавно смешанные специальной кривой:


float n00 = dot(g00, p - c00); // стрелка · смещение
float n10 = dot(g10, p - c10); // ...для всех 4 углов клетки
float n01 = dot(g01, p - c01);
float n11 = dot(g11, p - c11);
vec2 f = fade(fract(p)); // гладкая кривая, НЕ линейная
float n = mix(mix(n00,n10,f.x), mix(n01,n11,f.x), f.y);


В узлах значение строго ноль — оттого ни «пятен» на решётке,
ни швов.

А главное: стрелки не бросаются заново, а считаются хешем от целых координат и сида. Тот же узел при том же сиде — та же стрелка. Всегда. Собственно, поэтому один seed в Minecraft рисует одинаковый мир у всех.

#мат_геймдев #МатРазбор #шейдеры #procgen
  • 🔥 13
  • 👍 1
More from @easy_dev_math
  1. Sep 28, 2026🤔 Как проверить свою идею? Сделал небольшое видео о том, как проверить свою идею. Самый п…
  2. Sep 28, 2026🤔 Почему так важен онбординг в игре? По следам разбора давайте на этой неделе разберем те…
  3. Sep 26, 2026🤨 Разбор игры — «Алхимик: магазин волшебных зелий» https://yandex.ru/games/#app=582380 Чт…
  4. Sep 25, 2026🥴 Кина не будет (сегодня) У меня техническая накладка. Форсмажор. Поэтому прошу понять и…
  5. Sep 24, 2026😁 Почему игроки фармят пиксели https://dev-math.ru/articles/grind/ Дописал статью про воп…
  6. Sep 23, 2026⚡️ Как сделать игру? Подумал что интересного можно сделать и придумал. Решил описать больш…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →