【转载】法线贴图Nomal mapping 原理

法线贴图多用在CG动画的渲染以及游戏画面的制作上,将具有高细节的模型通过映射烘焙出法线贴图,贴在低端模型的法线贴图通道上,使之拥有法线贴图的渲染效果,却可以大大降低渲染时需要的面数和计算内容,从而达到优化动画渲染和游戏渲染的效果。
 
现在好多3d网游都没有法线贴图啊,呵呵,《giant》就没有。

CG:计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法

维基百科:
法线贴图

法线贴图
 什么是法线贴图技术呢?这是一种用来实现3D效果的一种技术,要想理解这种技术还请您听我慢慢道来。

  我们知道,在游戏中经常会有这样的情况,就是一个平面——这个平面在现实中并不是一个“平”面,例如砖墙的表面带有石质浮雕等等。这样的情况如果要求游戏开发人员将复杂的3D细节都做出来是不现实的,因为即使不计较在建模时候的复杂度,过多的3D细节也同样会大量消耗显示芯片的性能,让游戏根本没有可玩性。

如何利用贴图实现凹凸效果呢?

  可行的方法就是将这个平面用一个贴图覆盖,用贴图的纹理实现一定的凹凸效果。但是这种方法实现的效果并不是很好,因为如果视角一变化,看起来就会像一张简单的画有图案的平面了。

  后来,聪明的游戏开发者想出了一种方法,就是在贴图过程中对贴图进行一定的处理,从而保证了在视角变换以后仍然保证有较为明显的凹凸效果。

  光与影,法线贴图技术的物理学基础

  我们知道,人之所以能够对景物看出立体感的主要原因是因为人有两只眼睛。两只眼睛看的景象是不同的,所以人们才能分辨出立体感来。但是,由于电脑的屏幕是一个平面,分辨3D效果就只能靠光影效果来实现了。

  举个简单的例子,这就像我们画素描的时候,为了不让一个球体看起来像是一个圆圈,必须让球体的一些区域是亮的,一些区域是暗的。而且从亮部转向暗部的时候是一个均匀的按照物理模型特点的过渡,这样画出来的球体才像个球体,电脑为我们绘制的过程也是一样。

因为有明暗,我们才能将平面理解成立体

  基于这个道理,我们就不难理解可以通过贴图局部的亮暗变化来实现假的3D效果。换一种说法就是说我们可以通过在贴图上的局部做一些亮暗的变化来做到一种假的3D效果。

光照因角度不同而呈现不同的明暗

  那么如何实时的对贴图进行转换呢?如果要实现虚拟的光影变换,我们最起码需要知道在一个平面上真正的凹凸的情况,这样才能让显示芯片进行运算,生成一种假的凹凸的效果。

  显然,记录真实的凹凸模型是得不偿失的——如果那样的话就没有任何意义了,我们需要用一种非常简单的方法来记录一个贴图的凹凸情况,于是就诞生了一种全新的方法,法线贴图技术。

  接下来,我们再回到我们刚才谈到的法线贴图的话题上。

  法线贴图就是记录了一个需要进行光影变换的贴图上的各个点的凹凸情况的贴图,显示芯片根据这个贴图的内容,来实时的生成新的有过光影变化的贴图,从而实现立体效果。

  那么,究竟是怎样利用法线贴图记录一个平面或者说是一个贴图的凹凸情况呢?我们知道,物体表面产生明暗变化的直接原因,就是光线照射角度的不同,光线垂直于平面的地方就亮,光线斜射到平面的地方就暗,光线照不到的地方就更暗(应该是黑色,但是由于环境光照所以不会有阴影是真正的黑色)。

  借色彩之值存法线之向,巧妙的存储

  学过初中物理的朋友一定还都记得,表示光线射向平面的角度时通常使用光线和该点法线角度来表示。这也就意味着,如果我们将一个贴图上所有点的法线记录起来的话,就不难再利用这些信息实现后期的假的凹凸效果了。

  记录这些法线的载体就被我们称为法线贴图。为什么称之为贴图呢?我们知道,一条法线是一个三维向量,一个三维向量由X、Y、Z等3个分量组成,于是人们想出了一个聪明的方法,就是以这3个分量当作红绿蓝3个颜色的值存储,这样的话就生成一张新的贴图了,这就是法线贴图的来历。

法线贴图其实并不是真正的贴图,所以也不会直接贴到物体的表面,它所起的作用就是记录每个点上的法线的方向。所以这个贴图如果看起来也会比较诡异,经常呈现一种偏蓝紫色的样子。(polygons:多边形)

『小提示-05:事实上,真正的法线贴图并不是记录贴图上每个点的法线的绝对角度,而是记录的是相对于平面的一个差值。这样的话,随着平面的3D变换都能够实现即时的法线运算了。』

  传统纹理压缩,法线贴图不再适用

  采用法线贴图技术的优势就是利用很少的资源实现了效果非常好的凹凸效果,而且可以利用我们在开篇的时候提到的纹理压缩技术对法线贴图进行压缩,进一步节省资源。

3D max里面是如何制作发现贴图的呢?看下面,图看不见的话点链接。

制作法线贴图

  接下来我们在3ds Max里面制作Normal Map (法线贴图),将低模和高模分别命名为:low-model和high-model,然后将导出的低模UV 分好,高模不用分UV。

原文未知,我是从这里看到的:http://www.cnblogs.com/lancidie/archive/2010/11/02/1866914.html

时间: 2024-10-26 13:22:58

【转载】法线贴图Nomal mapping 原理的相关文章

法线贴图——Normal Mapping

对于不曾学过.用过法线贴图的人来说,提到法线贴图,经常会提到的问题是什么是法线贴图?法线贴图用于解决什么问题?法线贴图的原理是什么?本文将就这三个问题阐述本人的一些见解,各位不喜勿喷!!! 谈到法线贴图首先提到的是切线空间,参考网站 http://blog.csdn.net/bonchoix/article/details/8619624 PS:常提到的纹理坐标就是定义在切线空间的,U坐标对应切线空间的T轴,V轴对应切线空间的B轴,顶点法向量N对应切线空间的N轴,模型中每个三角形都有对应的切线空

【转】法线贴图原理

原文地址http://www.cnblogs.com/flytrace/p/3387748.html 我算个笨人吧.笨人以前弄懂一些东西后,讲给笨人听往往更有效.看之前请自行具备图形学关于光照的基础知识. >> world/object space normal map 我们先讲基于世界或模型坐标的法线贴图(world/object space normal map).不常用,但是基础. 首先,请无视你之前google到的所谓通过Photoshop生成法线贴图类似文章,美术除外.那只是一种利用

法线贴图原理

[法线贴图原理] 如果法线处于世界坐标中的(world space),那称为world space normal.如果是处于物体本身局部坐标中的,那称为object space normal. 很容易想象,world space normal一旦从贴图里解压出来后,就可以直接用了,效率很高.但是有个缺点,这个world space normal 是固定了,如果物体没有保持原来的方向和位置,那原来生成的normal map就作废了. 因此又有人保存了object space normal.它从贴图

Esfog_UnityShader教程_NormalMap法线贴图

咳咳,好久没有更新了,一来是这段时间很忙很忙,再来就是自己有些懒了,这个要不得啊,赶紧补上.在前面我们已经介绍过了漫反射和镜面反射,这两个是基本的光照类型,仅仅依靠它们就想制作出精美的效果是远远不够的,这一篇我们就来了解一下如何利用一种叫做法线贴图的技术并结合我们前面讲过的知识来制作出更精细的效果. 法线贴图NormalMap 首先要提到的是,什么是法线贴图,如果大家想看更专业的解释可以自行求助搜索引擎,这里我说一下我的个人理解:在游戏中,如果角色或物体模型做的越精细(面数越多),那么渲染后效果

【Unity Shaders】学习笔记——SurfaceShader(七)法线贴图

[Unity Shaders]学习笔记——SurfaceShader(七)法线贴图 转载请注明出处:http://www.cnblogs.com/-867259206/p/5627565.html 写作本系列文章时使用的是Unity5.3. 写代码之前: 当然啦,如果Unity都没安装的话肯定不会来学Unity Shaders吧? 阅读本系列文章之前你需要有一些编程的概念. 在VS里面,Unity Shaders是没有语法高亮显示和智能提示的,VS党可以参考一下这篇文章使代码高亮显示,也可以下载

Unity3D教程宝典之Shader篇:第二十讲法线贴图

转载自风宇冲Unity3D教程学院 上一讲我们讲了凹凸贴图以及生成法线贴图. 这一讲来谈谈怎么使用法线贴图. 一:法线贴图的原理 二:法线贴图的实现 三:法线贴图的使用 四:法线贴图的格式 一:法线贴图的原理 光照效果很大程度上是由垂直于物体表面的法线决定的,因为法线影响反射光的方向.均匀垂直的法线是镜面贴图.但是有时候我们会给一个平面使用砖墙贴图,砖墙应该是凹凸不平的,而如果让砖墙使用该平面的法线的话,画面就会很假,神马?一面墙像镜子一样反光=.= 而如果按真实砖墙去做模型的话,即做高精度模型

WebGL学习之法线贴图

实际效果请看demo:纹理贴图 为了增加额外细节,提升真实感,我们使用了漫反射贴图和高光贴图,它们都是向三角形进行附加纹理.但是从光的视角来看是表面法线向量使表面被视为平坦光滑的表面.以光照算法的视角考虑的话,只有一件事决定物体的形状,那就是垂直于它的法线向量.砖块表面只有一个法向量,表面完全根据这个法向量被以一致的方式照亮.如果每个片元都用不同的法线会怎样?这样我们就可以根据表面细微的细节对法线向量进行改变:这样就会获得一种表面看起来要复杂得多的幻觉: 每个片元使用了自己的法线,我们就可以让光

Unity3d游戏开发之法线贴图

[狗刨学习网]unity极致学院,致力于打造业内第一 一:法线贴图的原理 二:法线贴图的实现 三:法线贴图的使用 四:法线贴图的格式 一:法线贴图的原理 光照效果很大程度上是由垂直于物体表面的法线决定的,因为法线影响反射光的方向.均匀垂直的法线是镜面贴图.但是有时候我们会给一个平面使用砖墙贴图,砖墙应该是凹凸不平的,而如果让砖墙使用该平面的法线的话,画面就会很假,神马?一面墙像镜子一样反光=.= 而如果按真实砖墙去做模型的话,即做高精度模型,一方面制作麻烦,另一方面运行时对性能损耗大. 法线贴图

【Unity Shader】使用法线贴图(Normal Map)的Shader

为何要用法线贴图 为了提升模型表现细节而又不增加性能消耗,所以不选择提高模型的面数,而是给模型的材质Shader中使用上法线贴图(Normal Map),通过更改模型上的点的法线方向,增加光影凹凸效果,从而提升模型表现细节.使用法线贴图能使一个三角面表现出凹凸的视觉效果! 法线贴图原理 http://www.cnblogs.com/tekkaman/p/3992352.html 上面的文章解释了很多问题: 法线被存储在切线空间(Tangent Space Normal)中,所以法线贴图看上去呈蓝