虽然现在的显卡处理多边形的速度能够达到每秒千万级,其数量仍然无法满足对很多自然现象的模拟,比如云、草、地形、皮肤等
以一个桔子的建模为例,从一个球体用桔子表皮颜色着色开始,对球体形状进行细化,使其接近桔子的真实形状,其存在的问题有二,一是无法完全表达桔子表面结构的特点,二是会产生大量的多边形
桔子建模的难点在于其表皮特征,可以考虑用一真实桔子的图片,将其"贴"到简单几何模型的表面,该过程称为纹理映射,但仍然无法完全满足要求,比如局部区域形状的平滑,要求修改局部的形状,为此可考虑采用凹凸贴图
映射的三种类型,分别为:
几何模型平滑着色
纹理映射
环境映射
凹凸映射
纹理映射发生在渲染管线的最后阶段,由于面片已经经过了裁剪处理,因此计算效率很高
基本映射策略需考虑两个问题:
纹理映射,其基本原理是将二维图像映射到三维物体表面,其实现涉及多个坐标系间的转换
纹理映射过程中涉及的坐标系主要包括:
纹理映射的基本问题是找到纹理坐标系到最终成像图像间的映射,即从纹理坐标到表面上点的坐标,需要找到三个映射函数,即有 $$ \begin{cases} x=x(s,t)\\ y=y(s,t)\\ z=z(s,t) \end{cases} $$
求解映射问题,可以从两方面考虑
两步映射法先将纹理映射到一个简单的中间形体上,比如可以先映射到一个圆柱体上
对圆柱体可建立参数方程
$$
\begin{cases}
x=r\cos{2\pi u}\\
y=r\sin{2\pi u}\\
z=v/h
\end{cases}
$$
将$(u,v)$空间的矩形区域映射到世界坐标系中半径为$r$高度为$h$的圆柱体上
$$
\begin{cases}
s=u\\
t=v
\end{cases}
$$
将纹理空间映射$(s,t)$到矩形区域$(u,v)$
可以利用球体作为中间形体,建立球体的参数方程,有 $$ \begin{cases} x=r\cos{2\pi u}\\ y=r\sin{2\pi u}\cos{2\pi v}\\ z=r\sin{2\pi u}\sin{2\pi v} \end{cases} $$ 可以同样的方式将$(u,v)$空间的矩形区域映射到世界坐标系中半径为$r$的球体上。但由于映射到球体存在形变,需要考虑对形变的处理。映射到球体主要用于环境映射
也可以通过简单的正投影直接映射到盒子表面,同样应用于环境映射计算中
从中间形体映射到实际形体上,有三种策略:
对纹理进行点采样的结果可能会造成混淆错误(Aliasing Errors)
针对点采样存在的问题,可采用面积平均的方法,虽然速度较慢,但是效果较好