yanglp

导航

《Efficient sparse voxel octrees》之三角网格与体素的对比

  这是一篇SIGGRAPH2010,《Efficient sparse voxel octrees》,其中对三角网格与体素进行了比较详细的对比,我觉得比较有价值,把这部分翻译了一下,希望能对自己和别人都有帮助:

  以前常常看别人翻译的东西,觉得很多地方都词不达意;自己动手的时候才知道挺难的,很多术语都不知道如何表达好,也不知道用什么工具可以有效的查阅。翻译的很差,不是觉得自己翻译了半天就直接删除了。权当抛砖引玉吧,还是直接看原文好一点

  体素表示法与三角网格表示法的比较:

  1. Memory Usage
      一般都认为体素表示法要占用大量的内存,当数据是真三维数据时(例如核磁共振扫描的数据)确实是这样的,但如果只是表示曲面,内存的使用可以降低到N的平方(N是一方维度上的分辨率)。就复杂性而言,这与三角网格是相同的,三角网格的表面总面积也是影响内存占用的因素,如果使用unique texturing(即独有的而不是可以重复使用的纹理,不知道翻译成什么合适…)。
  2. Downsampling
      Downsampling应该是指距离物体比较近或者物体采样相当粗时,发生屏幕上几个像素点对应同一个采样,解决这种采样不足的问题也是图形学的一个难题。
         对于三角网格的采样不足是比较好理解的,比如在表现草、毛发等事物的时候,如何在采样不足的情况下把这些半遮挡关系比较好的表示出来是一个至今都没有解决好的问题。对于体素来说,理论上解决这个问题是比较容易的。把遮挡与半遮挡问题考虑进来时,把几个子体素结合到一起的表现要与其父体素的表现相同。但实际实现时,处理体素数据的采样不足问题还是有难题的。
         总的来说,在这个问题上,三角网格的处理技术相对于体素的处理技术要成熟的多。
  3. Zooming
        一个普遍的认识是使用体素表示法时,当把相机调到离物体比较近的位置,体素显得比较“块状”(blocky),当然这个问题在三角网格表示时也是存在的。
        在三角网格表示中,这个问题在进行纹理查找的时候就进行滤波处理了,但是对于体素来说这基本是不可能的,因为体素表示法中数据不是以二维数组这种便于查找的数据结构来进行组织的。此论文后来提到的post-process filtering是一个不错的选择。不管哪种情况下,体素与三角网格都可以达到同样精度的带纹理的表面。
  4. Deformation
        三角网格是进行变形的,对顶点进行变换再让其表面跟着顶点进行变形。对顶点位置进行内插值来混合多重变换是当前对三角网格变形时实际使用的方法。
        对体素数据进行变形的方式与三角网格变形时使用的方法很不相同。一种对体素数据进行变形的没价值的方法是对变形的每一帧都计算出独立的数据集。这是一种蛮力法,与视频序列中包含一系列独立的图像帧很相似。数据量可能相当巨大,但使用与视频压缩中相似的压缩技术可以使数据量降低到可以接受的大小。一个主要的问题是这种方法只能处理那种预先知道的变形。总的来说,这不是一种很有吸引力的解决方法。对体素数据来说,变形中最大的问题是把体素从一个位置移动到另一个位置并不容易。也正因为这个原因,有人提出了另一种比较适合变形的数据结构——surface splats,这种数据很容易组织成一个标准的BVH树,这样当变形时把splats从一个位置移动到另一个位置花费的时间是线性的。需要的BVH树的大小随着splats的数量的增多线性增长,也就是说,即使splats占用的内存要比voxels还要多,也只是多一个常数倍数。
  5. Authoring
        这里涉及的是如何来建立所要绘制的数据,相当于三角网格的建模。
        对于三角网格来说,已经有成熟的工具流程来建立三维模型。有自动的工具来为纹理产生UV坐标,美术人员只需要在模型上进行绘制,而不需要直接操作纹理。而当模型的几何细节相当多时使用另一种技术:使用ZBrush和Mudbox一类的工具,可以在模型上类似于雕刻一样的操作,最终的模型包括一个三角面片很少的网格、一个颜色贴图或者displacement map。
        对于体素数据来说,使用雕刻类似的界面是产生细节丰富的模型的唯一方法,当然把三角网格的模型转化成体素模型也是一种方法。但把三角网格模型转化成体素模型却会把两种方法的缺陷都引进来,除非原始数据的精度相当高,否则体素方法不能完全发挥出来。
  6. Acquisition
        体素数据方法和别的基于采样的方法一样,擅长处理使用扫描仪或摄像机获得的真实世界里的数据。对2D或3D区域进行扫描得到的都是一些离散的数据点。点云当然也可以转换成带细节和颜色三角网格,进而转换成基网格和displacement map。但是,假如原始数据是细小枝干那种三角网格所不擅长的结构,点云转换成三角网格的每一步都有困难。
        如果这们直接把输入的数据转换成体素或者splat,三角网格时的那一系列转化就都可以省掉了。即使有一些采样不足的情况,也可以把输入进来的那部分正确的显示出来,只要不把相机调到太近的位置看,就可以表现的比较正常。这一点是三角网格所不能比的。
  7. Rendering
        displacement-mapped的三角网格使用GPU可以直接被光栅化,这使得它的渲染过程与现在基于网格的渲染很相似。然而对这类的网格进行光线投射(ray casting)是相当困难的。Displacement map的强大之处就在于把百万数量级的三角形编码在一个很小的空间里,如果要进行光线投射而把这些三角形进行解码,是相当不方便的。在实际中,对displacement map的光线投射要分两个层次,首先是判断光线与displaced geometry的边界的相交情况,其次才是判断与displacement map里的三角形的相交情况。
        体素数据也可以被直接光栅化,但并不像光线投射一样的有效率。另一方面,由于八叉树数据结构的特点,对体素层次数据进行光线投射是相当高效的。对体素数据进行光线投射计算时,可以根据光源的远近来使用适当的细节层次,这能够减少计算量和内存占用,同时还能够减少由于高频内容而出现的走样。
  8. Summary
        总的来说,在内存占用方面,三角网格有着明显的优势;在采样不足的情况下,体素方法可以更好的进行处理;在Zooming到很近的时候,三角网格的表现要比体素要好,虽然体素也可以使用某些方法进行优化,但不提高分辨率时,锐利的边缘并不总能表现的很好;对于体素,就目前来说,不可能有效率的进行变形,而三角网格可以没问题的做到;对于制作原始数据来说,三角网格现在要比体素成熟,但谁能够胜任真实世界的需要才是最好的;对于从真实世界中采样的数据,体素处理起来要比三角网格好很多,特别是采样不足或者采样的数据不够完整;最后,三角网格在渲染方面的优势主要得益于快速的光栅化,这是由硬件支持的,而体 素数据在渲染方面的优势主要体现在能够进行快速的光线投射。

posted on 2010-08-04 16:29  yanglp  阅读(1701)  评论(0)    收藏  举报