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

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입니다.

다음 예제에서는 비트맵 이미지를 생성한 후 이 이미지에 파란색 노이즈 패턴을 적용합니다.

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() 메서드는 알고리즘을 통해 텍스처를 생성하기 때문에 비트맵 기반 텍스처보다 사용되는 메모리가 적습니다. 그러나 프로세서 사용에는 영향을 주므로 내용이 느리게 표시될 수 있으며 그 결과 특히 오래된 컴퓨터에서는 화면이 프레임 속도보다 느린 속도로 다시 그려집니다. 이와 같은 문제는 주로 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 객체를 만듭니다.

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);