《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

本节书摘来自异步社区《点睛:ActionScript3.0游戏互动编程》一书中的第2章,第2.3节,作者:游志德 , 彭文波 更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.3 使用斜角滤镜模拟Photoshop的斜面样式

滤镜列表中,【斜角】似乎最接近斜面的含义,我们不妨点出来看看,如图2-45所示。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

嗯,是这个效果了。现在把Photoshop的斜面样式重新打开,我们按之前对Photoshop的设置来修改Flash里的参数。“大小”参数我们没有使用默认值,而是从原来的5改成了3。在Flash里我们也应用同样的设置,如图2-46所示。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

出来的效果并不好看。细心的读者应该不难发现,斜角滤镜加上以后,整个字好像带上了重影一样,第一眼看上去还以为是自己的眼睛出了问题。

我们把Flash舞台的背景颜色改深一点,各种越界的边缘便原形毕露,如图2-47所示。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

我们如果把斜角阴影区的颜色调亮,问题将会更加显著,如图2-48所示。

整个投影都被斜角的阴影部分覆盖了。

还记得之前提到的多滤镜的有序性吗?当一个显示对象被应用上了多个滤镜之后,它最终的效果会受到先后顺序的影响。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

Photoshop的图层样式直接应用到原始图形上,样式之间互不影响,而Flash的滤镜则不同,如果当前对象已经设置了一个投影滤镜,那么,它下一个滤镜的作用范围将会包含投影滤镜的显示区域。

为了让大家看得更清楚,我们决定用一个简单的方块作为试验的材料。

2.3.1 用方块观察斜面样式与斜角滤镜作用方法的差异
我们在Photoshop和Flash里都各自建一个500500的空白文件,然后各自在画布中心绘制一个纯蓝的(#0000FF)、100100大小的方块(不懂得如何完成以上操作的朋友,可自行查阅相关的入门教材),然后Flash那边再多做一步,按F8转换为元件,类型选择“影片剪辑”。

为了最大限度上减少对本课题的干扰,创建的投影应力求做到最简单,最干净。为此,我们把Flash投影滤镜中的模糊值设置成0并且把颜色调亮(#00cc00),距离也拉开到30像素,如图2-49所示。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

在Photoshop里我们也制作这样的一个投影,如图2-50所示。

下面我们分别给这两个图形添加浮雕效果,Flash用斜角滤镜,Photoshop用斜面和浮雕,如图2-51、图2-52所示。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

可见,两者最大的差别在于,Flash把投影部分都弄出斜面来了,但Photoshop的浮雕丝毫不影响投影样式的效果。

通过这样的一个试验,相信大家都能理解文字上的斜角滤镜为什么会越界了吧。

解决Flash斜角滤镜问题的方法很简单:只要把斜角滤镜拖到投影之前,斜角就不再作用于投影了,如图2-53所示。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

我们回过头来给文字作出同样的修正,如图2-54所示。

《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

边缘的问题解决了,但斜角的边缘并不光滑,尤其是转角较多的区域更显得凹凸不平。

我们试着把其他可模拟的参数都调成跟Photoshop的相一致,比如角度,按投影的做法,应改为60度;然后就是颜色了,Photoshop高光和阴影的alpha默认都等于75%,我们让Flash也跟着改一下;再者,干脆把品质也往“高”里调一下。

修改以后的效果如图2-55所示。

没有明显的改善,浮雕的高光和阴影还是太重了,那么,差距还在哪里?


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

**
2.3.2 Photoshop斜面样式的精雕细琢VS Flash斜角滤镜的粗制滥造**
我们先把没对应上的参数一一列出来。

Photoshop:样式,方法,深度&方向,软化,阴影高度,(等高线)。

Flash:强度,距离,类型,(挖空)。

做到这一步,我们很纳闷,为什么Flash斜角滤镜的参数又是这些?看起来跟投影好像没什么两样。

括号部分的参数我们暂时先排除掉。等高线我们没有编辑过,它默认也用线性图,我们姑且认为它对效果没有任何影响;而挖空几乎与滤镜结构无关,也能排除。

Photoshop的样式显示为“内斜面”,以下拉列表框的形式供用户选择,与Flash中的【类型】下拉框最为接近。我们分别展开这两个框看看余下的选项,如图2-56、图2-57所示。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

两者都包含内外的选项,而且所要做的事情也基本一致。Photoshop比Flash多了三类样式,效果也都相当细腻,是Flash简单滤镜所无法比拟的,鉴于篇幅所限,效果图我们就不贴上来了。而Flash则比Photoshop多了个“全部”,实际上它仅仅是内外斜角的总和,而非一个全新的样式,放在这里有凑数的嫌疑。

但至少我们看到了“内斜面”和“内侧”的含义基本一致,只是Flash处理得比较粗糙而已。因为切换到外侧后,浮雕效果也都跑到文字轮廓以外,切换前则出现在轮廓以内。

图2-58、图2-59分别展示了Photoshop和Flash的外斜面效果。

E:desktopAS3 Text Effectssnapshots第4章4.2Photoshop外斜面.tif


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

如果大家也在测试这个效果,那现在都还原为内斜面吧,我们继续探讨其他属性。

“方法”在Flash里找不到对应选项,难不成对应品质?我们不妨把品质设置为高,如 图2-60所示。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

我们可以看到,边缘稍稍模糊了一点(如果看不到明显效果,就试着把模糊的数值调大一些),这就是Flash传说中的“平滑”?我们来看看Photoshop的方法选项。

图2-61自上而下地展示了Photoshop【方法】下拉框的3个选项的效果(平滑、雕刻清晰、雕刻柔和)。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

不管选用何种方法,其品质都是无可挑剔,所不同的是浮雕的清晰程度。大家可以把大小参数调高一点来欣赏Photoshop的细腻之美。

相比之下,Flash的斜角就显得比较虚了,它对边缘的处理方式跟投影的做法很像。最终,这一猜想也得到了Flash帮助文件的证实,所谓的品质,也是指模糊的次数。

而Photoshop的做法则大相径庭,这一点可以从Photoshop的帮助文件得知。

帮助文件对这3种模式的描述分别如下。

平滑:稍微模糊杂边的边缘,可用于所有类型的杂边,不论其边缘是柔和的还是清晰的。此技术不保留大尺寸的细节特征。

雕刻清晰:使用距离测量技术,主要用于消除锯齿形状(如文字)的硬边杂边。它保留细节特征的能力优于“平滑”技术。

雕刻柔和:使用经过修改的距离测量技术,虽然不如“雕刻清晰”精确,但对较大范围的杂边更有用。它保留特征的能力优于“平滑”技术。

从文字上看,只有“平滑”方法跟Flash的处理方式相似。也就是说,Flash在这里只做了一件事,而且做得还不如Photoshop专业,即使把品质设置为高,也还没有Photoshop的“平滑”模式来得好看,有点投影模糊的味道。我们怀疑斜角和浮雕会不会就是同一套东西(第3章我会深入探秘这一问题)。

至于Photoshop的【方向】,不难理解,就是指定斜面的凹凸状态,将“上”改为“下”以后,阴影和高亮区的颜色将会对调,从而形成凹陷的效果。

我们暂且不追究该选项,继续看下去。

2.3.3 Photoshop深度==Flash强度?
下一项是【深度】,我们用排除法对应上了强度。这次跟投影的不一样,深度可以小于100%。但不管如何,我们先试着把深度都调到一个很大的数值,比如1000%,如图2-62、图2-63所示。

在Photoshop里,浮雕的高度明显增大,而且棱角相当清晰。Flash虽然也明显地凸了起来,但已经彻底失控了,又是数值过大所致?


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

我们将数值调小点,150%?200%?效果始终没好看过,如图2-64、图2-65所示。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

从色彩的变化来看,强度似乎就是对边缘做了加强,其变化方式跟投影的强度也比较像,难道这两个滤镜的强度概念又是一样的?

就目前来说,我们还不能给强度和深度拟出一条关系式。

不过庆幸的是,强度不大于100%的情况下,两者的表现尚算相似,至少色彩的浓度比较接近,如图2-66所示。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

下一项是“软化”,难道该属性才对应强度的参数?

经测试,软化的确也降低了强度,但它会通过扩散的方式让浮雕变“软”,图 2-68展示了软化5像素后的效果。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

2.3.4 Photoshop高度==Flash距离?
现在剩下“高度”一项了,跟“距离”相对应吗?

但是,高度以角度为单位,距离则是像素,两者似乎扯不上关系。不过我们照样做下试验。

我们先测试Photoshop的高度。在调整的过程中,我们发现,浮雕的厚度并没有随着高度的增加而变大,只感觉到光影往某个方向微妙地移动着。

图2-69、图2-70、图2-71、图2-72、图2-73、图2-74、图2-75展示了不同高度下的效果。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

从0°~90°,光照反射最强的区域(高光区)沿着斜面逐渐上行,到90°刚好跟斜面最高点重合。因为此时只剩一个像素,所以高光几乎不可见。

从这种现象来看,我们可以把它理解为光线与水平面的夹角。虽然我无法给出严格的数学证明,但通过图2-76,我们仍可看出一些大致的趋势,其中标记为红色的光线与斜面垂直,光照最强。红线在斜面上的高度会随着光线角度的增大而提升。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

那么,Flash里的距离呢?

调整一下,我们发现基本上就在平移,压根儿就没有光照的意思,如图2-77、图2-78、图2-79、图2-80及图2-81所示。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

显然只是简单的移位(跟投影的距离是同一概念吗?),不过我们有了意外发现:距离等于3的时候,整体效果与Photoshop的斜面有点接近,而3又恰好等于模糊的值,难道这两者在Photoshop里面还有所关联?

笔者在拖动距离这项参数的时候,曾不经意地发现,距离变化的时候,有两团交错重叠的光影来回穿梭于文字之间。拖慢一点,我们就会发现它们各自的作用:白色那团用于构造高亮区,黑色层则用于生成阴影部分。

下面我们就来测试下拖动Photoshop的“大小”参数是否也有类似的变化。

2.3.5 Photoshop大小==Flash模糊?
确实我们也感觉到有两团云雾交错穿梭于字符轮廓之间,但它会随着大小参数的增大而逐渐消散。我们可以这么解释:Photoshop的“大小”是Flash里“模糊”和“距离”合并的结果。在Photoshop里调整了大小以后,Flash必须同时设置模糊X、模糊Y和距离这3个属性,才能在这一参数上模拟出Photoshop斜面的效果。Photoshop之所以不把它们分开,大概是考虑到两者不相等会给外观带来太多的不协调(Flash斜角滤镜就已经印证了这一点)。

为进一步证实这一结论,我们再拿几个值测试一下,受篇幅所限,书上只给出大小等于5的效果,如图2-82、图2-83所示。


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式


《点睛:ActionScript3.0游戏互动编程》——2.3 使用斜角滤镜模拟Photoshop的斜面样式

至此,斜面的样式给勉强模拟了出来。最后还剩一项——渐变叠加,它在Flash里无法用这些简单滤镜来模拟,我们将在后续章节再作介绍。

上一篇:23、深入理解计算机系统笔记,虚拟存储器,存储器映射


下一篇:人间无敌的电脑跳棋程序