MMD联动Unity学习笔记 Vol.48 Unity Shader Graph 节点解析 Position

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



Position节点提供了一个接口来访问模型的顶点信息,用户可以通过右下角的选项框获取对应的坐标空间,这个节点会涉及到一个很重要的概念。就是刚才提到的座标空间。

我们在具体深入之前,先来研究三维空间中基础的坐标空间的概念。渲染游戏的过程可以理解是把一个个顶点转换到不同坐标空间中,最终呈现在屏幕上的过程。在Unity中,对各个坐标空间下顶点的计算会很大程度上决定最后Shader呈现出来的效果,在不同空间下计算的Shader效果就会有很大的不同。我们对坐标空间的变换实际上是在两个坐标空间中,对点和矢量进行交换,其中就会使用到Unity内置的变换矩阵进行计算,如图中的MV、MVP等,实际上,最后呈现到屏幕前还需要把三维坐标投射到屏幕空间中,这个过程会在讲解Screen Position节点时具体讲到。

通常,在场景的模型中有如下几种坐标空间。
模型空间,以模型自身为基准的坐标空间。
世界空间,以整个场景中的世界坐标为基准的坐标空间。在世界空间中旋转一个模型,它本身的模型空间的坐标是不会改变的。但它当前的世界坐标发生了改变。
视角空间,也叫相机空间,以相机视角为基准的坐标空间。
而切线空间由于它的特殊性,具体我们在后面研究。

在模型空间和世界空间下的实用案例十分广泛,一些常用的Shader都会用到相应的坐标空间进行计算。

根据我们上一期所涉及到的UV动画原理,我们也可以单独拆分世界空间下的坐标为X和Y,通过Combine后输入到Tilling And Offset节点中,让顶点动起来。

至于视角空间,我们最熟悉的效果就是菲涅尔现象了,它就是通过计算视角空间下的坐标来保证物体边缘始终处于发光的状态。当然有时候你可能需要某个效果始终追随你的相机视角,那么也需要用到视角空间进行计算。其它Shader也可以通过这种方式进行计算。

下面我们看到比较特殊的切线空间,切线空间与视觉空间和观察空间一样,都是一个坐标空间,它是由顶点构成的平面UV坐标以及表面的法线所构成,一般用Tangent,ByTangent,Normal三个向量进行表示,即切线,副切线,和法线。

由于我们的法线被存在切线空间中,所以最常用的切线空间计算,就是计算模型的法线了,不过这一步Shader Graph已经给我们做好了,只需要调用对应的节点即可。根据它的特性我们可以看到,跟切线相关的计算都会围绕着光照进行,而改变切线计算的方式,也可以改变模型接受光照的效果,如高光等等,复杂一点的效果,像是各相异性的高光,如头发,丝绸等材质的高光都是会使用到Tangent空间参与计算的。