1

Тема: Градієнтний шум. Інтерполяція між двома градієнтами.

Добрий день. Читав один туторіал по відтворенню шума Перліна, і наштовхнувся на одну проблему.
Для початку автор запропонував відтворити найпростіший градієнт, котрий являє собою лінійну інтерполяцію між чорним та білим кольором.
https://replace.org.ua/extensions/om_images/img/590334188d659/01a42016a7.png

А після цього автор пише

Now every stripe has the same gradient, except that they are offset from one another. So for every t0, the gradient to the right of it is t1 = t0 - 1. Let's smoothly interpolate them.

переклад

Тепер кожна стрічка має однаковий градієнт, за винятком того, що вони зміщенні по відношенню одна до одної. Так що для кожного значення t0, градієнт з правого боку цього значення буде t1 = t0 - 1. Нумо гладенько інтерполюємо їх.

Мені не зрозуміло, який такий

the gradient to the right

мається на увазі?
Якщо t0  змінюється від 0 до 1 для кожної стрічки і малює чорно-білий градієнт, то t1 = t0 - 1 буде змінюватися від -1 до 0, і малювати чорно-чорний градієнт. Але звідки такий градієнт може взятись, і чому він називається градієнтом в правий бік від t0 ?

Також я написав автору листа з питанням, і він відповів наступне

The gradient to the right is a visual reference. It’s the gradient for the next higher integer. You’re right that it goes negative to the left. They all do.

So t0 is the gradient that’s zero at the lattice point on the left side of the region between two integers. And t1 is the gradient that’s zero at the lattice point on the right side of the same region. Gradient noise is obtained by interpolating between these two gradients in between lattice points. And yes, that can produce negative results, which end up black. That’s why the next step is to scale and offset the result.

переклад

Градієнт в право - візуальний референс. Це градієнт для наступного, вищого, цілого числа. Ви праві, що він рухається вліво, нижче нуля. Вони всі так роблять.

t0 - це градієнт, котрий дає нуль на лівій межі сітки, між двома цілими числами (мається на увазі початок градієнту, коли колір найчорніший, в цьому місці t0 дорівнює нулю). А t1 - це градієнт, що дає нуль на правій стороні цього ж самого регіону. Градієнтний шум отримується за допомогою інтерполяції між цими двома градієнтами, що між точками сітки (маються на увазі ліва та права сторона кожної стрічки). І так, це може давати негативні результати, і все закінчується чорним кольором. Ось чому наступний крок - масштабування та зміщення результату (мається на увазі множення результату на 0.5 і додавання 0.5, аби привести діапазон значень з (-1; 1) до (0; 1))

Може хтось пояснити це саме, але під іншим кутом?

Подякували: 0xDADA11C71

2

Re: Градієнтний шум. Інтерполяція між двома градієнтами.

Я, можливо, не дуже добре знаюся на особливостях англійської математичної мови, але припущу, що мається на увазі, що значення кольору ідуть "сходинками" від 0 до 1 з відніманням 1 на кожній наступній сходинці. Тобто t0 - не значення в точці, а множина значень від 0 до 1 в певній зоні (від чорного до білого); після досягання білого значення градієнту береться вже t1=t0-1, який теж в тій зоні змінюється від 0 до 1 (а t0 в зоні праворуч мав би значення в діапазоні 1..2).
Ви про цю статтю? http://catlikecoding.com/unity/tutorials/noise/

point *= frequency;
int i0 = Mathf.FloorToInt(point.x);
float t = point.x - i0;

Як бачите, значення t змінюються залежно від x (є його дробовою частиною).

3

Re: Градієнтний шум. Інтерполяція між двома градієнтами.

Тоді виходить, що є якісь нескінченні градієнти, котрі зміщенні між собою на 1, і показується лише певна частина цих градієнтів, від 0 до 1.
І інтерполяція виконується над видимою частиною градієнта під номером gn, і невидимою частиною градієнта gn+1, котра лягає на видиму частину gn.
http://не-дійсний-домен/vzPpo/c8fa85faa6.png
Але ж чому так? Це загальне правило для інтерполяції градієнтів?
Тому що в варіанті з кольорами, ми беремо перший колір, потім другий колір, і згладжуємо їх. Тобто ми не знаходимо нічого невидимого, і не інтерполюємо це невидиме з видимим.
http://не-дійсний-домен/vzPtI/1b4c41350e.png
Чи може інтерполяція між двома кольорами виконується так само, як і інтерполяція між градієнтами, але за рахунок того, що колір не змінюється на всій прямій, складається враження що інтерполяція виконується саме між видимими частинами кольорів?
http://не-дійсний-домен/vzPHT/dba7d0bcf5.png

4

Re: Градієнтний шум. Інтерполяція між двома градієнтами.

А до чого тут інтерполяція? Все, що ви просили роз'яснити, знаходиться ДО інтерполяції. Вже після цього автор починає інтерполяцію за допомогою функцій Smooth і Mathf.Lerp, які ви не просили пояснювати і про які нічого не писали.
Ви, здається, просто заплуталися із тим, що там відбувається і в якій послідовності.

5

Re: Градієнтний шум. Інтерполяція між двома градієнтами.

Ну і ви не підтвердили, що саме за цією статтею щось пишете. Може, ви щось інше розглядаєте, а я тут намагаюся прочитати те, що вам зовсім не потрібно...

6

Re: Градієнтний шум. Інтерполяція між двома градієнтами.

Підтверджую.
Не заплутався, просто думаю наперед.

7

Re: Градієнтний шум. Інтерполяція між двома градієнтами.

де ж ви зникли, пане koala, я так чекав вас, так чекав....

8

Re: Градієнтний шум. Інтерполяція між двома градієнтами.

FakiNyan написав:

де ж ви зникли, пане koala, я так чекав вас, так чекав....

А я вас відправив читати і розбиратися, і оскільки ви не повернулися, вирішив, що ви вже розібралися.

9

Re: Градієнтний шум. Інтерполяція між двома градієнтами.

так я нічо не читав, а просто подивився відюшку, де все зрозуміло пояснили, і то, знайшов її хз аж коли

10

Re: Градієнтний шум. Інтерполяція між двома градієнтами.

Градієтн це N 0 та 1 і все... кількість кроків вод 0 до 1 .. і поїхали заповнювати.

11 Востаннє редагувалося Alchimic (23.01.2018 14:18:14)

Re: Градієнтний шум. Інтерполяція між двома градієнтами.

Можна розділити на секції. наприклад 4 секцій. з коефіцієнтом. від 0 до 1.  для нерівномірного градієнта.