欢迎光临散文网 会员登陆 & 注册

【Aegisub】湍流置换与置换图介绍

2023-05-03 15:51 作者:多华宫与火火里  | 我要投稿


        这次来介绍很有用的湍流置换与置换图是什么。图1.01可以利用图1.02变成图1.03的样子

图1.01
图1.02

这就是置换图简单的应用。置换图(Displacement Map)有很多种名称,比如置换贴图、置换映射。对于三维模型来说,经常可以利用置换图让模型顶点沿法线方向移动,从而改变模型原本的形状。但是当然对于二维的情况,平面的一张图不存在"高度"啥的,当然此时置换图就不是用来改高度了,而是可以使平面的点进行相应的平移、旋转等等。

三维的情况,使一个桶的形状发生改变

好吧,具体怎么用一张置换图去改变另一张图呢?假设有一张置换图A,就先假设A是一张灰度图吧,还是设0是黑色1是白色,图A上每一个点当然都对应一个数值,那么就可以利用这个数值来改变另一张图里像素点的位置了!假设图A能完全覆盖住另一张图为B,也就是说,对于图B里任意一个像素点(x,y)都可以知道它在图A里对应的数值(如灰度),那就可以利用这个值来偏移(x,y)这个像素点的位置,比如这一点在A中对应的数值是0.5(刚好是0到1中间)、那么(x,y)就不移动;如果这一点在A中对应的数值是0.3、那么就让(x,y)在x方向上移动0.3-0.5=-0.2个单位(不要在意浮点数坐标,这不是重点)、当然你也可以再乘以一个倍数、比如可以让其在x方向上移动47 * -0.2个单位;如果这一点在A中对应的数值是0.88、那么就让(x,y)在x方向上移动0.88-0.5=0.38个单位、同样的你觉得偏移太小也可以再乘同一个倍数。所以,对于图B的每一个像素点,都可以获取该点在图A中对应的数值,用该数值偏移图B里的像素点坐标即可。

        比如图A在右边、图B在左边,原本是这样的:

图B(左)、图A(右)

这里为了方便看,将两个图这样摆的,但是当然实际上图A的位置应该和图B重合,因为对于B里一点(x,y)要里用这一点在图A里对应的数值来进行偏移,所以图A和图B的位置当然会影响结果了。现在利用图A改变图B,让图B里的点在x、y方向上都有偏移吧,设定偏移程度是40(就是刚刚说的乘以的倍数),这样就得到了:

图B(左)、图A(右)

先说为什么会这样,再说一些其它的细节。首先图B中,靠近顶部的点在A中偏黑,也就是对应的数值小于0.5、那么这些点就会偏移一个负值、因为设定在x、y方向上都要偏移,所以靠近顶部的点朝移动了,当然越远离顶部的点偏移就越小了(因为其对应数值更接近0.5这个中间值),同样的,在越靠近底部的时候,A中的点数值越接近1、数值大于了0.5,所以偏移一个正值、那么靠近底部的点就往移动了(因x和y都加了一个正数嘛),当然越靠近中间高度的点、偏移就越小、因为那些点越接近中间的灰色、对应的数值越接近0.5。然后,再讲一些细节,就是说,如果图B有宽高的限定(比如图B就只是200X200的图),那么在图B经过了变形以后,有一部分的点可能已经偏移出了图的限定范围外,如:

这种时候可以从图像的另一侧环绕像素,就是说漏掉的像素可以再以某种计算方式补回来。再来理解一下,假设图A图B都是像素图,用图A改变图B里像素点的位置,比如让图B里的(x,y)变到(x1,y1)的位置,但这样导致的问题是,(x1,y1)不一定在图B内部了、图B里原本的像素点位置移动跑来跑去以后,可能图B里不是每个坐标上都有一个像素点了,所以说,此时可以用一些各种各样的计算方式、来选择补齐剩下的位置都"填充"成什么样。

        再举例,如果图A是全黑的话,如果原本是这样的:

然后偏移图B的点,x、y方向上都偏移、偏移程度为40,就有

为什么会这样,当然就很好理解了,黑色的话,对应0、小于0.5,偏移的数值为负的,由于图B里每一个(像素)点对应的数值都是一样的0(图A里的),所以B里每一个点的偏移数值都是一样的,所以说,每一个点在x方向上偏移了(0-0.5)*40 = -20像素、在y方向上偏移了(0-0.5)*40 = -20像素,理所当然的图B里的文字形状没有发生改变。

        再来举例,如果原本是这样的:

图B里的文字中心和图A里的圆心并没有刚好对齐

然后偏移图B的点,x、y方向上都偏移、偏移程度为20,就有

因为文字的右上部分大概在图A的圆心附近,所以看到这一部分向左上有明显的偏移(因为设定在x、y方向上都偏移、越黑当然就越往左上了),然后比如文字下面的部分,这些点对应的数值接近1、所以就朝着右下偏移了。

        所以,对于这样的偏移,计算的方法当然都是一样的,假设置换图的每个点都对应一个0到1的数字val,假设x方向的偏移程度是sx、y方向的偏移程度是sy,那么被改变的图像的每个像素点会在x方向偏移(val-0.5)*sx,会在y方向偏移(val-0.5)*sy

        除了简单的移动像素以外,还可以利用置换图用其它方式改变另一张图。比如进行缩放和旋转的处理。

如上图,黑一些的部分缩小了白一些的地方放大了。

        当然除了这种"黑白"的置换图以外,置换图也可以是彩色的,也就是说置换图有RGBA(红绿蓝透明度),利用这个置换图去改变另一张图。其实也一样的简单,比如可以设定x方向按照R通道来偏移、y方向按照G通道来偏移,或者x方向按照R通道来偏移、y方向按照B通道来偏移等等等等。其实很简单,仔细想想就相当于用两张"黑白"的置换图来改变一张图而已。

        因为可以用置换图改变另一张图的每一个像素,所以也可以用置换图改变一个矢量绘图(实际上前面示例图都是改变的文字矢量图而不是一堆像素),当然这样直接变形矢量绘图的效果和改变像素图的效果是不一样的,因为变形矢量图只是改变了矢量图的命令点的位置而已,和改变每个像素的效果有偏差很正常。但是就单纯地扭曲矢量绘图也能做出不少的效果了:


【Aegisub】湍流置换与置换图介绍的评论 (共 条)

分享到微博请遵守国家法律