《Adobe Pixel Bender Kernel Filter Writing Tutorial》中文版

翻译自《Adobe Pixel Bender Kernel Filter Writing Tutorial》一文
译者:
Y.Boy
原文:http://www.pixelbender.cn/?p=3

Adobe Pixel Bender Kernel Filter编写指南 这个指南假设你已经安装了Adobe Pixel Bender toolkits并且具备图片处理的基础知识

步骤一:熟悉Pixel Bender toolkit
        打开Pixel Bender toolkits软件,它由三部分组成,如下图所述:

1. 图片预览区—这个区域用来显示滤镜(filter)作用在图片上的最终 效果。要显示滤镜的最终效果,你必须 加载一张图片。可以在菜单栏的“File->Load Image 1…”选择你喜欢的图片。
2. Pixel Bender代码编辑器—这个区域里的东西就是Pixel Bender的源代码了。这个代码编辑器提供基本的代码编辑功能,包括:语法高亮,代码提示与自动完成。
3. 滤镜(Filter)参数用户界面—如果你所编写的滤镜需要接收参数,那么Pixel Bender Toolkit会自动创建一个用户界面来控制这些参数。
         补充:还有那个菜单栏,可让你设置一些东西。


步骤二:加载一张图片
        选择“File->Load Image 1…”,弹出一个 文件选择对话框,找到你想加载的图片并打开。Pixel Bender Toolkit支持JPEG和PNG文件格式。

步骤三:创建一个Pixel Bender kernel程序
        选择“File->New Pixel Bender Kernel Filter”新建一个滤镜(Filter),在代码编辑器里展示了一个具备基本结构的Pixel Bender kernel程序。默认情况下,这个新建的滤镜(Filter)只是一个基本但完整的滤镜,它并不会对图片产生任务效果。

步骤四:编写并运行Pixel Bender kernel程序
        现在,我们想实现这样的效果:把图片的各通道值减半( 译者注:通道有Alpha通道和Color通道;其中Color通道有Red通道、Green通道、Blue通道,Alpha通道是跟透明度相关联的)。在代码编辑器里找到下面第一行代码并替换为第二行代码:

请把:
        dst = sampleNearest(src,outCoord());
改为:
        dst = 0.5 * sampleNearest(src, outCoord());
        改完后请按代码编辑器右下角的“Run”按钮,运行查看效果。

步骤五:分开图片的通道
        在这一步,我们把其中的一行代码拆分为几行,以便把图片的通道分开。这次,把Color通道跟Alpha通道分开,只让Color通道值减半,而Alpha通道值不变。请在代码编辑器里修改以下代码:
请把:
        dst = 0.5 * sampleNearest(src, outCoord());
改为:
        float4 inputColor = sampleNearest(src, outCoord());
        dst.rgb = 0.5 * inputColor.rgb;
        dst.a = inputColor.a;
        新的代码里,第一行是把输入颜色(input color)保存在一个类型为float4的临时变量。这个float4变量的前三个通道为Red通道、Green通道和Blue通道,最后那个是Alpha通道。这些通道值可以使用点语法获得,像新代码的第二、三行那样。

步骤六:修改滤镜(Filter)运算符以实现曝光
        在这一步,我们使用一些运 算法则来实现曝光效果,就像使用Adobe Lightroom软件里的Exposure功能一样。为到达到曝光效果,我们使用内置的pow() 函数,对Color通道进行指数运算(更多内置函数请查看Pixel Bender手册)。
请按以下所示修改代码:
请把:
        dst.rgb = 0.5 * inputColor.rgb;
改为:
        dst.rgb = pow(inputColor.rgb, float3(0.5));
        我们把inputColor.rgb这三个通道值传递给pow()函数作为参数。能够这样做是因为pow()函数支持float、float2、float3以及float4类型。最后还有一个关键的地方,就是我们必须把常数0.5放进float3()构造函数里,因为pow()函数里两个参数的类型必须一致。

步骤七:抽出曝光值作为参数
        现在,我们把那个曝光值(pow()函数的第二个参数)抽出来作为参数,这样我们就能够控制这个曝光值了。请把以下这一行代码添加到void evaluatePixel()函数前面:
parameter float exposure;
然后,请按以下所示修改代码:
请把:
        dst.rgb = pow(inputColor.rgb, float3(0.5));
改为:
        dst.rgb = pow(inputColor.rgb, float3(1.0 - exposure));
        现在,请按一下“Run”按钮运行一下,你应该在右边的滤镜参数用户界面里看到一条滑动条。尝试拖动它来修改曝光值,观察图片的变化。此时,曝光值的范围是0到1。曝光值为0时表示没有曝光,值为1时表示完全曝光,这也解释了为什么pow()函数第二个参数为float(1.0-exposure)而不是float(exposure)。

步骤八:限制参数值的范围
        当你运行步骤七时,你会发现,无论怎样改变滑动条的值,你都只能让图片更光而不能变暗。这是因为曝光值的范围在0到1。现在,我们给参数一个范围,让图片更具表现能力。
请把:
        parameter float exposure;
改为:
        parameter float exposure
        <
        minValue:float(-0.5);
        maxValue:float(0.5);
        defaultValue:float(0.0);
        >;
        这里使用了参数元标签来定义参数的范围和默认值。现在,曝光值在-5到5之间,可以是负数了,那就是说,图片不但能变光亮,也能变暗了。
(以上代码片段里的“defaultValue:float(0.0);”为译者修改过后的结果,原英文版为错误的“float(0.0);”)

完整代码:
<languageVersion : 1.0;>
kernel NewFilter
<
        namespace : “your namespace”;
        vendor : “your vendor”;
        version : 1;
        description : “your description”;
>
{
        input image4 src;
        output pixel4 dst;
        parameter float exposure
        <
                minValue:float(-0.5);
                maxValue:float(0.5);
                defaultValue:float(0.0);
        >;
        void evaluatePixel()
        {
                float4 inputColor = sampleNearest(src, outCoord());
                dst.rgb = pow(inputColor.rgb, float3(1.0 - exposure));
                dst.a = inputColor.a;
        }
}

See also:
        Pixel Bender toolkit Install/Wiki: http://www.adobe.com/go/pixelbender_toolkit

其实,Pixel Bender的书不是很多,单单为它写一本书又好像牛刀小用...

关于Pixel Bender,推荐这里:www.PixelBender.cn

最新的《AdvancED ActionScript 3.0 Animation》第9单有讲Pixel bender,英文版已经弄到手,

 

转自:http://flash.9ria.com/thread-19768-1-1.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游鱼_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值