Я хотел бы рассмотреть возможность использования трехмерного шума и оценки его на поверхности сферы.
Для градиентного шума, который естественным образом находится в области поверхности сферы, вам необходим регулярный образец точек выборки на поверхности, которые имеют естественную информацию о связности, с примерно равной площадью в каждой ячейке, чтобы вы могли интерполировать или суммировать соседние значения. Интересно, может ли что-то вроде сетки Фибоначчи сработать:
Я не перебирал математику, чтобы определить, сколько будет работы, чтобы выяснить показатели и расстояние до ваших четырех соседей (я даже не знаю, в конечном итоге у вас будет четыре четко определенных соседа), и я подозреваю, что это может быть менее эффективно, чем просто использование 3D-шума.
Изменить: кто-то еще пережевал математику! Смотрите эту новую статью о сферическом отображении Фибоначчи . Кажется, было бы просто адаптировать его к сферному шуму.
Если вы визуализируете сферу, а не просто оцениваете шум на поверхности сферы, и хорошо справляетесь с тесселяцией вашей сферы до разрешения вашей шумовой решетки, вы можете создать геодезическую сетку на поверхности сферы (подразделенный икосаэдр, обычно):
Каждая вершина сферы может иметь случайно сгенерированный градиент для градиентного шума. Чтобы передать эту информацию в пиксельный шейдер (если вам не нужна прямая интерполяция, такая как значение шума), вам может понадобиться метод, подобный каркасному рендерингу этой статьи с барицентрическими координатами : выполните неиндексированный рендеринг, где каждая вершина содержит барицентрические координаты этой вершины в треугольнике. , Затем вы можете читать из SV_PrimitiveID
(или эквивалент OpenGL) в пиксельном шейдере, читать три градиента шума из вершин, основываясь на том, какой у вас треугольник, и использовать любой расчет шума, который вам нравится, используя интерполированные барицентрические координаты.
Я думаю, что наиболее сложной частью этого метода является создание схемы для сопоставления вашего идентификатора треугольника с тремя выборками, чтобы найти значения шума в каждой вершине.
Если вам нужно несколько октав шума или шума с более высоким разрешением, чем у вашей сферной модели, вы можете сделать грубую геодезическую сетку с вершинами и выполнить несколько уровней деления в пиксельном шейдере. то есть, исходя из барицентрических координат, определите, в каком подразделяемом треугольнике вы бы находились, если сетка была подвергнута дополнительной тесселяции, а затем выясните, какими будут примитивные ID и барицентрические координаты для этого треугольника.