这是关于ben cloward虚幻引擎材质教学的笔记
pbr材质简述
数据运算
1,一维数据,适合用于调整金属度,粗糙组,高光。
这几个数据都是使用一维浮点数作为输入。
在这里,将一维数据到连接主节点的三维数据口,可以发现主节点自动补齐了剩下的两个通道数据。还是以复制的形式补齐。
2,二维数据适合用于调整uv,但是如果把二维数据给与三维接口。
主节点也是将缺失的第三通道补齐,不过,补的是零。
3,三维数据适用于基础颜色,自发光,法线。
当二维或者三维数据输入主节点的一维端口
这里使用的是一个二维数据(0,1)。
显而易见,所显示的是粗糙度为0的情况。
所以,这种情况,主节点只会使用第一个通道的值。
4,主节点可以这样对输入数据进行补齐和挑选,但其他节点之间就不太一样
一维数据可以和其它维度运算,二维不能与三维或四维运算。
除了一维数据和主节点,其它节点间的运算都需要数据类型相同。
uv运算
1,texcoord节点的含义
因为ben在课程中讲解的并不是很清楚,这段关于uv的部分都是我自己思考猜出来的。
上图uv两个通道合起来的样子,下面把两个通道单独显示,将texcoord的两个通道拆出来
texcoord节点在r和g通道提供两张这样的梯度图。当我们对texcoord节点进行加减乘除时。
是对texcoord的这两张图进行一系列运算,改变r和g通道上的灰度分布,再将其传递给texture sample节点的uvs端口。
texture sample节点会检查每个点,读取这个点传递进来时对应rg通道的灰度信息,再调用原uv的r和g灰度值所对应位置的贴图信息。
举个例子,texture sample节点中,传递进来一个点,它的rg通道灰度值分别为(0.3,0.21),但它在传进来时,在那张图绝对位置是(0.8,0.9),此时它会调用原uv(0.3,0.21)处的贴图数据,虽然它在传递给texture sample时的绝对位置是(0.8,0.9)。
再举个例子,如果将两个数字输入给texture sample的uvs端口,会咋样?
如果输入0.5和0.5,就是把r和g两张灰度为0.5的图对texture sample输入,然后texture sample会将所有的点都调用原uv中(0.5,0.5)处所对应的贴图数据。
结果:
2,uv的加法
对于uv的运算,输入给texture sample,超过1的数值整数部分会被忽略,只读取其小数部分。
此处以u(x)方向为例
表现在贴图上就是贴图左移了10%。
实例:
其实我们的计算主要是对u和v的黑白贴图进行变化,然后调用原uv数据和省去整数这部分都是texture sample这个节点在进行。所以我们可以像编辑贴图那样对输入texture sample的图像进行编辑。
3,uv的乘法
清楚了加法,乘法的道理也是一样
从左到右就是从0到3
因为会忽略整数,所以就是将0-1重复三次,贴图在u方向平铺三次。
4,世界绝对位置下的uv变化
ben在案例中大量使用了世界坐标,是因为世界坐标可以随着物体改变而发生改变。
作用到材质上,结果就是,只需要制作很少的贴图,把他们摆在不同的位置,就有不同的材质表现。
当使用绝对世界位置时,这些贴图会平铺很多次,究其原因,也是因为传递给texture sample的图中,数值从0到很大,去除整数,实现了多次0到1。
现在,将世界坐标乘以较小的一个数,得到下面这张图