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

来源:互联网 发布:tensorflow安装32位 编辑:程序博客网 时间:2024/05/20 20:44

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 (黑色) ;如果二者相差不大,结果就是不太暗的颜色;如果相差很大,那么将是亮角;这里可以看出,所需的纹理图是光矢量与法矢的差异值;即需要将凹凸图中减去光矢量(实际存于颜色数据中) 的绝对值作为纹理的结果。最后将这些纹理结果反转,混合水平及垂直的凹凸图,得到场景中最终的结果。

原创粉丝点击