雾化原理
雾化效果基于点到相机的距离将场景产生的颜色与雾的颜色进行混合而得到。距离相机近,雾化效果越不明显,距离相机越远雾化效果越强。由此有雾化混合公式:
Color = f * SceneColor + (1 - f) * FogClor,其中Color是混合后的结果颜色,SceneColor是没有雾化时场景的最初颜色,FogColor是雾的颜色,f是混合因子。
雾化混合因子的计算
雾化混合因子在不同的雾化模式中有不同的计算方式:
- 线性雾化:
f = (end - distance)/(end - start)
其中distance是点到相机的距离,很多应用了为了简化计算直接将点在相机空间中的z看成是到相机的距离。
- 指数雾化:
f = 1 / ( exp(density * distance) )
其中density表示雾的浓度。 在unity中计算公式是:exp2( ln(2) / (distance * density) )
- 二次指数雾化:
f = 1 / ( exp(density*density * distance * distance) )
在unity中计算公式是:exp2( ln(2) / (distance * distance * density * density) )
顶点雾化和像素雾化
雾化可以在顶点阶段,也可以在像素阶段进行。
顶点雾化是逐顶点计算的,并且在顶点阶段就根据点到相机的距离计算出雾化因子,在像素阶段进行混合。
像素雾化是逐像素计算的,在顶点阶段计算出点到相机的距离,在像素阶段计算出雾化因子并进行混合。