zoukankan      html  css  js  c++  java
  • 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坐标)

  • 相关阅读:
    Java 开发 gRPC 服务和客户端
    Springcloud中的region和zone的使用
    Spring Boot中使用AOP记录请求日志
    JDK1.8中的Lambda表达式和Stream
    机器学习之SVM
    机器学习之决策树
    【iOS开发】emoji表情的输入思路
    block为什么要用copy,runtime的简单使用
    swift和oc混编
    iOS之AFN错误代码1016(Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable)
  • 原文地址:https://www.cnblogs.com/reluctante1/p/13205405.html
Copyright © 2011-2022 走看看