MAYA中法线贴图该怎么理解和应用?
教大家个使用maya中法线贴图的应用的综述,个人感觉这个教程太有用了,很全面很直观的分析了maya中发现的各种使用方法及技巧。很是实用收藏一下吧,最近搜集了不少资料和试验,打算把maya中法线贴图(normal map)的相关信息综合一下并且心思一下思路。慢慢来!:)
法线贴图(normal map)是一种较新的贴图技术,类似于bump map,通过对模型表面的法线的矫正来用以表现模型的细节与纹理,其效果比后者要好,能达到bump map所达不到的效果,但是其并不能真正的在模型表面产生细节,相对于displacement map而言,又不如其满意。而且其制作和应用很麻烦,问题也很多,所以这种技术cg中并不常用,不过,在游戏中却有相当的发展空间。其他不多说了,先来看个图:
为什么同一个模型(10*10段的多边形球体)会出来两种效果,我使用了soften/harden edge命令来柔化了右边的模型边,这样看起来就圆滑了很多!
我现在打开了custom polygon display options,显示出来法线来看看区别:
模型的法线有两种:点法线和面法线。面法线是在面中心发出,表示面的方向;而点法线是从点发出的,取决于点周围的面的方向,左右模型的区别说明了soften/harden edge命令工作原理。同时也normal map的基础。(其实还有一种:uv coodinate normal。但maya中似乎没有这个概念,这个东东是在normal map应用中许多问题产生的根源,这里暂不讲述)
下面我们开始。建立一个polygon球体,参数如下。
然后再复制出一个隐藏。
对这个球体平滑2次后,用雕刻工具作出一些细节。
打开hypershade,赋予这个球一个新的lambert材质。
再建立一个sampleinfo和setrange节点,作如下连接:
这样我们把这个球的法线与摄象机信息输入,将其输出到物体材质的color上,这里我的材质选择了surfaceshader,这并不重要。只是为了方便观察效果。
调节参数:我们将法线变量转化为颜色值,需要重新定义取值区间,由[-1,1]转化为[0,1]。
颜色改变,但是你会发现硬件显示的颜色与渲染的颜色不一样!这可是个问题的关键!而且不管你如何移动或旋转摄象机和模型,物体的颜色分布都不变化,上面是绿色,左边蓝,右边红。这可不是我们想要的。
这个问题的原因是因为sampleinfo输出的法线信息是基于摄象机的,所以与摄象机关联,而并非物体本身,这样我们后面的得到的也是不能用的法线信息。
为了解决这个问题,我们断开samlpeinfo和setrange之间的联系,新建一个vector product节点,如下连接。
将透视摄象机的节点拖进,输入其世界矩阵信息到vector product节点,运算方式为vector matrix product,再将输出值连接到setrange的value上。
这样做是矢量与矩阵运算,把摄象机坐标系转换为世界坐标系,这样摄象机的变化不在影响物体的颜色分布了,但是如果我们转动物体,问题仍然出现。所以要把物体的变化的信息也要加进去,将世界坐标系转换为物体坐标系。
如果将此时的颜色转换为贴图,我们就叫它world-space normal map。(后面在介绍这些分类),如图再加入如下类似的节点,注意这次选择的是world inverse matrix。图中colorball就是这个球体的模型节点,你可以在outliner中找到它,拖到hypershade里。
这样,我们看到颜色显示与渲染的一致了,以渲染出来的为准,这样移动摄象机或物体,颜色分布就正确的象贴在物体上一样。
推荐阅读