ノイズ関数によるテクスチャの作成

Flash Player 9 以降、Adobe AIR 1.0 以降

ビットマップの外観を変えるには、 noise() メソッドまたは perlinNoise() メソッドのいずれかを使用してノイズ効果を適用します。ノイズ効果とは、チューニングされていないテレビ画面に表示されるノイズのようなものです。

ビットマップにノイズ効果を適用するには、 noise() メソッドを使用します。このメソッドは、ビットマップイメージの指定領域内のピクセルに対し、ランダムカラー値を適用します。

このメソッドは、次の 5 つのパラメーターを受け入れます。

  • randomSeed (int):パターンを決定するランダムシード数です。その名に反し、同じ数が渡されると実際には同じ結果が生成されます。 真にランダムな結果を得るには、 Math.random() メソッドを使用し、このパラメーターに乱数を渡します。

  • low (uint):このパラメーターは、0 から 255 までの各ピクセルに対して生成される最小値を示します。デフォルト値は 0 です。この値を小さく設定すると暗いノイズパターンになり、大きい値に設定すると明るいパターンになります。

  • high (uint):このパラメーターは、0 から 255 までの各ピクセルに対して生成される最大値を示します。デフォルト値は 255 です。この値を小さく設定すると暗いノイズパターンになり、大きい値に設定すると明るいパターンになります。

  • channelOptions (uint):このパラメーターは、ノイズパターンを適用する、ビットマップオブジェクトのカラーチャンネルを指定します。値は、4 つの ARGB カラーチャンネル値の任意の組み合わせです。 デフォルト値は 7 です。

  • grayScale (ブール値): true に設定すると、ビットマップピクセルに randomSeed 値を適用し、イメージからすべてのカラーが効果的にウォッシュアウトされます。このパラメーターはアルファチャンネルに影響しません。 デフォルト値は false です。

次の例では、ビットマップイメージを作成し、青いノイズパターンを適用します。

package 
{ 
    import flash.display.Sprite; 
    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.display.BitmapDataChannel; 
 
    public class BitmapNoise1 extends Sprite 
    { 
        public function BitmapNoise1() 
        { 
            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() メソッドはアルゴリズムによって生成されるので、ビットマップベースのテクスチャよりもメモリ消費量を抑えられます。ただし、プロセッサーの使用に影響を与えるので、コンテンツを低速化し、特に古いコンピューターではフレームレートよりも画面の再描画速度が遅くなります。これは主に、Perlin ノイズアルゴリズムの処理に必要な浮動小数点計算によるものです。

このメソッドは、次の 9 つのパラメーターを受け入れます。最初の 6 つのパラメーターは必須です。

  • baseX (数値):作成されるパターンの x(サイズ)値を指定します。

  • baseY (数値):作成されるパターンの y(サイズ)値を指定します。

  • numOctaves (uint):このノイズを作成するために組み合わせるオクターブ(個々のノイズ関数)の数です。オクターブ数を多くすると、より詳細なイメージを作成できますが、処理時間も長くなります。

  • randomSeed (int):ランダムシードの数値の働きは、 noise() 関数での働きと同じです。真にランダムな結果を得るには、 Math.random() メソッドを使用し、このパラメーターに乱数を渡します。

  • stitch (ブール値): true に設定すると、このメソッドはイメージのトランジションエッジをスティッチ(またはスムージング)してシームレスなテクスチャを作成し、ビットマップ塗りとして分割します。

  • fractalNoise (ブール値):このパラメーターは、メソッドによって生成されたグラデーションのエッジに関連します。 true に設定すると、効果のエッジをスムージングするフラクタルノイズを生成します。 false に設定すると、乱流を生成します。乱流があるイメージにはグラデーションに視覚的な不連続性があるので、炎や海の波のようなシャープな視覚効果に適している場合があります。

  • channelOptions (uint): channelOptions パラメーターの働きは、 noise() メソッドでの働きと同じです。ノイズパターンが適用される、ビットマップのカラーチャンネルを指定します。 値は、4 つの ARGB カラーチャンネル値の任意の組み合わせです。 デフォルト値は 7 です。

  • grayScale (ブール値): grayScale パラメーターの働きは、 noise() メソッドでの働きと同じです。 true に設定すると、ビットマップピクセルに randomSeed 値が適用され、イメージからすべての色が効果的にウォッシュアウトされます。デフォルト値は false です。

  • offsets (配列):各オクターブの x オフセットと y オフセットに対応するポイントの配列です。オフセット値を操作することで、イメージのレイヤーをスムーズにスクロールできます。 オフセット配列内の各ポイントは、特定のオクターブノイズ関数に影響を与えます。 デフォルト値は null です。

次の例では、 perlinNoise() メソッドを呼び出して緑と青の雲効果を生成する、150 x 150 ピクセルの BitmapData オブジェクトを作成します。

package 
{ 
    import flash.display.Sprite; 
    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.display.BitmapDataChannel; 
 
    public class BitmapNoise2 extends Sprite 
    { 
        public function BitmapNoise2() 
        { 
            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); 
        } 
    } 
}