反射贴图

反射映射(Reflection mapping)在计算机图形学领域是用预先计算的纹理图像模拟复杂镜面的一种高效方法。纹理用来储存被渲染物体周围环境的图像。有几种不同的方法可以用来保存周围环境,其中最常用的方法之一是标准环境映射,在这种方法中周围环境在一个镜面球体上反射得到单一纹理图像。另外一种常用方法是立方环境映射,在这种方法中环境在立方体的六个表面上显现出来,所以需要保存为六个正方形的纹理。

反射映射实例
环境映射是基于图像照明的基础,看这里 rthdribl页面存档备份,存于互联网档案馆) 中的一个截屏图像

这种实现方法比传统的光线跟踪(光线跟踪通过射出一束光线并且跟踪光线的传输路径来计算反射)算法效率更高,但是需要注意的是这种方法是实际反射的一种近似,有时甚至是非常粗糙的近似。这种技术的一个典型的缺点是没有考虑自反射,即无法看到物体反射的物体自身的某一部分。

典型的反射映射

标准环境映射

标准环境映射更加常用的名称是球形环境映射,是反射无限远环境物体的纹理球面的应用。使用鱼眼镜头预渲染或者光探头生成球形纹理,然后将这个纹理映射到空球表面,通过计算物体上个点的光向量到达环境图上的纹素从而确定纹素的颜色。这项技术类似于光线跟踪,但是由于所需物体各点的所有颜色图形处理单元已经预先知道,所以所需做的就是计算入射与反射角度。

1982年 Gene Miller 在 MAGI Synthavision 首次试验了球形环境映射。[1] 在 Christine Chang 的帮助下,他在 MAGI 的停车场拍摄了一幅圣诞装饰照片。通过将球体的照片裁减到直径大小,他将照片映射到空球表面(参见上面的过程)(Fig. 1页面存档备份,存于互联网档案馆))。然后,他将这幅纹理用到 Ken Perlin (Fig. 2页面存档备份,存于互联网档案馆)) 创建的一个斑點狗模型上,并且将环境映射模型添加到停车场照片上,就得到 Fig. 3页面存档备份,存于互联网档案馆) 中的照片。这种环境映射的技术最后在真实的环境高动态范围成像中的基于图像的照明中得到了应用(参见这里页面存档备份,存于互联网档案馆))。

球形映射有一些明显的限制,其中之一是,由于纹理属性的原因,在球形映射物体的后面有一个突变点。下面的立方映射就是为了解决这个问题而开发出来的,如果能够正确地生成与滤波,立方映射就没有明显的接缝,所以很显然它是旧的球形映射的替代者,目前球形环境映射在当今的图形应用中几乎已经销声匿迹了。

立方环境映射

 
解释立方映射工作原理的示意图

立方反射映射是用立方映射使得物体看起来如同在反射周围环境的一项技术。通常,这通常使用户外渲染中使用的 skybox 完成。尽管由于反射物周围的物体无法在结果中看到,所以这并不是一个真正的反射,但是通常仍然可以达到所期望的效果。

通过确定观察物体的向量就可以进行立方映射反射,照相机光线在照相机向量与物体相交的位置按照曲面法线方向进行反射,这样传到立方图(cube map)取得纹素(texel)的反射光线在照相机看来好像位于物体表面,这样就得到了物体的反射效果。

在实时三维计算机图形中的应用

标准环境映射

立方环境映射

 
使用立方反射映射的一个三维模型实例

如果能够正确使用,立方映射反射或许是渲染反射表面最快的方法。为了提高渲染的速度,每个定点都要计算反射光线的位置,然后,在于这些定点相关的多边形中对位置进行插值,这样就可取消对每个像素的反射进行计算。

参见

  1. ^ 存档副本. [2006-09-26]. (原始内容存档于2006-06-17).