`
wjlgryx
  • 浏览: 297569 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

法线贴图

阅读更多

本文转自:http://yumi08.jimdo.com/my-word/maya/%E6%B3%95%E7%BA%BF%E8%B4%B4%E5%9B%BE/

 

(法线贴图是一种显示三维模型更多细节的重要方法,它解算了模型表面因为灯光而产生的细节。这是一种2维的效果,所以它不会改变模型的形状,但是它计算了轮廓线以内的极大的额外细节。在处理能力受限的情况下,这对实时游戏引擎是非常有用的,另外当你渲染动画受到时间限制时,它也是及其有效的解决办法。)

(法线贴图不是什么新事物,但依赖与最新的显卡,它正变得越来越重要。要达到上图的效果,通过凹凸贴图也是很容易的事。但是,凹凸贴图仅仅解算在它相对于面投射方向的垂直偏移,新的方向是两个相邻像素之间高度差异的结果。法线贴图使用颜色来表述在其他方向的偏移,这使它更有效。它无需使用它相邻的像素来测定它的角度,一个单一的像素就足够了。法线贴图中的红色通道编码了法线的左右轴,蓝色通道编码了垂直深度。)

 

(这些创造了一幅漂亮的图片,但不幸的是你不大可能用手来绘制合适的图(跟凹凸贴图不同)。这意味着你不得不生成一张法线贴图,有好几种方法可以做到,你可以烘培它,渲染它,或是从一张凹凸贴图转换而来。)

 

 (原始物体和法线贴图物体)

(烘培)

 

 --------------------------------------------------------------------------------

 

(烘培是将源物体上的表面细节捕捉并转化到目标物体的过程。在烘培法线贴图的过程中,软件将比较两个表面,并测定目标表面哪里需要哪种颜色,以补偿两个物体形态间的差异。)

(烘培是通过从低多边形物体表面(也叫目标物体,因为它最终将接受法线贴图)投射光线到高多边形表面(即源物体)来进行的,光线的方向通过定点的法线来确定,他们能被投射到多个方向,向前或向后。如果你有一个平滑的表面(或是一个光滑组),法线将被平均化。当你有一个硬边缘的表面,法线方向是垂直于表面向上的。)

(源物体和目标物体要尽量靠近)(当你开始烘培时,需要意识到这是很重要的区别,当你的边是硬边是,对一个面而言,点的法线是指向不同的方向的,而不是指向它相邻的点的法线,这意味着在光线发射的过程中你得到了“盲点”。)

另一个需要注意的是,为了烘培出一张完整的贴图,每一个在烘培中包含进来单一的多边形都必须有自己独立的UV。不能出现UV重叠,因为软件不知道哪个面是你想用在解算中的,因而会一次性的绘制出来。)

(因为目标表面是一个大的,非常复杂的放射体,你需要处理它上面的每一个面,例如在那些uv投影反转的地方,会使图像凹进去而不是凸起来。通过察看目标网格上的一个面,比如窗户那里的面,你将可以看到在你源网格的每一个多边形或多或少的指向你的方向。如果源多边形和你的目光垂直相交,或是指向远离你的方向,此时是无法捕捉到法线贴图的。还有一个需要考虑的是对每个源多边形你需要看的足够大,这样才能获取足够的像素在法线贴图上定义它。)

(检察发射方向和表面细节的可见性。)

 

(渲染)

(另一种制作法线贴图的方法是渲染它)

(通过给一个表面指定法线材质,你可以渲染一个法线贴图出来。这个材质将在渲染时,从你摄像机的角度彩色化表面。这种方法无需使用源物体和目标物体,它是一种类似于制作纹理贴图的方法。你模型上表面细节就像你在PS里画的,从上到下,仅仅有轻微的方向变化,任何垂直与摄像机的多边形将是不可见的,在渲染中那里需要有轻微的空间上变化,就想纹理贴图一样。)

(转化一个高度/凹凸贴图)

(转换一张黑白图像可以通过在PS中使用Nvidia的PS插件来实现,这允许你绘制一行黑白图像并将其编码为一张法线贴图。对渲染方法而言这是一个相当简单的办法,但不适用于复杂的形体。但是你可以用这种方式来给烘培的法线贴图添加一些额外的细节,如表面纹理,缝纫,伤痕,杂点等等,如果你厌倦于建造小至1mm的每个细小东东的话。)

(一些烘培软件允许你在你的源物体上为了类似的细节赋予一个凹凸贴图,并带图烘培,这将得到一个更精确的多的结果。)

(你不得不惊讶于法线贴图能显示这类的细节。)

(你需要记住的一件事是,无论何时在ps中你修改了法线贴图,你需要在Nvidia插件中运行“normalize only”(仅规格化)选项。这样做的目的在于法线贴图需要被正确的计算以便正常发挥作用(这涉及到复合像素值的点乘,一些非常令人厌烦的技术,在此就不深究了)。)

(相切,物体空间和世界空间)

(通过法线贴图计算出的表面细节和偏移是总是相对于多边形的投影方向或是物体的自身轴向(物体空间)或是世界(世界空间)的。)

对实时游戏引擎来说,相切空间应该算是最有价值的,但也是最灵活的。它通过顶点法线所定义的方向察看每个目标面,然后根据来自法线贴图的信息通过补偿它来计算新的灯光效果。这是惟一一种能被用与可边形物体的法线贴图类型,例如被蒙皮和绑定骨骼的角色。它也允许你重复你的贴图或是重新使用其他地方的网格元素,旋转,扭曲他们直到你觉得合适为止。这是一个在你的法线贴图里添加更多纹理空间的好方式。)

(物体空间)

(一个物体空间的法线贴图,仅从整个模型的自身朝向检视物体,并据此解算在它表面的每个像素的方向。它非常适合没有变形的物体,例如枪炮,或是箱子。它允许你复制网格上的元素,就像你没有改变他们的朝向一样。)

(当一个物体空间的法线贴图告诉一个面,它被期望接受来自物体左边的光线,它就会这样做,即使这个面实际是指向光源的。)

 

(世界空间)

 

(世界空间法线贴图适用于那些既不移动也不变形的东西,比如世界环境)

 

 

(因为这不是一个角色建模的教程,所以我将不描述建造高模的过程,但我可以给你一个小提示,这将对你建模时的一些小细节有所帮助。这样你可以将手中每个物体的多边形限制在一定数量,当你总的多边形数量达到50万时,场景就变的不可绘制了。考虑到生成法线贴图的目的,你甚至无需将几个构成组件合并焊接起来,就像它们本身是无缝的一样。)

(我以一个游戏模型中的粗糙的低多边形开始(低是相对而言的,因为它是被用于次世代平台的,它们能轻易处理6000-8000个多边形的角色模型,不管如何,它们都比源网格低,所以这里说低多边形依然是恰当的。)

(制作一个低多边形的版本能帮你开始,你能从中了解你要的细节究竟在哪里,你要如何在烘培中获取它们。)

(这当然并不是一个规则,只要结果是好的,任何方法都是正确的。)

(然后我细分了组织器官,例如手臂和腿,并开始处理它们。

 

(现在是时候开始烘培了,有趣的是并没有许多法线贴图烘培插件开发出来。对于maya,有海龟的表面变换编辑器(Surface Transfer Editor ,我一直都用它,和maya自带的工具(这个就用的少了),还有 Microwave ,这个效果也不错。max7开始,就自带了相当好的法线贴图工具,还有独立的法线贴图软件,比如Cry Tek’s Polybump 以及ATI的法线贴图工具。)

(毫无疑问,其他所有的大型三维软件包对此都有自己的解决方案,但是因为我对它们没什么了解,所以我就不推荐任何东西了。)

 

最终得到的角色的相切空间的法线贴图最终得到的角色的相切空间的法线贴图

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics