Material Capture(材质捕获)
将材质贴图的纹理效果直接投射给模型,使模型显示为图片的效果
注意:MatCap贴图内容必须是和边缘相切的球体
MatCap的核心要点是将世界空间的法线方向转换为相机空间的UV
由图可知,材质贴图的UV是以左上角为(0,0),右下角为(1,1)的坐标系
现在我们要将MatCap贴图映射给模型,我们就要模拟一个不随相机位置角度改变的UV,从而达到旋转移动相机,我们看到的任意角度,都是我们的MatCap贴图上的模拟效果
如上图所示,我们任意旋转模型,所看到的贴图光照都是贴图中所示的样子
我们就需要一个能从0~1渐变的一个数值来模拟UV,材质节点中的VertexNormal|WS就能很好的实现这这个效果
我们再只取RG通道,从俯视角度看一下
是不是很熟悉,我们有了类似于UV的渐变“坐标”
那我们直接先将世界空间法线方向转换为视角空间呢
这时候我们随意的改变相机视角
我们的“坐标”都不会改变,这时候我们UE坐标系的Z方向就是垂直于窗口方向,也可以理解为我们视线到模型的方向平行
但是我们的屏幕中心点为(0,0),现在我们要把(0,0)一道左上角,右下角是(1,1)
这时候我们将MatCap连接到我们的“坐标”中我们可以看到
我们可以分析出模型中心点事(0,0),模型右上角是(1,1),首先我们只需要坐标(0,0)~(1,1)的范围,其它的都不需要
同普通的UV操作一样,我们先除以2,贴图就会放大两倍,这时候我们可以分析出模型中心点事(0,0),模型右上角是(0.5,0,5)
然后平移0.5我们就得到了完整的(0,0)~(1,1)的范围
但是这似乎与我们的MatCap贴图有所不同,是倒置的
只是因为我们需要的“坐标”是左上角(0,0),右下角是(1,1),而我们处理后的“坐标”是左下角(0,0),右上角是(1,1)
因此我们不应该简单的除以2,而是要将竖直方向反过来
故而将向量的Y值乘以一个-1就好。
OK到目前为止,我们的MatCap材质就完成了