Я б подумав просто перейти з 3D-шумом і оцінити його на поверхні сфери.
Для градієнтного шуму, який, природно, знаходиться в області поверхні сфери, вам потрібен звичайний зразок точок зразка на поверхні, які мають природну інформацію про з'єднання, приблизно з рівним площею в кожній комірці, щоб ви могли інтерполювати чи сумувати суміжні значення. Цікаво, чи може працювати щось на зразок сітки Фібоначчі :
Я не перечитав математику, щоб визначити, як багато роботи було б визначити показники та відстань до ваших чотирьох сусідів (я навіть не знаю, чи у вас в усіх випадках є чотири чітко визначені сусіди), і я підозрюю, що це може бути менш ефективно, ніж просто використання 3D-шуму.
Редагувати: хтось ще жував математику! Дивіться цей новий документ про Сферичне картографування Фібоначчі . Здається, що було б просто адаптувати його до шуму сфери.
Якщо ви рендеруєте сферу, а не просто оцінюєте шум на поверхні кулі, і добре вписуєтеся в цю сферу до роздільної здатності вашої шумової решітки, ви можете створити геодезичну сітку на поверхні сфери (підрозділений ікосаедр, зазвичай):
Кожна вершина сфери може мати градієнт, вибраний випадковим чином, для градієнтного шуму. Щоб отримати цю інформацію в піксельному шейдері (якщо ви не хочете прямої інтерполяції, наприклад, значення шуму), вам може знадобитися така техніка, як переведення каркасної рамки цієї статті з барицентричними координатами : виконайте недеклароване візуалізацію, при цьому кожна вершина містить барицентричні координати цієї вершини в трикутнику . Потім ви можете читати з SV_PrimitiveID
(або еквівалент OpenGL) у піксельній шейдері, читати три градієнти шуму з вершин, залежно від того, на якому трикутнику ви перебуваєте, та використовувати будь-який розрахунок шуму, який вам подобається, використовуючи інтерпольовані барицентричні координати.
Я думаю, що найскладнішою частиною цього методу є створення схеми для зіставлення вашого трикутника ідентифікатором на три вибірки, щоб шукати значення шуму в кожній вершині.
Якщо вам потрібні кілька октав шуму або шуму при більш чіткій роздільній здатності, ніж ваша модель сфери, можливо, ви зможете зробити грубу геодезичну сітку з вершинами і виконати кілька рівнів підрозділу в піксельному шейдері. тобто від барицентричних координат, фігура з яких поділені трикутника ви б бути в разі , якщо сітка була додатково мозаїчної, а потім з'ясувати , що примітив ID і барицентричні координати б для цього трикутника.