- 概要
- 讲了quad displacement mapping,其鼻祖是parallax mapping.parallax mapping的原理:就是在渲染物体的时候多加一张表是物体表面坑洼成都的depth map,然后在tangent空间做一个简单的raymarch:所渲染的点实际上是个坑,根据depth map可以知道这个坑的半径大小,于是可以沿着tangent space的view向量做个ray march,最终得到视线实际会碰撞到的表面点的uv,再在那一点上采normal、diffuse等来做surface shading。简单的办法很耗:因为ray march做linear search不光需要好几步、还有可能一步直接穿透了薄的几何表面。
- 以往类似的技术
- relief mapping:linear search+binary search(在发现某一步穿透后再这一步和之前一步间做binary search)
- parallax occlusion mapping(POM):不用最后的binary search,而是用最后两点的depth值做权重差值。据说也能得到和relief mapping差不多的效果,而计算就简化了
- cone step mapping:需要额外的precomputed数据:cone map。就是在depth map的每个像素点上计算一个cone(方向都是垂直平面朝上),cone用来描述这个像素所在的坑的大小(假如旁边像素比较矮、则cone的开口角度会特别大,反之如果周围都是比当前像素高很多的高地(当前像素在深坑里)则cone开口角度会特别小。这样cone map就conservatively地描述出了表面上方地空着的空间,raymarch的时候在每个像素点不再使用固定步长做步进,而是直接让ray和cone相交、求交点,再从交点开始下一步迭代。
- relaxed cone step mapping:cone step mapping的一个问题是:由于cone map是conservative,每个cone的开口角度都会比较小,导致每一步的步子都不大。所以relaxed cone step mapping把cone map的生成方式做了修改:保证ray在cone里走的时候有可能能穿过depth map表面、但是最多只穿过一次(不会出现穿透薄墙的情况)。这样每个cone的开口角都能大不少