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坐标)

原文地址:https://www.cnblogs.com/reluctante1/p/13205405.html