一.什么是数据类型
首先为啥理解数据类型是很重要的。一些节点的接口插槽只接受特定类型的数据,如果连接了不匹配的数据就会出现错误,有些接口可以接受任何数据类型,但是实际上只会使用到其中的一些。并且有时可以将多个数据流合并成一个来编写一个更高效的shader
1.数据类型介绍
Float:用于需要单一数据通道的事物,如金属度、高光度和粗糙度
Float2:带有两个通道,通常用于存储UV坐标
Float3:用于需要颜色或向量的东西,例如基础颜色和法线
Float4:用于存储带有Alpha的颜色
2.节点介绍
1.Append
可以将两个向量合并成一个新的向量(更高维度的)
2.AppendMany
用于将多个输入合并成一个数组,并且可以选择输出的通道
3.Mask
用于从一个向量中提取特定的分量,比如下面就分别提取了二维向量的RG通道
4.Swizzle
从一个向量(如float2
、float3
或float4
)中选择和重新组合特定的分量
5.Split Components
将一个向量的每个分量分离成单独的输出,但是这个节点只接受float3类型的输入,否则会报错
3.注意
要注意根节点的basecolor 只需要一个float3的值,如果输入了float4的值那么第四个值就会被忽略掉
二.扭曲着色器
当UV增加的时候,纹理会向左上角进行移动,可以用Time节点来控制UV滚动,同时通过一个二维向量控制两个分量的滚动速度
现在是均匀地调整每个UV坐标,但是我想要对每个像素的UV偏移是不同的,这样就需要引入噪波
这是一个噪波纹理,它的RGB分别是三个不同的噪声图
所以我们就可以将任意两个通道append到一个二维向量,然后对UV进行偏移,同时乘上一个很小的影响范围,例如0.03,就会有一个扭曲的效果,就像这样
但是目前还不是动态的,所以还要加上时间的影响,通过跟随时间变化的UV来对噪声贴图进行采样,但是即使是这样,我们的图案现在变化扭曲的有些重复,所以通过采样另外两个不同的噪声通道,并且给予不同的UV滚动速度,和上一个采样的结果来相加,这样之后我们就得到了一个不再循环的扭曲图案。
最终效果
总结:
这个方法用来做扭曲非常不错,可以用来做火焰的热浪,或者带有涟漪的水,可以用这个做折射效果,或者只是用来做某个在摇摆的物体,或者是做某个粒子系统。