Pixel Bender 着色器基础知识

原文: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 对象 ,然后将其链接到着色器字节代码。
    * 着色器输入 :一种复杂的输入,通常为位图图像数据 ,该数据提供给着色器供其计算之用。对于着色器中定义的每个输入变量,着色器的整个执行过程都使用单一变量值(即,一个图像或一组二进制数据)。
    * 着色器参数 :提供给着色器供其计算之用的单一值(或限定的值集合)。着色器的每次执行中都会定义各个参数值,该值在着色器的整个执行过程中保持不变


数据类型简介:

 

  • 基本类型:bool、int、float,相当于as里的Boolean、int、Number(使用float的时候必须带小数点,不然编译不通过)
  • 四通道 :红(red)、绿(green)、蓝(blue)、透明(alpha)
  • 通道值范围 :0 - 1
  • image4 :代表一张具有四通道的位图
  • pixel4 :代表一个具有四通道的像素
  • float2 :存放2个float变量(float3、float4 依次类推)
  • pixel4.r :获取红色通道的值(pixel4.g、pixel.b.、pixel4.a 依次类推)
  • float4.x :获取float4中的第一个值(float4.y、float4.z、float4.w 依次类推)
  • myPixel.rgb :返回一个pixel3 变量,包含red、green和blue通道值
  • pixel3(0.5) :表示rgb三个通道的值都是0.5

 

常用函数:

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. 以下三组数据等价

  • r, g, b, a
  • x, y, z, w
  • s, t, p, q

2. Pixel Bender Toolkit规定输出 必须是三通道 类型:"output pixel3 result"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值