Изменяя частоту и амплитуду, можно добиться большого разнообразия функций шума (рис. 12.3).
Рис. 12.3. Изменение частоты и амплитуды функции шума Как можно видеть на рисунке, с увеличением частоты и уменьшением амплитуды «помехи» становятся мельче. Отношение двух частот друг к другу в масштабе 2:1 называется октава. Нарис, 12.3 показаны пять октав одномерной функции шума. Сами по себе эти функции не слишком полезны, но применение их в шейдерах помогает получить некоторые интересные эффекты. Если сложить вместе функции различных частот, результат кажется гораздо более интересным (рис. 12.4).
Рис. 12.4. Результат сложения функций шума различной частоты и амплитуды
В результате получается функция, которая содержит «помехи» различных размеров. Большие выпуклости на низкочастотных функциях обеспечивают общую форму, а меньшие выпуклости на высокочастотных - детализацию, заметную при уменьшении масштаба. Перлин назвал функцию суммы последовательных октав с разницей в половину амплитуды функцией шума 1//, но сейчас более популярно другое название - «отрывочное броуновское движение» («fractional Brownian motion», или «fBm»).
Если различные октавы шума суммируются в процедурном шейдере, наступает момент, когда некоторые частоты могут вызвать нежелательные дефекты изображения. Алгоритмы, учитывающие необходимость сглаживания функций шума, обычно прекращают наложение октав раньше, чем частота станет настолько высокой, чтобы вызвать дефекты. Вместо этого можно сделать функцию более плавной в месте, где появляется дефект.
Функцию шума, разработанную Перлином (шум Перлина), иногда называют градиентным шумом. Она определена как функция со значением 0 для каждого целого входного значения; для каждой из этих точек определяется псевдослучайный градиентный вектор. Характеристики этой функции шума позволяют использовать ее для некоторых эффектов [2]. Именно эта функция используется sRenderMan как функция шума, и она же, скорее всего, будет использоваться , в реализациях встроенной функции noise языка шейдеров OpenGL.
Существует много других функций шума. Сочетая их или используя попеременно, можно добиться интересных эффектов. Но не так-то просто сразу представить себе результат применения этих функций, и нужная функция обычно подбирается методом проб и ошибок.
12.1.1. 2Р-шум Итак, основная идея функции шума была рассмотрена на примере одномерной функции шума. А теперь приведем описание двухмерной функции шума и примеры изображений с наложенным двухмерным шумом Перлина на разных частотах, приведенных к диапазону [0, 1] и показанных как полутоновое изображение (рис. 12.5). На каждом следующем изображении частота вдвое больше, чем на предыдущем. Контрастность изображений специально была усилена, для того чтобы зернистость была лучше заметна. Обычно в реальных изображениях каждая следующая картинка имеет еще и половинную амплитуду предыдущей, но если бы здесь использовался этот же способ, картинки были бы более серыми и читатель не смог увидеть хороший пример двухмерного шума.
Рис. 12.5. Базовый двухмерный шум ка частотах 4, 8, 16 и 32 (контраст усилен)