패키지 | flash.display |
클래스 | public class Shader |
상속 | Shader Object |
하위 클래스 | ColorBurnShader, ColorDodgeShader, ColorShader, ExclusionShader, HueShader, LuminosityMaskShader, LuminosityShader, SaturationShader, SoftLightShader |
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
shader
속성에 Shader 인스턴스를 지정합니다.
셰이더는 한 번에 한 개씩 이미지의 모든 픽셀에서 실행되는 함수를 정의합니다. 함수에 대한 각 호출의 결과는 이미지에서 해당 픽셀 좌표의 출력 색상입니다. 셰이더는 한 개 이상의 입력 이미지를 지정할 수 있습니다. 이러한 이미지의 내용은 함수의 출력을 결정하는 데 사용될 수 있습니다. 셰이더는 또한 한 개 이상의 매개 변수를 지정할 수도 있습니다. 이러한 매개 변수는 함수 출력을 계산하는 데 사용될 수 있는 입력 값입니다. 단일 셰이더 실행에서 입력 및 매개 변수 값은 상수입니다. 변경되는 유일한 요소는 색상으로 함수 결과를 나타내는 픽셀의 좌표입니다. 셰이더 함수는 여러 출력 픽셀 좌표가 동시에 실행하도록 하여 셰이더 실행 성능을 향상합니다.
셰이더 바이트 코드는 런타임에 URLLoader 인스턴스를 사용하여 로드할 수 있습니다. 다음 예제에서는 런타임에 셰이더 바이트 코드 파일을 로드하여 Shader 인스턴스에 연결하는 방법을 보여 줍니다.
var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, onLoadComplete); loader.load(new URLRequest("myShader.pbj")); var shader:Shader; function onLoadComplete(event:Event):void { // Create a new shader and set the loaded data as its bytecode shader = new Shader(); shader.byteCode = loader.data; // You can also pass the bytecode to the Shader() constructor like this: // shader = new Shader(loader.data); // do something with the shader }
[Embed]
메타데이터 태그를 사용하여 컴파일 타임에 셰이더를 SWF에 포함시킬 수도 있습니다. 이 [Embed]
메타데이터 태그는 Flex SDK를 사용하여 SWF를 컴파일하는 경우에만 사용할 수 있습니다. 아래 예와 같이 [Embed]
태그의 source
매개 변수는 셰이더 파일을 가리키고, 해당 mimeType
매개 변수는 "application/octet-stream"
입니다.
[Embed(source="myShader.pbj", mimeType="application/octet-stream)] var MyShaderClass:Class; // ... // create a new shader and set the embedded shader as its bytecode var shaderShader = new Shader(); shader.byteCode = new MyShaderClass(); // You can also pass the bytecode to the Shader() constructor like this: // var shader:Shader = new Shader(new MyShaderClass()); // do something with the shader
어떤 경우에서든 원시 셰이더(URLLoader.data
속성 또는 [Embed]
데이터 클래스의 인스턴스)를 Shader 인스턴스에 연결해야 합니다. 앞서 예제에서 나왔듯이 이 작업은 두 가지 방법으로 수행할 수 있습니다. 즉, 셰이더 바이트 코드를 Shader()
생성자에 인수로 전달하는 방법이 있고, Shader 인스턴스의 byteCode
속성으로 설정하는 방법이 있습니다.
생성된 Shader 인스턴스는 다음과 같은 여러 방법 중 하나를 통해 사용할 수 있습니다.
- 셰이더 채우기: 셰이더의 출력은 드로잉 API로 그린 내용에 대한 채우기로 사용됩니다. Shader 인스턴스를
Graphics.beginShaderFill()
메서드에 인수로 전달하십시오. - 셰이더 필터: 셰이더의 출력은 표시 객체에 적용된 그래픽 필터로 사용됩니다. Shader 인스턴스를 ShaderFilter 인스턴스의
shader
속성에 지정하십시오. - 블렌드 모드: 셰이더의 출력이 두 개의 겹치는 표시 객체 간에 블렌딩으로 렌더링됩니다. Shader 인스턴스를 두 표시 객체 중 위에 있는 객체의
blendShader
속성에 지정하십시오. - 배경 셰이더 처리: 셰이더가 배경에서 실행되므로 표시가 고정될 가능성이 없으며 처리가 완료되면 이벤트를 전달합니다. Shader 인스턴스를 ShaderJob 인스턴스의
shader
속성에 지정하십시오.
셰이더 채우기, 필터 및 블렌드는 GPU 렌더링에서 지원되지 않습니다.
모바일 브라우저 지원: 이 기능은 모바일 브라우저에서 지원되지 않습니다.
AIR 프로파일 지원: 이 기능은 모든 데스크톱 운영 체제에서 지원되지만 휴대 장치의 경우에는 어떤 유형에서도 지원되지 않습니다. AIR for TV 장치에서는 지원되지 않습니다. 여러 프로파일 간 API 지원에 대한 자세한 내용은 AIR 프로파일 지원을 참조하십시오.
관련 API 요소
flash.display.Graphics.beginShaderFill()
flash.display.ShaderJob
flash.filters.ShaderFilter
flash.net.URLLoader
속성 | 정의 주체 | ||
---|---|---|---|
byteCode : ByteArray [쓰기 전용]
이 Shader 인스턴스를 위한 원시 셰이더 바이트 코드입니다. | Shader | ||
constructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다. | Object | ||
data : ShaderData
Shader 인스턴스를 위한 매개 변수, 입력 이미지 및 메타데이터에 액세스할 수 있게 해줍니다. | Shader | ||
precisionHint : String
셰이더가 수행한 수학 연산의 정밀도입니다. | Shader |
메서드 | 정의 주체 | ||
---|---|---|---|
새 Shader 인스턴스를 만듭니다. | Shader | ||
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 프리미티브 값을 반환합니다. | Object |
byteCode | 속성 |
data | 속성 |
data:ShaderData
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
Shader 인스턴스를 위한 매개 변수, 입력 이미지 및 메타데이터에 액세스할 수 있게 해줍니다. Shader 인스턴스가 생성될 때 셰이더에 대한 매개 변수를 나타내는 ShaderParameter 객체, 셰이더에 대한 입력 이미지를 나타내는 ShaderInput 객체, 그리고 셰이더의 메타데이터를 나타내는 기타 값이 동적으로 data
속성 객체의 속성으로 추가됩니다. 이러한 속성은 셰이더를 자세히 관찰하고 매개 변수와 입력 값을 설정하는 데 사용할 수 있습니다.
data
객체의 동적 속성을 액세스 및 조작하는 방법에 대한 자세한 내용은 ShaderData 클래스 설명을 참조하십시오.
구현
public function get data():ShaderData
public function set data(value:ShaderData):void
관련 API 요소
precisionHint | 속성 |
precisionHint:String
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
셰이더가 수행한 수학 연산의 정밀도입니다.
precisionHint
속성에 가능한 일련의 값은 ShaderPrecision 클래스의 상수에 의해 정의됩니다.
기본값은 ShaderPrecision.FULL
입니다. 정밀도를 ShaderPrecision.FAST
로 설정하면 정밀도는 낮아져도 수학 연산의 속도를 높일 수 있습니다.
full 정밀도 모드(ShaderPrecision.FULL
)는 모든 수학 연산을 수행할 때 IEEE 32비트 부동 소수점 표준을 철저히 준수하며 모든 플랫폼에서 일관된 비헤이비어를 제공합니다. 그런데 이 모드에서 삼각법 및 지수 함수와 같은 일부 수학 연산이 느려질 수는 있습니다.
fast 정밀도 모드(ShaderPrecision.FAST
)는 성능을 극대화하기 위해 개발되었지만 다양한 플랫폼 및 개별 CPU 구성에서 일관되게 작동하지 않습니다. 많은 경우 이 정도 수준의 정밀도는 인위적 결점 없이 그래픽 효과를 만드는 데 충분합니다.
정밀도 모드 선택은 다음과 같은 셰이더 작업에 영향을 미칩니다. 이러한 작업은 SSE 명령이 설정된 Intel 프로세서에서 속도가 더욱 빠릅니다.
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
atan(x, y)
exp(x)
exp2(x)
log(x)
log2(x)
pow(x, y)
reciprocal(x)
sqrt(x)
구현
public function get precisionHint():String
public function set precisionHint(value:String):void
관련 API 요소
Shader | () | 생성자 |
이 예제에서는 응용 프로그램의 출력 디렉토리와 동일한 디렉토리에 "donothing.pbj"라는 이름의 셰이더 바이트 코드 파일이 있는 것으로 간주됩니다. DoNothing 셰이더의 Pixel Bender 소스 코드는 ShaderData 클래스 예제에서 참조할 수 있습니다.
package { import flash.display.Shader; import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; public class LoadedShaderExample extends Sprite { private var loader:URLLoader; public function LoadedShaderExample() { loader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, loadCompleteHandler); loader.load(new URLRequest("donothing.pbj")); } private function loadCompleteHandler(event:Event):void { var shader:Shader = new Shader(); shader.byteCode = loader.data; // do something with the Shader instance } } }
이 예제에서는 응용 프로그램의 소스 코드와 동일한 디렉토리에 "donothing.pbj"라는 이름의 셰이더 바이트 코드 파일이 있는 것으로 간주되며, SWF를 컴파일하는 데 Flex SDK가 사용됩니다. DoNothing 셰이더의 Pixel Bender 소스 코드는 ShaderData 클래스 예제에서 참조할 수 있습니다.
package { import flash.display.Shader; import flash.display.Sprite; public class EmbeddedShaderExample extends Sprite { [Embed(source="donothing.pbj", mimeType="application/octet-stream")] private static var DoNothingShader:Class; public function EmbeddedShaderExample() { var shader:Shader = new Shader(); shader.byteCode = new DoNothingShader(); // do something with the Shader instance } } }
Tue Jun 12 2018, 03:17 PM Z