


大家好,我是每天在家吃了睡睡了吃还能把自己饿到只剩一口气的芥,因为太饿了所以这两天一直不清醒处在半梦半醒之间,我这样讲道理的人肯定是宁鸽不水,哦不,宁缺勿滥。咕咕咕

好了今天来给大家带来的是【Pixel Processor】的衍生节点【Warp】。
首先要给大家整理一下思路,可能很多刚接触这些东西的小伙伴在看完上两期之后已经有点晕了,这里我们梳理一下。
首先【FX-map】因为提供了迭代这个关键的结构,所以它是一个很无敌的节点甚至可以模拟【Pixel Processor】,这是为什么我把它成为【太极】。但是无敌的可能性不代表实用,所以又分裂出了【Pixel Processor】和【FX-map】一阴一阳,用被动和主动两种绘制模式高效的分担了实际任务。接下来他们再衍生出一系列基本节点,这些基本节点基本就奠定了整个SD的制作思路了,当然我们现在已经可以看到世界各国的朋友们发挥了自己的奇思妙想把SD玩出了花。
【两仪生四象】主要就是讲这些基础节点的,其实都是些很简单的节点,主要还是其中蕴含的思路承上启下,这个教程是带大家认识SD的不得不讲。也是因为简单所以容易枯燥,所以这期我的文风会飘逸那么一 nei nei 。以后我会讲讲我使用SD的那么一 nei nei 经验和理解。

1、【Warp】
为什么我们上期要讲【Normal】这个似乎根本不用自己实现的节点呢?因为我们还真的需要时不时实现法线或方向,比如今天的【Warp】。我想在看过上期之后你对法线至少有了初步的认识,今天这些知识就能排上用场了。
同样先看官方的【Directional Warp】。

两个图形缩放0.5,Warp强度80。很好理解【Directional Warp】就是将采样坐标偏移一定的距离,距离就是第二个输入的纹理明度乘Warp强度,【DeriDirectional Warp】是定向的,方向是节点属性的角度值。


但是这样的【Warp】是没有灵魂的。我们来看看真正的【Warp】是怎样的朋克。

强度小

强度中

强度大


强度大

强度中

强度小
随着强度的变化得到的图像发生了各种奇妙的变化,这也正式滤波器的魅力所在。除了法线这种纯数学直男节点,也有这种看起来不讲道理完全跟着作者的脑洞在抽象和现实之间反复横跳的朋克节点,你永远都不知道这个人下一秒可能用【Warp】做出什么神仙图。如果你不理解它的原理,那这就是【Warp】黑箱,薛定谔的节点。当然即便你理解了你的思维也不一定能跟得上【Warp】的车速,毕竟这么骚的节点可不是一般人能掌控的,稍不注意还会被它降智打击,搞得自己好像一个智障。
那么今天我们就来吃透它。
刚才我已经介绍了【Directional Warp】,但是这个节点非常没意思,因为它是一个阉割版的【Warp】。你可能觉得不是这样毕竟【Directional Warp】的属性还更多啊,【Warp】只有一个强度属性你不会说反了吧?这么想说明你还没理解本质。
【Warp】是个滤波器,它采样,它处理,它输出。不对!它没有处理!它就直接输出了!?是的,你的图改变了却没改变,图像虽然变了但是图案还是那个图案 ,就算它变得再抽象它还是原来那个它。改变的不是图案,而是这个世界看待它的方式。
【Warp】既然不处理,那它唯一可以动手脚的地方就只有向采样器输入的坐标,【Warp】有两个基本属性,【方向】和【距离】即往什么方向偏移多少距离去采样隔壁家的像素,而且不止是隔壁它还可以包机去采样隔壁象限。
我们用坐标值来看透它到底采的是哪个像素。

连出UV坐标,把它作为纹理输入【Warp】。

现在我们看到了【Warp】做了什么,下方输入的纹理提供了方向和距离,设置里控制总强度,最后得到了类似放大镜的效果,之所以是放大镜的效果是因为提供方向的纹理3D结构类似凸面镜。
常识可知,在二维空间中向量应该是二维的,但是决定向量的纹理却是单通道的并不包含向量信息。所以我们还要自己算出向量来。
简单解法,加一个【Normal】。


把Normal的XY分量乘一个系数加到采样坐标后得到了类似的结果,然而其实还是有那么一 nei nei 的差别。


他们的偏移方向其实是反的,这是因为它们各自生成的方向是相反的,我就不深究为什么【Warp】用这个方向了,先修正这个问题。


又来到优化(重做)时间。

显然我们不可能在外面放一个【Normal】节点,明明一个节点就能搞定的事。而且Normal还计算了W/Z轴,显然浪费算力。
这里我要介绍我的朋克法线,(被骂了不要说我教的)。众所周知法线就是方向加距离,而且是三个分量组成。鉴于实际高度通常鬼都搞不清,我们干脆就抛弃高度单位,我们回到向量的数学底层分别求出XY两个分量的高差用作XY分量,Z随便填多少默认值是1,只要XY比例不变,Z就只是缩放问题。
还是和上一期一样采样四周的像素,计算同轴两两的差值。


可以看到除了对比度较高以及这里看不出来的四向感较强总体来说可以做到以假乱真,而且这个计算量小得多会让我们的Graph更流畅,如果想要更真实一点你可以单位化法线,做出Z轴来。

但是这种法线毕竟是假的,所以就点到为止,但是它的方向是没问题的。

倒不如说效果更接近【Warp】了,现在我们把不需要的Z轴相关计算都去掉,填上0。


我按习惯把采样的纹理放上面,向量纹理放下面。


我把向量纹理从input0换到了input1,在采样器这里也要改过来,input0在我这里现在是被采样纹理。
最后把向量乘一个系数加到被采样纹理坐标上,采样输出就完成了。注意这里其实还有一个控制方向的系数,在这里是16,这个值会影响法线强度,进而不同像素间向量比值会改变产生很大影响,你可以把这个参数暴露出去做一个朋克【Warp】2.0。

Warp强度当然是自定义一个参数然后get,不要忘了法线的方向和【Warp】是反的,你如果在意方向的话要调换一下减数和被减数。

至此我们已经实现了【Warp】。

如果你是初学者我猜你现在学会了实现【Warp】但是却不会用【Warp】,现在就来简单演示它的一些效果。

像不像超广角透视下的三维空间。

是不是有那味了。

实际上它完全是靠纹理支撑的,甚至连置换都没有。


生成图案并变化。

划痕。

还有最常见的扭曲。
【Warp】作为最基础的节点之一,千变万化拥有无穷的可能性,实用中没有限制只要你能摸索到特别的技巧就能开发它的新用处。不仅可以Warp别的节点,核心之一还能Warp自己,它会得出什么结果也不是经验寥寥的人能预想的,实在是节点中的朋克之王、抽象大师,你永远想不到明天又会有人开发出【Warp】的什么新玩法。
下期就讲【FX-map】,因为是基本教程,感觉好像没啥好讲的,因为我没想到什么特别有意思的玩法,到时候想到什么就写什么吧。
