一种凹凸贴图新算法 (薛守良,苏鸿根)

原创 2007年09月24日 22:25:00

1 BUMP MAPPING简介
    凹凸贴图是通过随机扰动表面法线的方法,改变光线的反射方向,从而生成表面凹凸纹理的真实感效果。Blinn 在1978 年提出上述的经典方法。

理论上可以求导的函数均可以当作扰动函数F( u , v) 。
         在凹凸贴图中的一个重要概念是凹凸图。凹凸图其实是一种纹理图,它包含了将要用于场景模型的纹理一些简要信息。这种信息根据使用的方法不同,有着不同的形式。比如高度图,那里面存储的就是每个象素的高差值,这种纹理图一般以灰度图方式存储,也就是说,此种凹凸图里只有一维信息;对于法线图来讲,它将每个象素的法矢存储在纹理图中,并以RGB 数据

    作为法矢与三维坐标之间的转换。现在主要的凹凸贴图方法有以下几种:
浮雕式凹凸;扰动u v 凹凸;dot3 凹凸;浮雕式凹凸是通过高度图作为凹凸图的,使用反转后的纹理图在光线方向上偏移,并与原纹理图进行混合,从而产生“浮雕”效果的。这种算法不需要特别硬件的支持,但是效果不理想。
     扰动u v 凹凸又叫做环境凹凸贴图。这种技术需要三层纹理:基本纹理图,凹凸图,反射图;通过凹凸图对反射进行纹理坐标偏移达到预期的效果要求。这种算法是基于多纹理混合以及纹理坐标映射,目前大部分硬件都支持。
dot3 凹凸(Dot Product3 Bump Mapping) 算法是基于上述的Blinn 的算法,不过需要支持DOTPRODUCT3 多纹理操作的硬件。对于以上所述的方法,各有优劣;其中浮雕式凹凸占有资源最低,不需要特别硬件,但是效果最差;扰动u v 凹凸及dot3 凹凸占有资源较多(包括CPU 及GPU) ,效果较好,但是dot3 凹凸需要特别硬件支持,而且只有在点光源的情况下才有较好的效果。本文所述的方法,不需要特别硬件的支持,资源占有较少,但是效果很好。称之为CP 凹凸(Cross - Plane Bump Mapping) 。

2  CP 凹凸算法
       在CP 凹凸方法中,将凹凸图定义为曲面上点的法矢角度的集合。此纹理图
的每一个象素以32bit 浮点数表示,代表法向矢量的角度。如图1。在如图所示的平面方式中,可以定义

     起始角度为0 (0) ,终止角度为1 ( PI) 。但是在实际运用中是三维的情况,将使用两个凹凸图:水平图,垂直图;水
平图表示在XOY 平面上的凹凸变化,垂直图表示在ZOY平面上的凹凸变化;如图2。
算法中需要两个关键,一个是光源矢量的角度,一个是凹凸图;当曲面上的一点的法矢和光矢量一样时,那么结果是0 (黑色) ;如果二者相差不大,结果就是不太暗的颜色;如果相差很大,那么将是亮角;这里可以看出,所需的纹理图是光矢量与法矢的差异值;即需要将凹凸图中减去光矢量(实际存于颜色数据中) 的绝对值作为纹理的结果。最后将这些纹理结果反转,混合水平及垂直的凹凸图,得到场景中最终的结果。

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

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

[OpenGL] Simple Bump mapping(简单凹凸纹理映射)

reference:原文地址 code:下载源代码 注:这份代码年代比较久远了,直接跑会提示各种未定义标识符,经过查阅发现这些都是glew中的。如果想要通过编译,首先需要配置并include gl...

openGL CG06 – Normal Mapping (法线贴图)

Normal Mapping(法线贴图),不论是在游戏开发还是其他计算机图形开发中都是使用很广泛的技术。如果一个物体的表面粗糙不平,物体顶点的法线也就朝向各个不同的方向,所以物体看起凹凸不平。要表现这...
  • thenile
  • thenile
  • 2013年04月27日 13:32
  • 2905

OpenGL学习笔记——纹理贴图

简单地说,纹理就是矩形的数据数组。例如,颜色数据、亮度数据、颜色和alpha数据。纹理数组中的单个值常常称为纹理单元(texel)。纹理贴图之所以复杂,是因为矩形的纹理可以映射到非矩形的区域,并且必须...

求最大子矩阵(子矩阵无大小要求)dp

总时间限制: 1000ms 内存限制: 65536kB 描述已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。 比如,如下4...

<hdoj1559>最大子矩阵

Description 给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。 Input 输入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的...

凹凸贴图源代码

  • 2013年05月09日 09:39
  • 1KB
  • 下载

Unity3D关于详解凹凸、法线、视差、位移贴图

凹凸贴图 ((更多资源资料下载群:193521697邀请码:10026)) 对于凹凸贴图在计算机图形领域中的研究,最早开始于70年代末,至今已经有接近30年历史了。NormalMap只是一种目前很...

dx9凹凸贴图程序实例

  • 2008年03月28日 13:19
  • 70KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一种凹凸贴图新算法 (薛守良,苏鸿根)
举报原因:
原因补充:

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