노이즈 함수를 사용하여 텍스처 만들기

Flash Player 9 이상, Adobe AIR 1.0 이상

noise() 메서드 또는 perlinNoise() 메서드를 통해 비트맵에 노이즈 효과를 적용하여 비트맵 모양을 수정할 수 있습니다. 노이즈 효과는 튜닝되지 않은 텔레비전 화면에 나타나는 잡음에 비유할 수 있습니다.

비트맵에 노이즈 효과를 적용하려면 noise() 메서드를 사용하십시오. 이 메서드는 비트맵 이미지의 특정 영역에 있는 픽셀에 임의의 색상 값을 적용합니다.

이 메서드는 다음 5개의 매개 변수를 사용합니다.

  • randomSeed (정수): 패턴을 결정하는 난수 초기값입니다. 이름과는 달리 이 숫자는 사실상 동일한 숫자가 전달될 경우 동일한 결과를 생성합니다. 따라서 의미 있는 임의의 결과를 얻으려면 Math.random() 메서드를 사용하여 이 매개 변수의 난수를 전달해야 합니다.

  • low (단위): 각 픽셀(0 ~ 255)에 대해 생성되는 최저 값을 나타내는 매개 변수로서, 기본값은 0입니다. 이 값을 낮게 설정하면 노이즈 패턴이 어두워지고 높게 설정하면 노이즈 패턴이 밝아집니다.

  • high (단위): 각 픽셀(0 ~ 255)에 대해 생성되는 최고 값을 나타내는 매개 변수로서, 기본값은 255입니다. 이 값을 낮게 설정하면 노이즈 패턴이 어두워지고 높게 설정하면 노이즈 패턴이 밝아집니다.

  • channelOptions (단위): 노이즈 패턴이 적용될 Bitmap 객체의 색상 채널을 지정하는 매개 변수로서, 네 가지 색상 채널 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 (단위): 이 노이즈를 생성하기 위해 결합할 옥타브, 즉 개별 노이즈 함수의 수입니다. 옥타브 수가 많을수록 보다 상세한 이미지가 만들어지지만 처리하는 데 시간이 오래 걸립니다.

  • randomSeed (정수): 난수 초기값으로 noise() 함수에서 작동하는 것과 같은 방식으로 작동합니다. 따라서 의미 있는 임의의 결과를 얻으려면 Math.random() 메서드를 사용하여 이 매개 변수의 난수를 전달해야 합니다.

  • stitch (부울): true 로 설정된 경우 이 메서드는 비트맵 채우기 작업 시 연속 타일링 텍스처를 만들어내기 위해 이미지의 가장자리를 매끄럽게 하려고 시도합니다.

  • fractalNoise (부울): 메서드에 의해 생성된 그래디언트의 가장자리와 관련된 매개 변수입니다. true 로 설정된 경우 해당 효과의 가장자리를 매끄럽게 하는 프랙탈 노이즈를 생성합니다. false 로 설정된 경우에는 난류가 생성됩니다. 난류가 포함된 이미지의 경우 경사면에서 불연속 선이 드러나기 때문에 불꽃과 파도 같은 시각적 효과를 만드는 데 적합합니다.

  • channelOptions (단위): channelOptions 매개 변수는 noise() 메서드에서 작동하는 것과 같은 방식으로 작동합니다. 또한 노이즈 패턴이 적용되는 비트맵의 색상 채널을 지정합니다. 네 가지 색상 채널 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); 
        } 
    } 
}