OpenSubdiv是Pixar专门开发的一款基于离散曲面离散化算法的开源库,Sdc.Crease是其中一个重要的模块,用于处理曲面上的折痕。
在离散曲面上,折痕是由四条或更多条边的连接形成的,这些边构成了可设置权重的Crease Edge。在Sdc.Crease中,Edge权重的默认值为0,表示曲面是光滑的,当Edge权重为非零时,该边上的顶点将被冻结,并且该边两侧顶点的平均值将不再相等,从而形成折痕。Crease Edge的值可以在建立拓扑时手动设定,也可以根据需要动态调整。
Sdc.Crease库提供了一组API来设置Crease Edge的值和查询Edge的信息。在计算曲面离散化前,需要首先创建一个Sdc.Crease对象,并设置每个Crease Edge的值:
Sdc::Crease crease(0); //创建一个Crease对象
crease.SetEnabled(true); //启用Crease
crease.SetVertexSharpness(vertexID, sharpness); //设置Vertex的Sharpness值
crease.SetEdgeSharpness(edgeID, sharpness); //设置Edge的Sharpness值
之后,在构建拓扑的时候需要调用SetPtexIndex等函数,以告知Sdc.Crease相应边的Sharpness值。
使用Sdc.Crease库计算曲面离散化后,可通过Crease算法获取Crease Edge相关信息:
Sdc::Crease crease(0); //创建一个Crease对象
crease.SetEnabled(true); //启用Crease
//使用Crease算法获取Crease Edge相关信息
通过使用Sdc.Crease,可以轻松在曲面上构建折痕,并在计算曲面离散化后获取Crease Edge的相关信息。对于需要在曲面上进行折痕处理的应用场景,Sdc.Crease是不可或缺的工具。