反射贴图

科技工作者之家 2020-11-17

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

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

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

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

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

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

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

在实时三维计算机图形中的应用标准环境映射标准环境映射是一种用来模拟光滑表面对周围环境的反射的技术,常见的如镜子、光亮漆面的金属等等。这种技术的实现主要通过将一张带有周围环境的贴图附在所需要表现的多边形表面来实现的。目前在实时3D游戏画面渲染中经常使用的有两种环境映射。

球形环境映射是模拟在球体表面产生环境映射的技术,通过对普通贴图的UV坐标进行调整计算来产生在球体表面应产生的扭曲。UV的计算利用球体表面的法线来计算。

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

本词条内容贡献者为:

王沛 - 副教授、副研究员 - 中国科学院工程热物理研究所

科技工作者之家

科技工作者之家APP是专注科技人才,知识分享与人才交流的服务平台。