Monthly Archives: February 2016

凹凸纹理

本篇文章谢绝转载,也禁止用于任何商业目的。 代码下载地址:https://github.com/twinklingstar20/BumpMapping 1. 凹凸纹理简介 凹凸纹理(Bump Mapping)是计算机图形学中,使物体表面仿真出褶皱效果的技术,该技术通过(1)扰动对象平面的法向量,(2)利用扰动的法向量进行光照计算,来实现。物体表面呈现出来的褶皱效果,不是由于物体几何结构的变换,而是光照计算的结果,凹凸纹理技术的基本思想最早由James Blinn在1978年提出的。凹凸纹理的效果如图1所示,左图是一个光滑的小球,中间图是一张扰动纹理贴图,通过它来扰动小球平面的法向量,再经过光照计算,就能产生右图所示的带有褶皱表面的小球。 图1. 凹凸纹理效果图 2. Blinn技术 2.1. 数学原理 任何一个三维几何面片,可以用三个带有两个变量的参数形式的表示: 其中,的取值在区间之间,几何面片的局部点的偏微分表示该点的两个方向向量: 单位向量表示与该局部点相切的两个方向的切线,那么该点的法向量可以通过这两个切线向量的叉积得到,如图2所示: 图2. 三维几何面片的法向量 实时渲染中的光照计算,特别是漫反射光和镜面反射光(Phong光照模型),依赖平面的法向量,Blinn技术的原理就是,使用一个扰动函数,对平面的法向量进行扰动,再将扰动后的法向量用于光照的计算。图3(a)~(d)描述了Blinn技术对法向量扰动的基本过程。 图3. 法向量的扰动过程 设扰动函数表示为,原始平面上的一个点 ,经过扰动后的位置为: 而扰动的法向量仍然可以由两个方向向量的偏微分得到: 计算新的位置点在方向上的偏微分,得到: (6)     为了简化问题,可以将上式简化为: (7)   把等式(7)代入等式(5),可以得到: (8)   其中,。 2.2. 算法描述 Blinn技术的算法描述如下所示: 在光照计算之前,对于物体表面上的每个顶点(像素):  查询表面上的每个点在高度贴图(Heightmap)上对应的点;

spacer