ue4---1,pbr概述,数据运算,uv运算

这是关于ben  cloward虚幻引擎材质教学的笔记

pbr材质简述

物体表,表面的入射光种类可以简单概括为两类,直接光(直接接受光源发射出的光线)和间接光(周围环境反射所产生的光)。反射光也是,高光(很多光线在一个方向进行传输)和漫射光
引擎为了便于计算,将这四种光单独计算再合成为一个整体。
平时我们所见到的图片一般都有光照和阴影,这张照片是用仪器测量出的物质表面颜色
实际测量所得的各种物质的基础颜色
法线贴图上的每一个像素的rgb值,都代表它的这个像素点所对应切线空间的xyz矢量值。所谓切线空间,就是以像素点垂直方向为z轴,uv上的u为x轴,为y轴。
粗糙度,更像是微观层面的法线贴图
当金属通道输入为1,高光输入不再影响材质,影响反射的就是输入的basecolor,又因为金属的反射是60-100%,所以给与basecolor的值不能太低

数据运算

1,一维数据,适合用于调整金属度,粗糙组,高光。

这几个数据都是使用一维浮点数作为输入。

在这里,将一维数据到连接主节点的三维数据口,可以发现主节点自动补齐了剩下的两个通道数据。还是以复制的形式补齐。

2,二维数据适合用于调整uv,但是如果把二维数据给与三维接口。

主节点也是将缺失的第三通道补齐,不过,补的是零。

3,三维数据适用于基础颜色,自发光,法线。

当二维或者三维数据输入主节点的一维端口

这里使用的是一个二维数据(0,1)。

显而易见,所显示的是粗糙度为0的情况。

所以,这种情况,主节点只会使用第一个通道的值。

4,主节点可以这样对输入数据进行补齐和挑选,但其他节点之间就不太一样


一维数据可以和其它维度运算,二维不能与三维或四维运算。

除了一维数据和主节点,其它节点间的运算都需要数据类型相同。

uv运算

1,texcoord节点的含义

因为ben在课程中讲解的并不是很清楚,这段关于uv的部分都是我自己思考猜出来的。

这个是将texcoord节点的rg两个通道传递给主材质节点基础颜色,因为这个节点只有两个通道,直接传递不影响结果



其实texcoord节点就是这两个方向布置的两张灰度图

上图uv两个通道合起来的样子,下面把两个通道单独显示,将texcoord的两个通道拆出来


这个是u方向,显示有些问题,但是能看出来u方向从黑到白,即从0到1


v方向

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)方向为例

这是原始u方向上的图像,要对他进行加0.1的操作


对u方向加0.1,然后在u方向上就变成了0.1-1.1,又因为对于整数部分这个节点是不进行计算的,所以他的真实反映是0.1-1,然后是0-0.1

表现在贴图上就是贴图左移了10%。

实例:

没对u位移之前


给u方向加0.1,贴图左移10%

其实我们的计算主要是对u和v的黑白贴图进行变化,然后调用原uv数据和省去整数这部分都是texture sample这个节点在进行。所以我们可以像编辑贴图那样对输入texture sample的图像进行编辑。

3,uv的乘法

清楚了加法,乘法的道理也是一样

这是原始状态,从左到右是0-1,正好是将uv平铺一次


将u方向乘以3

从左到右就是从0到3

因为会忽略整数,所以就是将0-1重复三次,贴图在u方向平铺三次。

4,世界绝对位置下的uv变化

ben在案例中大量使用了世界坐标,是因为世界坐标可以随着物体改变而发生改变。

作用到材质上,结果就是,只需要制作很少的贴图,把他们摆在不同的位置,就有不同的材质表现。

当使用绝对世界位置时,这些贴图会平铺很多次,究其原因,也是因为传递给texture sample的图中,数值从0到很大,去除整数,实现了多次0到1。

现在,将世界坐标乘以较小的一个数,得到下面这张图

乘完后,确实变小了,方向却不对,看一下为啥


将r通道分离出来,可以从中间看出来有一个从0到1的过程,符合uv中的u方向


再看b(z)方向,他中间有一段从0到1,可以确定它的方向是从下到上逐渐变大。和uv分布中的v方向相反,所以所得结果也相反

推荐阅读更多精彩内容