原文:http://www.pixelbender.cn/?p=43
Pixel Bender 着色器使用简介
Adobe Pixel Bender 是一种编程语言,用于创建或操作图像内容。您可以使用 Pixel Bender 创建一个内核 (在本文档中亦称之为着色器 )。着色器定义了一个可对图像的每个像素单独执行的单一函数 。对该函数的每次调用 都将得到图像中该像素坐标处 的输出颜色 。可通过指定输入图像 和参数值 来自定义该操作。在着色器的单次执行 中,输入值 和参数值 是不变 的。唯一发生变化的是像素(其颜色 是函数调用 的结果 )的坐标。
对多个 输出像素坐标调用着色器函数时,将尽可能采用并行 方式。这样会改进着色器性能,提供高性能的处理能力。
在 Flash Player 和 Adobe AIR 中,使用着色器可轻松创建三种类型的效果:
* 绘制 填充
* 混合 模式
* 滤镜
* “Generic number crunching” :使用shader可以处理一组数据(包含复杂的数学运算),功能强,速度快。跟平常使用shader不同,你传递二进制数据 进去,用指定的算法处理这些数据,然后返回处理后的二进制数据 。
着色器也可以按独立模式执行。使用独立模式 时,将直接访问着色器的结果 ,而非预先指定着色器的用途。结果可以按图像数据 或者二进制 或数值数据 的形式访问。该数据完全不必是图像数据。这样一来,您可以为着色器输入一组数据。着色器将处理该数据,然后您可以访问着色器返回的结果数据。
Pixel Bender 着色器常见任务
以下是您可能会在 ActionScript 中使用滤镜完成的任务:
* 将着色器加载到正在运行的 SWF 应用程序中,或者在编译时嵌入着色器并在运行时访问它。
* 访问着色器元数据
* 为着色器标识并指定输入值 (通常为图像)
* 为着色器标识并指定参数值
* 着色器有以下几种使用方法:
o 用于绘制 填充
o 用于混合 模式
o 用作滤镜
o 按独立模式 使用
重要概念和术语
以下参考列表包含本章中会遇到的重要术语:
* 内核 :对于 Pixel Bender 而言,内核指的就是着色器 。通过 Pixel Bender,您的代码定义了一个内核,它定义了可对图像的每个像素单独执行的单一函数 。
* Pixel Bender 字节代码:编译 Pixel Bender 内核时,会将其转换为 Pixel Bender 字节代码 。Flash Player 或 Adobe AIR在运行时访问并执行字节代码 。
* Pixel Bender 语言:用于创建 Pixel Bender 内核的编程语言。
* Pixel Bender 工具包:用于依据 Pixel Bender 源代码创建 Pixel Bender 字节代码文件的应用程序。您可以使用该工具包编写、测试和编译 Pixel Bender 源代码。
* 着色器:在本文档中,着色器是指采用 Pixel Bender 语言编写的一组功能。着色器的代码会创建视觉效果或执行计算。在任一情况下,着色器都返回一组数据(通常为图像的像素)。着色器对每个数据点执行相同的操作,唯一的区别在于输出像素的坐标不同。
着色器不是用 ActionScript 编写的。它用 Pixel Bender 语言 编写,并编译为 Pixel Bender 字节代码。着色器可在编译时嵌入 SWF 文件,也可在运行时作为外部文件加载。无论采用上述哪一种方式,都要在 ActionScript 中访问着色器 ,方法是先创建一个 Shader 对象 ,然后将其链接到着色器字节代码。
* 着色器输入 :一种复杂的输入,通常为位图图像数据 ,该数据提供给着色器供其计算之用。对于着色器中定义的每个输入变量,着色器的整个执行过程都使用单一变量值(即,一个图像或一组二进制数据)。
* 着色器参数 :提供给着色器供其计算之用的单一值(或限定的值集合)。着色器的每次执行中都会定义各个参数值,该值在着色器的整个执行过程中保持不变 。
数据类型简介:
常用函数:
outCoord ():获取当前像素的坐标值。
float 2 pos = outCoord();
sampleNearest ():对图片像素点进行取样,第一个参数是输入图片,第二个参数是float2坐标值,找到最接近 float2的那个像素,返回该像素值
dst = sampleNearest(src, outCoord());
sampleLinear ():(sample ())找到最接近取样点的四个像素 ,然后取他们的平均值 (采用双线性内插值法),效果更圆滑
distance ():计算两个float2之间的距离
float2 pos = outCoord(); float dist = distance(center, pos);
sin (x), cos (x), tan (x), asin (x), acos (x), atan (x), exp (x)(e的x次方), log (x), pow (x, y)(x的y次方), sqrt (x)
min(x, y, a) :返回对x和y进行线性插值即(x * (1.0 - a) + y * a)后的结果
参数设置:可以让Pixel Bender在运行时修改变量值
parameter float myValue < // 默认最小值0、最大值1 和 开始值0 minValue: 0.0; maxValue: 100.0; defaultValue: 50.0; >;
PS:
1. 以下三组数据等价
2. Pixel Bender Toolkit规定输出 必须是三通道 类型:"output pixel3 result"