Monthly Archives: February 2016

凹凸纹理

本篇文章谢绝转载,也禁止用于任何商业目的。 代码下载地址:https://github.com/twinklingstar20/BumpMapping 1. 凹凸纹理简介 凹凸纹理(Bump Mapping)是计算机图形学中,使物体表面仿真出褶皱效果的技术,该技术通过(1)扰动对象平面的法向量,(2)利用扰动的法向量进行光照计算,来实现。物体表面呈现出来的褶皱效果,不是由于物体几何结构的变换,而是光照计算的结果,凹凸纹理技术的基本思想最早由James Blinn在1978年提出的。凹凸纹理的效果如图1所示,左图是一个光滑的小球,中间图是一张扰动纹理贴图,通过它来扰动小球平面的法向量,再经过光照计算,就能产生右图所示的带有褶皱表面的小球。 图1. 凹凸纹理效果图 2. Blinn技术 2.1. 数学原理 任何一个三维几何面片,可以用三个带有两个变量的参数形式的表示: \(X=X(u,v),Y=Y(u,v),Z=Z(u,v) \tag{1}\) 其中,\(u,v\)的取值在区间之间,几何面片的局部点的偏微分表示该点的两个方向向量: \(\overrightarrow{{{P}_{u}}}=\left( {{x}_{u}},{{y}_{u}},{{z}_{u}} \right),\overrightarrow{{{P}_{v}}}=\left( {{x}_{v}},{{y}_{v}},{{z}_{v}} \right) \tag{2}\) 单位向量\(\overrightarrow{{{P}_{u}}},\overrightarrow{{{P}_{v}}}\)表示与该局部点相切的两个方向的切线,那么该点的法向量可以通过这两个切线向量的叉积得到,如图2所示: \(\overrightarrow{N}=\overrightarrow{{{P}_{u}}}\times \overrightarrow{{{P}_{v}}} \tag{3}\) 图2. 三维几何面片的法向量 实时渲染中的光照计算,特别是漫反射光和镜面反射光(Phong光照模型),依赖平面的法向量,Blinn技术的原理就是,使用一个扰动函数,对平面的法向量进行扰动,再将扰动后的法向量用于光照的计算。图3(a)~(d)描述了Blinn技术对法向量扰动的基本过程。 图3. 法向量的扰动过程 设扰动函数表示为\(F(u,v)\),原始平面上的一个点 \(P\),经过扰动后的位置为: \(P'=P+F\cdot \overrightarrow{N}/\left| \overrightarrow{N} \right| \tag{4}\) 而扰动的法向量\(\overrightarrow{N'}\)仍然可以由两个方向向量的偏微分得到:

spacer