ГоловнаСтаттіРендеринг

Процедурні Текстури: Шум, fBm та Клітини Вороної в GLSL

Мармур, текстура деревини, лава та хмари, згенеровані лише математикою всередині фрагментного шейдера — без файлів зображень, без пам’яті текстур.

mysimulator teamОновлено — червень 2026≈ 10 хв читання▶ Відкрити симуляцію

Обчислювальна текстура: не зразкова

Процедурна текстура генерується повністю за допомогою математичної функції, яка оцінюється для кожного пікселя, а не шукається в збереженому зображенні. Цей торг приносить реальні переваги: безмежне розділення без розмиття при збільшенні, безшовне повторення без видимих швів і нульовий пропускна здатність текстури пам'яті — весь обсяг деталей поверхні обчислюється свіжою кожну кадр. Майже кожна процедурна текстура починається з одного й того ж основного компонента: функція шуму, яка відображає координати на гладкі випадкові значення, а потім призначає випадкове скалярне значення кожному кутовому елементу сітки та інтерполює між ними; це дешево, але може проявлятися ледь помітний «підпільний» артефакт через втрату інформації про градієнт на межах комірки. Градієнтний шум — Perlin noise і його варіант Simplex — призначають випадковий вектор напрямку кожному кутовому елементу замість цього та інтерполюють скалярний добуток між цим градієнтом і зміщенням до точки зразка, що усуває смуги та виглядає переконливо органічно.

perlinNoise(p):
  i = floor(p); f = fract(p)
  u = f*f*f*(f*(f*6 - 15) + 10)          // quintic fade — zero 1st & 2nd derivative
  a,b,c,d = dot(gradient(corner), offset)  for the 4 surrounding lattice corners
  return mix(mix(a,b,u.x), mix(c,d,u.x), u.y) * 0.5 + 0.5

Використання шумових функцій

Один виклик шуму має вузьку просторову частоту — реальний рельєф, хмари та скелі мають деталі на багатьох рівнях одночасно. fBm (Fractional Brownian Motion) сумує декілька октав одного шумового функцій, кожна з яких подвоюється в частоті (лакунарність), а зменшується за амплітудою (персистентність), шаблон контролюється показником Хурста. Підвищення персистентності до 0,6–0,7 вводить більше високочастотної енергії для грубішого, більш вираженого рельєфу; зниження до 0,4 виробляє більш гладку змінну, типову для хмарних шарів. Дві прості трансформації однієї октави, що сумуються, дають зовсім різні результати: прийняття абсолютного значення кожної октави перед суміщенням (шум хвилі) виробляє розрвату, схожу на капусту, а складання її як 1 − |шум| (шум гребеня) перетворює м’які пагорби на гострі гірські гребені.

Шум Вороного: Клітини замість Блобів

Стівен Вореллі (Steven Worley) 1996 рік розробив повністю інший підхід до клітинного шуму, який використовує клітинну сітку. Він розкидає випадкові точки ознак у кожній клітинці сітки та для кожного фрагменту знаходить відстань до найближчої (F1) та другої найближчої (F2). F1 само по собі дає заповнені багатокутні клітини, які виглядають як бруківка; F2 - F1 підкреслює межі між клітинами, що є точним відображенням тонкої сітки луска рептилії або тріщин у сушеному бруді. Перевірка лише сусідства 3x3 клітин достатньо для гарантії знаходження справжньої найближчої точки, за умови, що точки ознак збуджені менше ніж на повну ширину клітини.

жива демонстрація · пов'язана симуляція● LIVE

Від шуму до матеріалу: мармур, дерево та викривлені хмари

Бетонні матеріали утворюються шляхом спотворення простого базового шаблону за допомогою шуму. Мармур – це хвиляста смужка у одного напрямку, з деформацією вхідних даних завдяки турбулентності — варіанту fBm, який сумує абсолютні значення кожного октаву — перед оцінкою синуса, що вигинає прямі смуги у вени. Деревина отримує радіальне відстань від точки осі росту, спотворює її за допомогою fBm так, щоб кільця не були ідеально круглими, та встановлює поріг для часткового значення цієї відстані, створюючи чергування світлих та темних смуг. Найпотужніша з усіх технік – деформація домену (популяризована Іного Квілезом): подає вихід одного оцінювання fBm як зміщення координат вхідних даних наступного.

q = fbm(p) // перший згиб поля r = fbm(p + q * k) // другий згиб, використовуючи перший як зміщення result = fbm(p + r * k) // остаточний малюнок — k ≈ 1–4 контролює силу деформації Два або три рівні цього зворотного зв’язку перетворюють звичайний fBm на ви swirling, органічні деталі, що видно у туманах, вогні, лаві та інопланетному рельєфі — за рахунок того, що fBm викликається двічі або тричі на піксель, що пояснює, чому шейдери мобільних пристроїв часто обмежуються 3–4 октавами на виклик, щоб залишатися в межах бюджету.

q = fbm(p)               // first warp field
r = fbm(p + q * k)        // second warp, using the first as an offset
result = fbm(p + r * k)   // final pattern — k ≈ 1–4 controls warp strength

Часті запитання

Чому градієнтний (Перлін) шум переважно використовується замість шумового шуму з значенням?

Шумовий шум із значенням інтерполює випадкові скаляри, розташовані у кутах решітки, що призводить до втрати інформації про градієнт на межах комірок і викликає видимий блоковий або подушеподібний артефакт. Градієнтний шум замість цього призначає випадковий вектор напрямку кожному куту та інтерполює скалярний добуток із зсувом до точки зразка, що усуває це смугасте уявлення і забезпечує органічно гладку текстуру.

Що саме контролює fBm, і що відбувається, якщо я зміню параметри?

fBm сумує кілька октав одного шумового функціонування з наростаючою частотою (лакунарністю) та зменшуваною амплітудою (постійністю). Стандартні замовлення подвоюють частоту та наполовину зменшують амплітуду кожної октави. Підвищення постійності до 0,6–0,7 зберігає більше високих частотних деталей і створює більш грубі, шумніші ландшафти; зниження до 0,4 створює більш гладку, хмарну варіацію.

Чи дорогий процедурний генератор текстур на GPU?

Кожна октава шуму коштує невелику кількість операцій хешування та інтерполяції, а ефекти, такі як викривлення області, викликають шумову функцію кілька разів на піксель — подвійне викривлення з 5 октавами становить 15 оцінок шуму на фрагмент. Це дешево порівняно зі зразкуванням текстури з пам'яті, але на мобільних GPU часто обмежують кількість октав до 3–4 або повертаються до шумового шуму з значенням, щоб залишатися в межах бюджету.

Спробуйте наживо

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

▶ Відкрити симуляцію the simulation

Що ви знайшли?

Додати кроки відтворення (опційно)