MMD联动Unity学习笔记 Vol.50 Unity Shader Graph 节点解析 屏幕位置节点

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



这一期的内容是ScreenPosition(屏幕位置节点)和ViewDirection(视角方向节点)

在第四期中我们讲到顶点在坐标空间内的变换规则,我们知道最后一步就是把顶点从ClipSpace(裁剪空间)投射到ScreenSpace(屏幕空间)的过程,本期内容中的屏幕位置节点,就是经过投射矩阵转换后的坐标向量。

ShaderGraph提供四种模式的屏幕位置节点,Center和Tiled模式,可以理解为在Default的基础上,进行偏移或是重复的特殊计算,因此下面就只对Default和Raw模式的用法举例说明。

Default模式ScreenPosition节点返回默认的屏幕坐标,当把这个数据输入到采样贴图的UV接口时,我们会发现默认方式是根据自身UV进行Mapping,而采样屏幕UV的贴图会跟当前屏幕空间平行。



Raw模式的屏幕位置,适用于参与各种计算,比如使用它来获得场景中的深度信息。

把刚才的计算值输出到颜色中,可以看到随着物体的距离不同,输出的深度信息也就不一样。

视角方向,顾名思义就是返回模型中顶点位置到摄像机的观察方向,所以我们可以使用相机的坐标向量减去物体的坐标向量,就得到当前的观察方向。

在计算物体的反射时,会使用视角方向ViewDirection进行计算。有时候我们也引用到一个新的Half向量来计算高光,它是通过对视角方向和光照方向的均值归一化后得到的向量。

有了ViewDirection节点,我们可以实现各种各样自己想要的高光,比如海洋高光,风格化高光等等。

根据使用高光算法的不同,实现的效果也不一样,图中所示的,就是其中一种高光算法。

还有我们常见的菲涅尔效果作用到ViewDirection进行计算,因此,计算出来的边缘光会永远朝向当前的视角方向。