MMD联动Unity学习笔记 Vol.49 Unity Shader Graph 节点解析 向量基础

前言
这期我们还是跟着官方的视频学习Unity里关于Shader Graph的内容,这期是这个系列的第五讲:Unity Shader Graph 节点解析(五)Normal Vector, Tangent Vector, Bitangent Vector



上一期提到切线空间中的三个向量,法线、切线和副切线向量。这期我们具体研究一下。
Shader Graph为我们提供了一个接口访问模型在四个不同坐标空间下的法线、切线和副切线向量。

根据上一期我们的内容来看,切线空间中,垂直于物体表面的法线和物体上的切线都是直接从模型上获取到的向量,副切线则是通过这两个向量的差积计算出来的,实际上并不存在于模型中。由此可以看出,这三个节点相对来说联系比较紧密,所以之后提到的部分案例很难具体说明是用哪个空间下节点进行计算的。

而它们在线性空间下最常见的引用就是法线贴图了。能够兼顾效率的同时,让低模保持足够丰富的细节。

法线向量是一个-1到1区间的三维向量,但由于我们常用的贴图都是0到1区间的,故法线贴图上的数据就需要使用到上图中的公式转变换以符合到这个区间。而模型空间和世界空间下的法线有更多的颜色是因为它们储存了整个空间下的法线信息,而切线空间只储存于表面相关的法线信息。

从上图中我们可以很明显的区别,模型在世界空间和模型空间下的差异。

使用世界空间下的法线向量,可以让我们根据模型表面的方向来制作遮罩。图中使用了Y方向的世界空间法线向量来输入遮罩,表明这个效果仅影响面片朝上的模型表面。可以被应用到像是积雪等局部效果中。

我们还可以使用自定义光照节点配合法线向量实现多种多样的自定义光照。比如图中,我们使用自定义的Get Main Light节点可以计算出自己想要的光照效果,不过这里需要注意的是,目前仅有LWRP支持Custom Lighting,感兴趣的同学可以移步至官方github研究。

之前我们研究过Tri-Planar效果通常会有需要旋转贴图的需求,因为它本质上是对坐标空间下的XYX进行投射,所以在计算Tri-Planar节点时,除了需要计算物体在模型空间和世界空间下的坐标,也需要对模型在模型空间和世界空间下的Normal和Tangent进行矫正计算,保证每个轴向上的贴图在进行旋转后还能保证正确的光照效果。

视角空间下最常见的案例就是一些后期处理的效果,比如SSAO,因为这些效果,一般会用到对应的视角空间下的向量进行计算,包括Viewed Space的法线、切线和副切线等等。

在计算各向异性的高光时,我们需要使用到Half方向和切线方向的点积进行计算,此外,由于涉及到光照计算,Normal节点也会发挥很大的作用。