Создание текстур с помощью функций шумов

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

Для изменения вида растрового изображения можно применить к нему шумовой эффект с помощью метода noise() или perlinNoise(). Эффект шума можно сравнить с помехами, которые появляются на экране ненастроенного телевизора.

Для применения эффекта шума к растровому изображению используйте метод noise(). Этот метод применяет случайное значение цвета к пикселам внутри заданной области изображения.

Метод принимает пять перечисленных ниже параметров.

  • randomSeed (int): величина случайного начального числа, определяющая узор. Несмотря на свое название, если параметр передает одно и то же число, результат тоже получается один и тот же. Для получения случайного результата используйте метод Math.random(). Он передаст для этого параметра случайное число.

  • low (uint): этот параметр задает минимальное значение, генерируемое для каждого пиксела (от 0 до 255). Значение по умолчанию равно 0. Установка меньшего значения приводит к более темному рисунку шума, а большего — к более светлому.

  • high (uint): этот параметр задает максимальное значение, генерируемое для каждого пиксела (от 0 до 255). Значение по умолчанию равно 255. Установка меньшего значения приводит к более темному рисунку шума, а большего — к более светлому.

  • channelOptions (uint): этот параметр указывает, к какому каналу изображения применять эффект шума. Это число может сочетать любые из четырех значений каналов ARGB. Значение по умолчанию равно 7.

  • grayScale (Boolean): при значении true этот параметр применяет значение randomSeed к пикселам растрового изображения и убирает цвет из изображения. Этот параметр не влияет на альфа-канал. Значение по умолчанию равно false.

В примере ниже показано, как создавать растровое изображение и применить к нему синий шум.

import flash.display.Bitmap; 
import flash.display.BitmapData; 
 
var myBitmap:BitmapData = new BitmapData(250, 250,false, 0xff000000); 
myBitmap.noise(500, 0, 255, BitmapDataChannel.BLUE,false); 
var image:Bitmap = new Bitmap(myBitmap); 
addChild(image);

Если вы хотите создать более естественную текстуру, используйте метод perlinNoise() . Метод perlinNoise() позволяет создавать реалистичные текстуры, идеально подходящие для имитации облаков, дыма, воды, огня и даже взрывов.

Так как метод perlinNoise() генерируется алгоритмом, ему требуется меньше памяти, чем текстурам на основе растровых изображений. Тем не менее, он может снижать быстродействие процессора и замедлять обработку содержимого, в результате чего экран будет перерисовываться медленнее, особенно на старых компьютерах. Это происходит из-за вычислений с плавающей точкой, которые нужны для обработки алгоритмов шума Перлина.

Этот метод принимает девять параметров (первые шесть обязательны).

  • baseX (Number): определяет значение x (размер) создаваемого узора.

  • baseY (Number): определяет значение y (размер) создаваемого узора.

  • numOctaves (uint): количество октав или индивидуальных функций шума, которые необходимо объединить с целью создания шума. При большем количестве октав создаются более детализированные изображения, но и времени на обработку требуется больше.

  • randomSeed (int): значение случайного начального числа действует так же, как и в случае функции noise(). Для получения случайного результата используйте метод Math.random(). Он передаст для этого параметра случайное число.

  • stitch (Boolean): при значении true этот метод будет стараться сгладить края перехода изображения для создания ровных текстур, которые можно использовать для мозаичной заливки растровым изображением.

  • fractalNoise (Boolean): этот параметр отвечает за края градиентов, генерируемых методом. При значении true он создает фрактальный шум, смягчающий границы области эффекта. При значении false он создает турбулентность. Изображение с турбулентностью имеет видимые прерывания градиента, благодаря чему оно больше подходит для более резких визуальных эффектов, например для создания языков пламени или морских волн.

  • channelOptions (uint): параметр channelOptions действует так же, как и в случае метода noise(). Он указывает, к какому цветовому каналу (растрового изображения) применяется узор шума. Это число может сочетать любые из четырех значений каналов ARGB. Значение по умолчанию равно 7.

  • grayScale (Boolean): параметр grayScale действует так же, как и в случае метода noise(). При значении true этот параметр применяет значение randomSeed к пикселам растрового изображения и убирает цвет из изображения. Значение по умолчанию равно false.

  • offsets (Array): массив точек, соответствующих смещениям в направлениях x и y для каждой октавы. Изменяя значения смещения, можно плавно прокручивать слои изображения. Каждая точка в массиве смещения применяется к функции шума конкретной октавы. Значение по умолчанию — null.

В следующем примере создается объект BitmapData размером 150 х 150 пикселов, для создания эффекта зеленых и синих облаков на котором вызывается метод perlinNoise().

import flash.display.Bitmap; 
import flash.display.BitmapData; 
 
var myBitmapDataObject:BitmapData = new BitmapData(150, 150, false, 0x00FF0000); 
 
var seed:Number = Math.floor(Math.random() * 100); 
var channels:uint = BitmapDataChannel.GREEN | BitmapDataChannel.BLUE  
myBitmapDataObject.perlinNoise(100, 80, 6, seed, false, true, channels, false, null); 
 
var myBitmap:Bitmap = new Bitmap(myBitmapDataObject); 
addChild(myBitmap);