这一篇来说说 网格生成方法 中的 Screen Space Mesh 法。
Screen Space Mesh
一般情况下,从隐函数曲面中提取出记载着表面数据的三角形网格面(mesh)时,我们常用像Marching Cubes这样的方法,把3D空间划分成数个3D网格单元(grid),然后在每个单元内生成mesh。与之不同,Screen Space Meshes(SSM)[1]则是一种在2D屏幕空间中生成mesh的方法。
SSM的处理对象是从粒子中生成的隐函数闭曲面。当我们用三角形mesh来表示物体的形状时,人眼看不到的面是没有绘制必要的,我们常用的OpenGL等3D API图像绘制中一般都会实现这样的隐面消除功能。SSM法也与之类似,由于没有必要绘制隐面,这个方法先从3D空间的粒子投影到2D屏幕空间后生成的深度图中,生成2D的mesh,然后再对进行逆投影处理,只生成从视点能看到的那部分由三角形构成的mesh。另外,通过给深度图添加平滑过滤器,可以得到类似元球技术(Metaball)这样的渲染。
3D Marching Cubes的计算量与各轴的分割数n的三次成比例,而由于SSM是在2D空间中生成mesh的手法,计算量只和n的2次相关。
输入
SSM的处理对象是粒子数据,输入数据可分为粒子的坐标和投影变换矩阵两部分,表示如下。
- 粒子坐标 :
- 投影变换矩阵 :
固定参数如下所示:
- 屏幕间隔 :
屏幕空间的grid大小。 - 粒子半径 :
屏幕空间中的粒子半径。 - 平滑化系数 :
深度图平滑化的过滤器大小和轮廓平滑化的迭代次数。 - 深度阈值 :
深度值的网格化阈值。比这个阈值大的深度值所在的grid才进行mesh化处理。
处理步骤
深度图表示为:
各grid的深度值则用表示。grid分割数,是由屏幕间距和屏幕大小()按照如下方式计算。