简介凹凸映射Bump Mapping(转载)

转载 2007年10月11日 11:38:00

转自http://bbs.gameres.com/showthread.asp?threadid=20805 

简介凹凸映射Bump Mapping

凹凸映射和纹理映射非常相似。然而,纹理映射是把颜色加到多边形上,而凹凸映射是把粗糙信息加到多边形上。这在多边形的视觉上会产生很吸引人的效果。我们只需要添加一点信息到本来需要使用大量多边形的物体上。需要注意的是这个物体是平的,但是它看起来却是粗糙不平的。让我们来看看左边的那个立方体。如果你很近地观察它时,你会发现它上面的很多细节。它看起来好像是由成千上万个多边形构成的,其实它只是由6个矩形构成。你或许会问:“这和纹理映射有什么不同?”它们的不同之处在于——凹凸映射是一种负责光方向的纹理映射。

(1)凹凸映射背后的原理

让我们来看看一个粗糙的表面。从远处看,你判断这个物体是粗糙的的唯一证据是在它表面上下的亮度有改变。你的大脑能够获得这些亮暗不一的图案信息,然后判断出它们是表面中有凹凸的部位。左边的一幅图就说明了这一点。你可以发现它是一个浮雕式的表面。一些矩型和字母被印入表面,但是它们摸上去就像是一个隐藏的监控器的玻璃。如果这个图像是在适当的位置上,那么它除了改变亮度,不需要再做任何其他的工作。

那么你也许会问:我是怎么知道哪些点要亮,哪些点要暗呢?这不难。绝大多数人生活在这样一种环境下——这个环境的大多数光源来自上方(译者注:比如白天主要的光来自太阳,夜晚主要的光来自天花板上的日光灯)。所以向上倾的地方就会更亮,而向下倾的地方就会更暗。所以这种现象使你的眼睛看到一个物体上亮暗区域时,可以判断出它的凹凸情况。相对亮的块被判断是面向上的,相对暗的块被判断是面向下的。所以我只需要给物体上的线条简单得上色。

如果你想要更多的证据,这里还有一幅几乎相同的图,不同于前的是它旋转了180度。所以它是前一幅图倒转的图像。那些先前看起来是凹进去的区域,现在看起来是凸出来的了。

这个时候你的大脑并没有被完全欺骗,你脑中存留的视觉印象使你仍然有能力判断出这是前一幅图,只是它的光源变了,是从小往上照的你的大脑可能强迫性地判断出它是第一幅图。事实上,你只要始终盯着它,并且努力地想像着光是从右下方向照射的,你就会理解它是凹的(译者注:因为日常生活的习惯,你会很容易把这些图形判断成凸出的图形,但是因为有了上一幅对照图的印象,你可能才会特别注意到这些图块其实还是凹入的,只是判断方法不符合我们日常生活习惯,因为这时大多数光不是从上方照射,而是从下往上照射)。

(2)什么是凹凸图(Bump Map)

凹凸图和纹理图很相似。但是不同的是,凹凸图包含的不是颜色信息,而是凹凸信息。最通常的方法是通过存储高度值实现。我们要用到一个灰色的纹理图,灰色的亮度体现出每个点分别凸出多少(见右图)。这就是一个非常方便的保存凹凸图的方法,而且这种图很容易制作。这副图具体又是怎样被渲染器使用的呢?你接着往下看就会明白了。
当然,你并不一定要把自己局限于这些简单的图形,你可以扩展,用它来做木材,做石头,做脱了漆的墙面,做任何你想做的物体。

(3)那么它是怎么工作的

凹凸映射是补色渲染技术(Phong Shading Technique)的一项扩展,只是在补色渲染里,多边形表面上的法线将被改变,这个向量用来计算该点的亮度。当你加入了凹凸映射,法线向量会略微地改变,怎么改变则基于凹凸图。改变法线向量就会改变多边形的点的颜色值。就这么简单。

现在,有几种方法来达到这个目的(译者注:这个目的指改变法线向量)。我并没有实际编写补色渲染和凹凸映射的程序,但是我在这里将介绍一种我喜欢的方法来实现!

现在我们需要将凹凸图中的高度信息转换成补色渲染用到的法线的调节信息。这个做起来不难,但是解释起来比较费劲。

好的,我们现在将凹凸位图的信息转换成一些小向量——一个向量对应于一个点。请看左边一副放大的凹凸图。相对亮的点比相对暗的点更为凸出。看清楚了吗?现在计算每个点的向量,这些向量表征了每个点的倾斜情况,请看下图的描绘。图中红色小圆点表示向量是向下的:

有很多计算向量的方法,不同的方法精确度不同,但是选择什么方法要取决于你所要求的精确度是个什么层次。最通常的方法是分别计算每个点上X和Y的倾斜度:

x_gradient = pixel(x-1, y) - pixel(x+1, y)
y_gradient = pixel(x, y-1) - pixel(x, y+1)

在得出了这两个精确度后,你就可以计算多边形点的法线了。


这里有一个多边形,图上绘出了它的一条法线向量——n。除此,还有两条向量,它们将用来调节该点法线向量。这两条向量必须与当前被渲染的多边形的凹凸图对齐,换句话说,它们要与凹凸图使用同一种坐标轴。下边的图分别是凹凸图和多边形,两副图都显示了U、V两条向量(译者注:也就是平面2D坐标的两条轴):

现在你可以看到被调节后的新法线向量了。这个调节公式很简单:

New_Normal = Normal + (U * x_gradient) + (V * y_gradient)

有了新法线向量后,你就可以通过补色渲染技术计算出多边形每个点的亮度了。

凹凸映射 Bump mapping(unityshader入门精要学习笔记)

凹凸映射 Bump mapping 使用一张法线纹理(normal map)来直接存储表面法线,又被称为法线映射。 由于法线纹理中存储的法线是切线空间下的方向,因此有2 种选择: 1.在切线空间下进行...
  • u013354943
  • u013354943
  • 2016年10月10日 17:41
  • 1702

凹凸贴图(Bump Map)实现原理以及与法线贴图(Normal Map)的区别

凹凸贴图(Bump Map)实现原理 以及与法线贴图(Normal Map)的区别 1 前言 翻译这篇教程的目的是为了帮助那些对图形渲染技术有兴趣却又苦于找不到免费中文学习资料的...
  • meegomeego
  • meegomeego
  • 2013年02月23日 14:40
  • 20997

UE4 无需切线空间应用凹凸贴图

Unreal Engine 4.9 照亮环境 凹凸贴图(Bump mapping) 最早由一名图形程序员发明(1978 James Blinn),它通过调整后的着色计算...
  • pizi0475
  • pizi0475
  • 2016年12月29日 20:27
  • 1548

凹凸映射Bump Mapping

凹凸映射和纹理映射非常相似。然而,纹理映射是把颜色加到多边形上,而凹凸映射是把粗糙信息加到多边形上。这在多边形的视觉上会产生很吸引人的效果。我们只需要添加一点信息到本来需要使用大量多边形的物体上。需要...
  • thenile
  • thenile
  • 2013年04月27日 12:29
  • 860

[翻译] 凹凸贴图(bump mapping) 节选自RTR 6.7

这一节特别有趣,而且目测比较难懂,决定发动翻译大法 6.7 综述这一节描述了一系列的小尺寸细节表达技术,统称为凹凸贴图 bump mapping。所有这些技术都通过每像素着色的程序来完成的。它们可以给...
  • YgritteSnow
  • YgritteSnow
  • 2016年08月10日 20:00
  • 696

凹凸映射(Bump Map)实现原理

我翻译这篇教程的目的是为了帮助那些对图形渲染技术有兴趣却又苦于找不到免费中文学习资料的人。在我的身边没有任何一位从事计算机专业的前辈,从刚学会 WINDOWS的基本操作到现在,我的计算机技术完全都是一...
  • weiqubo
  • weiqubo
  • 2011年11月28日 11:27
  • 1320

凹凸映射(Bump Map)实现原理

James EBlinn在1978年提出了凹凸纹理映射技术的思想基础。这种方法并不是真正改变了物体表面的几何外观,而是在通过扰动物体表面的法向量来实现具有凹凸感的假象。 我翻译这篇教程的目的是为了帮...
  • whucv
  • whucv
  • 2013年06月18日 22:06
  • 1262

了解凹凸映射Bump Map技术的内幕

我翻译这篇教程的目的是为了帮助那些对图形渲染技术有兴趣却又苦于找不到免费中文学习资料的人。在我的身边没有任何一位从事计算机专业的前辈,从刚学会WINDOWS的基本操作到现在,我的计算机技术完全都是一步...
  • Hefee
  • Hefee
  • 2012年01月16日 23:00
  • 456

bump凹凸团队正式加入谷歌

近期,著名的APP凹凸团队宣布了将正式加盟谷歌,凹凸团队致力于APP的开发,有过很多不错的产品和业绩。下面还能是bump凹凸团队的公告。         公告译文如下:          ...
  • u012154033
  • u012154033
  • 2013年09月17日 15:25
  • 775

凹凸材质:从Bump Map 到 Relief Map

参考 1、Bump Mapping综述 2、Unity3D ShaderLab开发实战详解 写在前面         其实搞清了切线空间的问题之后,凹凸贴图这个论题就没有什么特别的难点...
  • ronintao
  • ronintao
  • 2016年08月22日 01:26
  • 1106
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简介凹凸映射Bump Mapping(转载)
举报原因:
原因补充:

(最多只允许输入30个字)