欢迎光临散文网 会员登陆 & 注册

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

2019-11-28 15:00 作者:NXL2  | 我要投稿

前言                         

    这期我们还是跟着官方的视频学习Unity里关于Shader Graph的内容,这期是这个系列的第

九期,矩阵(Matrix)相关所有节点。

    我们经常听到的矩阵,是一个数学概念,简单来讲就是一个由M乘N的标量数组,在Unity中,矩阵通常被用于平移,缩放,旋转等等。

    顾名思义,这几个节点的作用,分别是自定义一个2乘2,3乘3,4乘4的矩阵。

    除此之外,在前面几期我们了解了Input Geometry中的实体空间,模型空间,切线空间,视角空间之间的变换,也是由矩阵计算得到的结果。

    在Transformation Matrix中,Unity本身就给我们提供了很多变换的矩阵供我们进行矩阵计算,不同于直接写Shader时需要用代码调用对应的矩阵,Shader Graph在大多数情况下,只需要我们切换节点下方的模式即可。也从公式直接变回了简单易懂的描述。

    除了Transformation中的内置矩阵,Unity还有一 些关于转换的内置变量。

    当然,在内置的变换矩阵无法满足我们的需求时,就需要我们自定义一个转换矩阵了,图中的Tangent To World节点就是使用世界空间的Tangent By Tangent Normal来构建的一个TBN变换矩阵,把Tangent空间的向量,转换到世界空间中。

    在计算Tri-Planar节点时,除了计算物体在模型空间和世界空间下的坐标,也需要对模型在模型空间和世界空间下的Normal和Tangent进行矫正计算,保证每一个轴向上的贴图,在旋转后,还能保持正确的光照效果。否则,在旋转各个方向的面时,法线也会一起旋转,所以在这里。我们使用Matrix Construction Node来构建对应坐标轴的旋转矩阵。

    在构建好XYZ轴向的旋转矩阵后,再与三个方向的法线信息相乘,再旋转面的时候,就能得到正确的法线了 。

    以Unity Built-in的变量为例,Unity Matrix Transpose MV是Unity MV的转置矩阵,因为求一个矩阵的逆矩阵需要巨大的运算量,但是求一个矩阵的转置矩阵就很简单。所以当一个矩阵为正交矩阵的时候,通过转置矩阵或者逆矩阵,是一个很有用的方法。

    而Unity Matrix,Inverse Transpose MV,专门用于将法线从模型空间变化到观察空间,为Untiy Matrix的逆转置矩阵,有同学可能会问,为什么不同Unity Matrix MV来处理法线,因为如果模型有不统一缩放的时候,用Unity Matrix MV会造成方向失真。

    而Matrix Determinant节点,行列式是数学中的一个函数,将一个N乘N的矩阵a,映射到一个标量中,一般用来求解矩阵,Shader中使用的情况比较少。感兴趣的同学可以自行深入了解。

MMD联动Unity学习笔记 Vol.53 Unity Shader Graph 节点解析的评论 (共 条)

分享到微博请遵守国家法律