抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

三维模型的表示方法

常见的模型表示法有:多边形网格、点云、体素、参数模型、隐式表面

Polygon mesh

一般特指三角形网格

三角形网格由两部分组成:

  • 一个个离散的顶点
  • 顶点间的拓扑关系

图形渲染中最常见的方法是光栅化和光追,都适用于三角形

方便进行深度测试、UV映射

方便进行模型细分和简化、布尔建模

美术行业长期使用该格式,存在很强的惯性

Voxel

与2D的像素类似,我们使用体素填充3D空间,就能表示一个三维模型

体素对空间的描述是均匀的,想要达到和三角网格相近的精度,需要占用更大的存储空间,这也意味着相同存储空间下体素的精度更差

下图左为2MB的三角网格,图右为13MB的SDF体素

voxel

SDF体素具有非常好的光追性能,很容易进行相交测试和求出光线移动的距离

体素可以进行离散化,就像Clipmap那样,大片连续的体素会被合成为一个大体素,以降低存储空间(但还是比三角网格空间大)

不过为了保持边缘柔顺,我们需要在边缘处保留大量细小的体素,这种边缘处理会影响光追性能,一个好的模型数据结构应该能够表示软硬边,而非专门浪费性能来实现光滑

我们仍需要使用贴图映射,体素颜色不能替代UV,体素UV可能会出现接缝问题

Point cloud

多边形网格某种程度上就是有拓扑关系的点云

点云记录了模型表面顶点的坐标

点云渲染会带来巨大的overdraw,为此我们需要进行填洞、做深度剔除,而填洞的难度很大

点云的一大优点是更适合通过扫描获得(三角形网格扫描容易出现破面)

点云的另一大优点是数据的顺序无关,我们可以任意调整顶点存储的顺序,但这其实也是一种缺点,我们不好比较两个点云的差异

Implicit field

使用一组连续函数的零水平集来表示3D模型

连续函数的零水平集:使函数值=0的输入取值的集合

SDF就是一种隐式场,通过定义一组距离值函数,将点的坐标带入函数可以求得点到物体表面的距离

可以快速进行碰撞检测、UV生成

但制作难度过高,难以表达所有的模型,对于复杂模型,计算复杂度过高

难以进行编辑、布尔操作、细分

评论