OpenSubdiv是一个用于高性能、可扩展三角网格细分的库。它支持各种平台和渲染器,并在Pixar动画工作室中使用,能够在大规模场景下高效完成细分操作。其中,Osd.CudaPatchTable是OpenSubdiv的CUDA版本中的数据结构,用于存储三角形网格细分时的细分信息。
struct CudaPatchTable {
...
};
int numPatchArrays
存储当前CUDA Patch Table包含的子数组的数量(也就是Patch Array的数目)。
int numPatches
存储当前CUDA Patch Table包含的所有块的数量(也就是Patch的数目)。
int patchIndexOffset
存储Patch Index序列的起始偏移量(也就是要细分的网格的细分等级低于当前Patch Table的最大细分层数)。
int patchIndexLength
存储Patch Index序列的长度(也就是包含在当前Patch Table中的所有Patch Index的数量)。
int patchArrayOffset
存储Patch Array序列的起始偏移量(也就是Patch Array集合中的第一个Patch Array在Patch Array序列中的偏移量)。
int patchArrayLengths[4]
存储每个Patch Array的长度。由于每个Patch Array的长度不同,当前数据结构使用数组来存储每个Patch Array的长度。
int patchArrayStrides[4]
存储每个Patch Array之间的跨度(也就是Patch Array集合中相邻两个Patch Array的地址之间的间隔)。
int patchArrayIndicesLength
存储Patch Array索引序列的长度(也就是包含在当前Patch Table中的所有Patch Array Index的数量)。
CudaPatchTable(int numPatches,
const int* patchArrayLengths,
const int* patchArrayIndices,
int patchIndexBase);
int numPatches
存储Patch Table包含的所有块的数量。
const int* patchArrayLengths
存储每个Patch Array的长度的数组。
const int* patchArrayIndices
存储Patch Array的Index列表的数组。
int patchIndexBase
存储当前Patch Table包含的Patch Index序列的起始偏移量。
在OpenSubdiv中,Osd.CudaPatchTable是一个存储三角形网格细分时的细分信息的数据结构。它包含了该数据结构的基本成员变量和构造函数,具有较高的可扩展性和灵活性。通过对这一数据结构的深入理解,我们可以更好地利用OpenSubdiv实现三角形网格的高效细分。