灰度图
某点的颜色为P(R,G,B),灰度计算方法:
- 浮点算法:Gray = R*0.3+G*0.59+B*0.11;
- 整数方法:Gray = (R*30+G*59+B*11)/100;
- 移位方法:Gray = (R*76+G*151+B*28)>>8;
- 平均值法:Gray =(R+G+B)/3;
- 仅取绿色:Gray = G;
则点P在灰度图中的颜色为(Gray,Gray,Gray)
高度图
高度图一般是一个灰度图,每一个像素代表一个采样点的高度,一般0(黑色)表示最低点,255(白色)表示最高点。
从数学的角度看,高度图是一个二维数组v,例如采样点(x, y, z),则其灰度 g = z * 255 / MAX_HEIGHT,v[x][y]的颜色就为(g, g, g)。
法线贴图
法线贴图的出现,是为了低面数的模型模拟出高面数的模型的”光照信息”。
模型表面上像素的光照效果只与光照以及表面上的法线相关,法线的方向决定了模型表面的光照效果。因此,光照信息最重要的当然是光入射方向与入射点的法线夹角。
法线贴图跟原始的贴图是一样大小的,贴图内每个点都保存了对应高模某个点的法线信息。
生成法线贴图
法线->颜色:除2加0.5
(-1, 1)->(0, 1)?
(-1, 1)/2 - 0.5 = (-0.5, 0.5) + 0.5 = (0, 1)
因为单位法线向量每个分量的取值范围是-1-1,而颜色的取值范围是0-1,因此要把单位法向量存储为颜色就需要做一个转换。
示例:
(0, 0, 1)/2 + 0.5 = (0, 0, 0.5) + 0.5 = (0.5, 0.5, 1) = (80, 80, FF),蓝紫色
垂直平面的法向量(0,0,1)是最多的,转换为存储颜色为(0.5, 0.5, 1),即(80, 80, FF),蓝紫色,所以通常法线贴图都为蓝紫色的。
读取法线贴图
颜色->法线: 乘2减1
(0,1)->(-1, 1)?
(0,1) * 2 - 1 = (0,2) - 1 = (-1, 1)
示例:
(0.5, 0.5, 1) * 2 - 1 = (1, 1, 2) - 1 = (0, 0, 1),平面法线
读取法线贴图即为生成法线贴图时的逆运算。