UE4_材质/纹理3

UV的平移

上一篇的实验知道了UV的实际结构是这样的:

 

 

然后还可以在R或者G的基础上增加数值使它发生偏移。(因为R/G的基础就是0到1)

比如这样

 

 

同时可以用之前提到的Time和Frac节点实现动态的改变

 

 

可以通过time乘一个小数来控制移动的速度

 

 

上面是UV移动的原理,其实蓝图里有封装好的节点Panner了:

还可以直接从红框里调节速度。(同样的,也可以把时间乘上一个值来控制速度)

 

 

UV的缩放

首先,把UV的取值都变成2(意思是取两次样,这样长和高都会变成原来大小的1/2)

 

 

 

 然后在X和Y轴上都平移0.5个单位,使一个图案居中

 

 然后只让中间这个显示,其他的隐藏

把他的采样改为最后一种:

 

 这样它的采样范围就是0~1,把各个节点的取值范围写一下:

 

 

所以其实应该是减0.5

 

 

但是可以看到,两边会有奇怪的拉伸,这是因为Mipmap导致的,如果是正常的贴图只要把mipmap关掉就可以了。(但我用的这张猫图不是标准比例,即2的n次幂,所以没用)

以上是原理,蓝图里也有现成的缩放方法 ScaleUV,倍数可以直接调,不过也需要修改取样方式为只取一个。

 

 

UV选区采样

比如下面这个数表,其实完全可以通过R/G的add来实现选取某个数字,但是如果我们想实现输入哪个数字就选取哪个区域,还是需要一点逻辑的

 

 

首先确定行,因为每行有四个元素,所以只要在Number的基础上乘0.25就可以了。如果我们输入5,5*0.25=1.25,大于1的部分会进入循环自动抹去,所以其实还是0.25,行是没有问题的。

 

然后列就不太好确定了,需要分支来确定到底是哪一行。

材质蓝图里没有Branch,所以要用到特有的 if 节点来判断输入。

可以看到,只要我们输入对应的数字,该UV就会通过移动把相应的数字移动到第一个位置。

 

 

然后我们只要把UV的采样区域缩小到一个数字的大小,就可以只显示数字了

 

 

进阶功能

假如,当我们输入一个数字之后,数字不会放大,而是把数表的其他数字隐藏起来,这样应该怎么实现呢

导入一张特殊处理的图片,

 

 

G通道存放数表

 

 

B通道存放遮罩

 

 

因为UE4里 黑色是0,白色(红色)是1,所以只要数表对应的数字与遮罩相乘,就可以只保留遮罩的这一部分了。

比如说这样:

 

 

然后就是把UV遮罩平移到我们想要的位置上

因为只移动遮罩不移动数字,所以我们需要两个该贴图,一个放数表 一个放遮罩。

遮罩可以用上面提到的 Panner节点,速度调到0.25,发现遮罩一直在向左运动(不会插GIF...),所以应该是-0.25

 

 

但它还是会一直移动,只要我们把Time设为1就可以确定位置了。

 

 然后我们可以用上面调整单个数字的经验来调整遮罩的位置。

 

 

 

 

为什么要加上1-x:因为Speed的正方向是左,反方向是右(上面的-0.25)。这里是用Speed的二维向量代表UV的二维向量的。

 

 

UV的旋转

啊...为了避免一些麻烦我把常用的猫图剪切成了512*512

UV的旋转可以用 Rotator来做

要把默认的平铺关掉,

 

 下面这个CenterX 和CenterY 代表的是旋转点的中心(0.5,0.5就是中心),Speed的就是旋转的速度

 

 上面这个是采样大小,可以通过UV赋值

 

 

UV扭曲

UV扭曲的原理是打乱UV的01分布

首先需要一张打乱的噪波贴图,一张正常贴图。

 

 这样,通过噪波贴图把原有的UV打乱,作为新的UV,就会产生扭曲的效果了

 

 

如何让它动起来:

再加一个平移节点Panner,并且设置好SpeedX和SpeedY,就可以产生动起来的效果了

像水面的波纹一样。

 

 

限制强度:

可以直接减,但减完之后要把值 锁定在01区间里:

 

 可以隐隐的看到后面的背景有一部分是不动的。

如果我们把减数调成1,那么就完全不动了。

 

 

同样Panner的Coordinate也可以连接一个UV来设置采样的大小,同样会影响扭曲的效果。就不截图了。

 

极坐标

把一张普通的贴图转换成极坐标形式可以直接用这个节点:VectorToRadiaValue

 

 

 

 可以看到它的XY通道是这样的:

 

 

假如做一个技能CD的效果:

(主要用到他的X坐标)

 

posted @ 2020-06-28 22:30  vantablack  阅读(1554)  评论(0编辑  收藏  举报