2015年7月2日星期四

法线贴图原理及常见问题

说明:
  本文内容主要出自Christopher Albeluhn的博客教程Normal Map Tutorial。以及对我帮助很大的CryEngine手册中的一篇文章Common XNormal Baking Errors and How to Solve Them。  
  本文包含了有关法线贴图的基本原理和基本烘焙技巧。这是一篇学习笔记,并非原文翻译,如果对其内容有疑问欢迎和我一起探讨学习,谢谢!

  基础知识


  下图是关于高模烘焙法线贴图至低模的重要理论知识,如果没有搞清楚其原理,你会遇到很多问题。
烘焙原理
  图片左边展示的是模型“硬边”烘焙法线时的情况,受到顶点法线方向的影响,烘焙的结果会出现细节丢失和重复细节的问题。

  图片右边展示的是“平滑”模型烘焙法线时的情况,其结果更接近高模。

  如果你选择用高模烘焙的方法来给低模创建法线贴图,请记住上图的基本映射原理。根据需要调整低模的软硬边设置会改变烘焙的结果。但是烘焙结果也同样受到低模结构的影响,准确的模型结构才能做出正确的法线贴图。

  法线贴图通过RGB值来保存法线信息。当光源垂直照射一个表面时,法线贴图记录了该表面细节对光源的不同折射方向,从而形成“体积”。
  R值代表X轴方向,默认值为50%,0%表示-1,100%表示1;
  G值代表Y轴方向,默认值为50%,0%表示-1,100%表示1;
  B值代表Z轴方向,默认值为100%,表示折射角度不受X,Y值影响垂直于光源,0%表示完全根据X,Y值决定其折射方向,折射角度与光源方向为90度。

  常用技巧


  当你烘焙法线贴图时,烘焙的贴图尺寸最好比实际需要的尺寸大一倍,这样烘焙的纹理细节会更清晰,然后把完成的贴图缩小尺寸后,再执行一次“锐化”操作。

  如果烘焙的法线贴图不是你想要的结果,你可以尝试以下几种方法:
  1. 调整烘焙范围(Cage或是距离范围/偏移量)
  2. 调整模型(添加或取出细节模型)
  3. 调整低模的顶点法线方向(“软/硬边”设置)
  消除模型边缘上的法线贴图接缝可以尝试下面两种方法:
  1. 在模型上给这个边缘做倒角结构。 
  2. 在模型上给这个边缘设置为“硬边”,然后在UV上“断离”这条边。
  当高模向低模烘焙法线时,根据UV布局来决定法线贴图上的颜色,所以,如果你修改了UV,请重新烘焙法线,而不要旋转法线贴图以适配它。 

对称模型镜像问题
 当模型是对称结构时,删除其中一半并给另一半分UV和烘焙法线,然后把模型连同UV一起镜像复制。此时,镜像模型的UV与原模型UV重叠的,所以法线贴图被翻转映射到镜像模型上。并且镜像模型的UV也是翻转的(因为镜像),实际上法线贴图被翻转了两次,所以得到的结果是正确的。
 请注意在游戏渲染中也应用了这一规范。






  很多时候渲染法线贴图需要烘焙多次,然后把需要的部分合并到一起,有时甚至需要手动绘制一些细节。但是你永远不能用通过烘焙高模自身获得的法线贴图来增加贴图细节,两个模型(高模和低模)不同的几何结构会导致一些严重的问题。

  一个常见的误解是,所有的法线细节都需要从高模烘焙至低模完成,但事实并非如此,通过2D软件或其它方式可以更高效的完成任务,多种方法可以相互补充。

没有评论:

发表评论